Skip to content

Instantly share code, notes, and snippets.

@JuniorDjjr
Created February 7, 2022 18:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save JuniorDjjr/72b18222115bba9bf5e175ccef08f482 to your computer and use it in GitHub Desktop.
Save JuniorDjjr/72b18222115bba9bf5e175ccef08f482 to your computer and use it in GitHub Desktop.
// by Junior_Djjr - MixMods.com.br
// You need: https://forum.mixmods.com.br/f141-gta3script-cleo/t5206-como-criar-scripts-com-cleoplus
SCRIPT_START
{
LVAR_INT scplayer i j k lCharList
LVAR_FLOAT x y z randX[8] randY[8] randZ[8]
CONST_INT MAX_RATS 3
GET_PLAYER_CHAR 0 scplayer
WHILE TRUE
WAIT 0
k = 0
x = 2495.484863
y = -1701.938965
z = 1014.742188
GOSUB CheckStart
k = 1
x = 506.101105
y = -75.744843
z = 998.757813
GOSUB CheckStart
k = 2
x = 2529.412842
y = -1678.651245
z = 1015.969421
GOSUB CheckStart
k = 3
x = 2450.302490
y = -1700.404785
z = 1013.507813
GOSUB CheckStart
k = 4
x = 321.302155
y = 1121.970947
z = 1083.882813
GOSUB CheckStart
k = 5
x = 1525.913208
y = -8.761256
z = 1002.085938
GOSUB CheckStart
k = 6
x = 2536.532959
y = -1301.636230
z = 1031.421875
GOSUB CheckStart
ENDWHILE
CheckStart:
IF LOCATE_CAMERA_DISTANCE_TO_COORDINATES x y z 20.0
SWITCH k
CASE 0 //CJ house
IF READ_INT_FROM_INI_FILE "CLEO\Rats Mod.ini" "Locations" "CJHouse" (k)
AND k = TRUE
i = 0
randX[i] = 2493.047852
randY[i] = -1694.804565
randZ[i] = 1014.903198
++i
randX[i] = 2499.607910
randY[i] = -1707.911987
randZ[i] = 1018.343750
++i
randX[i] = 2492.549072
randY[i] = -1709.792480
randZ[i] = 1014.742188
++i
randX[i] = 2498.110840
randY[i] = -1705.928833
randZ[i] = 1014.742188
++i
randX[i] = 2497.466797
randY[i] = -1711.765381
randZ[i] = 1014.742188
++i
randX[i] = 2497.284912
randY[i] = -1702.798950
randZ[i] = 1014.742188
++i
randX[i] = 2493.260498
randY[i] = -1703.696289
randZ[i] = 1018.343750
++i
randX[i] = 2495.993652
randY[i] = -1700.447754
randZ[i] = 1018.343750
ENDIF
BREAK
CASE 1 //grove bar
IF READ_INT_FROM_INI_FILE "CLEO\Rats Mod.ini" "Locations" "GroveBar" (k)
AND k = TRUE
i = 0
randX[i] = 511.538788
randY[i] = -87.032906
randZ[i] = 998.960938
++i
randX[i] = 505.469482
randY[i] = -82.489243
randZ[i] = 998.960938
++i
randX[i] = 508.221069
randY[i] = -69.612038
randZ[i] = 998.757813
++i
randX[i] = 501.618988
randY[i] = -71.894173
randZ[i] = 998.757813
++i
randX[i] = 508.171539
randY[i] = -88.165802
randZ[i] = 998.968262
++i
randX[i] = 504.547882
randY[i] = -69.818428
randZ[i] = 998.757813
++i
randX[i] = 511.474182
randY[i] = -79.680931
randZ[i] = 998.960938
++i
randX[i] = 505.523773
randY[i] = -78.412582
randZ[i] = 998.960938
ENDIF
BREAK
CASE 2 //sweet house
IF READ_INT_FROM_INI_FILE "CLEO\Rats Mod.ini" "Locations" "SweetHouse" (k)
AND k = TRUE
i = 0
randX[i] = 2537.216309
randY[i] = -1673.248169
randZ[i] = 1015.515625
++i
randX[i] = 2526.226074
randY[i] = -1673.522949
randZ[i] = 1015.500000
++i
randX[i] = 2527.432861
randY[i] = -1677.108154
randZ[i] = 1015.500000
++i
randX[i] = 2529.281006
randY[i] = -1684.184326
randZ[i] = 1015.507385
++i
randX[i] = 2534.339111
randY[i] = -1681.067749
randZ[i] = 1015.500000
++i
randX[i] = 2529.749023
randY[i] = -1672.738892
randZ[i] = 1015.500000
++i
randX[i] = 2525.188721
randY[i] = -1677.050659
randZ[i] = 1015.500000
++i
randX[i] = 2534.443115
randY[i] = -1676.805298
randZ[i] = 1015.507385
ENDIF
BREAK
CASE 3 //ryder house
IF READ_INT_FROM_INI_FILE "CLEO\Rats Mod.ini" "Locations" "RyderHouse" (k)
AND k = TRUE
i = 0
randX[i] = 2451.709961
randY[i] = -1686.887573
randZ[i] = 1013.507813
++i
randX[i] = 2452.157227
randY[i] = -1695.803467
randZ[i] = 1013.515198
++i
randX[i] = 2451.473389
randY[i] = -1692.279175
randZ[i] = 1013.507813
++i
randX[i] = 2455.802002
randY[i] = -1701.696289
randZ[i] = 1013.515198
++i
randX[i] = 2448.156982
randY[i] = -1704.860474
randZ[i] = 1013.507813
++i
randX[i] = 2448.262939
randY[i] = -1694.873169
randZ[i] = 1013.507813
++i
randX[i] = 2452.171143
randY[i] = -1688.053467
randZ[i] = 1013.507813
++i
randX[i] = 2449.938477
randY[i] = -1686.296997
randZ[i] = 1013.507813
ENDIF
BREAK
CASE 4 //crack house
IF READ_INT_FROM_INI_FILE "CLEO\Rats Mod.ini" "Locations" "CrackHouse" (k)
AND k = TRUE
i = 0
randX[i] = 326.175720
randY[i] = 1124.287964
randZ[i] = 1083.882813
++i
randX[i] = 322.097900
randY[i] = 1123.489380
randZ[i] = 1083.882813
++i
randX[i] = 321.553772
randY[i] = 1122.475464
randZ[i] = 1083.882813
++i
randX[i] = 324.210632
randY[i] = 1120.831787
randZ[i] = 1083.882813
++i
randX[i] = 322.580627
randY[i] = 1128.075317
randZ[i] = 1083.882813
++i
randX[i] = 325.640625
randY[i] = 1127.057617
randZ[i] = 1083.890259
++i
randX[i] = 316.380035
randY[i] = 1117.839478
randZ[i] = 1083.882813
++i
randX[i] = 324.356659
randY[i] = 1119.011475
randZ[i] = 1083.882813
ENDIF
BREAK
CASE 5 //bdup house
IF READ_INT_FROM_INI_FILE "CLEO\Rats Mod.ini" "Locations" "BDupHouse" (k)
AND k = TRUE
i = 0
randX[i] = 1525.913208
randY[i] = -8.761256
randZ[i] = 1002.085938
++i
randX[i] = 1526.905396
randY[i] = -13.020006
randZ[i] = 1002.078125
++i
randX[i] = 1528.660156
randY[i] = -9.140397
randZ[i] = 1002.078125
++i
randX[i] = 1531.516602
randY[i] = -12.242693
randZ[i] = 1002.078125
++i
randX[i] = 1525.913208
randY[i] = -8.761256
randZ[i] = 1002.085938
++i
randX[i] = 1526.905396
randY[i] = -13.020006
randZ[i] = 1002.078125
++i
randX[i] = 1528.660156
randY[i] = -9.140397
randZ[i] = 1002.078125
++i
randX[i] = 1531.516602
randY[i] = -12.242693
randZ[i] = 1002.078125
ENDIF
BREAK
CASE 6 //carter
IF READ_INT_FROM_INI_FILE "CLEO\Rats Mod.ini" "Locations" "FinalCarter" (k)
AND k = TRUE
i = 0
randX[i] = 2536.818848
randY[i] = -1287.500854
randZ[i] = 1031.421875
++i
randX[i] = 2531.118652
randY[i] = -1288.522461
randZ[i] = 1031.421875
++i
randX[i] = 2536.892822
randY[i] = -1298.400391
randZ[i] = 1031.421875
++i
randX[i] = 2531.616211
randY[i] = -1304.703613
randZ[i] = 1031.421875
++i
randX[i] = 2544.272705
randY[i] = -1303.306030
randZ[i] = 1031.421875
++i
randX[i] = 2541.261475
randY[i] = -1293.737671
randZ[i] = 1031.421875
++i
randX[i] = 2535.532227
randY[i] = -1292.213501
randZ[i] = 1031.421875
++i
randX[i] = 2537.005371
randY[i] = -1299.349121
randZ[i] = 1031.421875
ENDIF
BREAK
ENDSWITCH
IF k = TRUE
GOSUB WhileLocation
ELSE
WHILE LOCATE_CAMERA_DISTANCE_TO_COORDINATES x y z 50.0
WAIT 0
ENDWHILE
ENDIF
ENDIF
RETURN
WhileLocation:
GET_MODEL_DOESNT_EXIST_IN_RANGE 15000 15024 (k)
LOAD_SPECIAL_CHARACTER_FOR_ID k CHARRAT
LOAD_ALL_MODELS_NOW
CREATE_LIST DATATYPE_INT lCharList
i = 0
WHILE i < MAX_RATS
GENERATE_RANDOM_INT_IN_RANGE 0 8 (j)
CREATE_CHAR PEDTYPE_CIVMALE k randX[j] randY[j] randZ[j] (j)
SHUT_CHAR_UP j ON
SET_CHAR_NEVER_TARGETTED j ON
LIST_ADD lCharList j
++i
ENDWHILE
GOSUB RandomNewTarget
WHILE LOCATE_CAMERA_DISTANCE_TO_COORDINATES x y z 50.0
WAIT 0
IF timera > k
GOSUB RandomNewTarget
ENDIF
GOSUB UpdateCollision
ENDWHILE
i = 0
j = -1 // no variable available to store it, so get the model now, because UNLOAD_SPECIAL_CHARACTER_FROM_ID is recommended to be called after char deleted
WHILE i < MAX_RATS
GET_LIST_VALUE_BY_INDEX lCharList i (k)
IF j = -1
GET_CHAR_MODEL k (j)
ENDIF
DELETE_CHAR k
++i
ENDWHILE
WAIT 0
UNLOAD_SPECIAL_CHARACTER_FROM_ID j
RETURN
UpdateCollision:
i = 0
WHILE i < MAX_RATS
GET_LIST_VALUE_BY_INDEX lCharList i (j)
IF NOT IS_CHAR_DEAD j
IF LOCATE_CHAR_DISTANCE_TO_CHAR j scplayer 1.2
SET_CHAR_COLLISION j OFF
CLEO_CALL SlideCharAnyDirection 0 (j)()
ELSE
SET_CHAR_COLLISION j ON
ENDIF
ENDIF
++i
ENDWHILE
RETURN
RandomNewTarget:
i = 0
WHILE i < MAX_RATS
GET_LIST_VALUE_BY_INDEX lCharList i (k)
IF NOT IS_CHAR_DEAD k
GENERATE_RANDOM_INT_IN_RANGE 0 8 (j)
TASK_GO_TO_COORD_ANY_MEANS k randX[j] randY[j] randZ[j] 7 -1
ENDIF
++i
ENDWHILE
timera = 0
GENERATE_RANDOM_INT_IN_RANGE 0 6000 (k)
RETURN
}
SCRIPT_END
{
LVAR_INT hChar //In
LVAR_INT bFound
LVAR_FLOAT x y z x2 y2 z2 newX newY newZ f offsetX offsetY angle newAngle
SlideCharAnyDirection:
bFound = TRUE
GET_CHAR_COORDINATES hChar x y z
offsetX = 2.0
offsetY = 0.0
angle = -90.0
IF GOSUB CheckDirectionObstable
offsetX = -2.0
offsetY = 0.0
angle = 90.0
IF GOSUB CheckDirectionObstable
offsetX = 0.0
offsetY = 2.0
angle = 0.0
IF GOSUB CheckDirectionObstable
offsetX = 0.0
offsetY = -2.0
angle = -180.0
IF GOSUB CheckDirectionObstable
bFound = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
IF bFound = TRUE
z2 -= 0.1
f = 0.0
WHILE f < 1.0
WAIT 0
IF IS_CHAR_DEAD hChar
BREAK
ENDIF
LERP x x2 f (newX)
LERP y y2 f (newY)
LERP z z2 f (newZ)
SET_CHAR_COORDINATES_SIMPLE hChar newX newY newZ
SET_CHAR_HEADING hChar angle
f +=@ 0.07
ENDWHILE
ENDIF
CLEO_RETURN 0 ()
CheckDirectionObstable:
x2 = x + offsetX
y2 = y + offsetY
z2 = z + 0.1
IF NOT IS_LINE_OF_SIGHT_CLEAR x y z x2 y2 z2 1 0 0 0 2
OR RANDOM_PERCENT 80 // include a percent to fail, to avoid sliding to the same direction every time
RETURN_TRUE
RETURN
ENDIF
RETURN_FALSE
RETURN
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment