Last active
January 5, 2024 17:24
-
-
Save JuniorDjjr/e46312e95b5c5ed0ab52f8ae452b51ee to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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 pTempString // In | |
LVAR_INT pFileString iAreaID bSpawnOnMission i lPedList iPed pKeyString pPedSpawn iTotalPeds hChar bLazySpawn bLoadAnim iTestMode lCreatedPedsList bInPanic | |
LVAR_FLOAT f x y z spawnX spawnY spawnZ radius | |
LVAR_TEXT_LABEL16 tAnimIfp tAnim | |
CONST_INT PED_SPAWN_COORD_X 0 | |
CONST_INT PED_SPAWN_COORD_Y 1 | |
CONST_INT PED_SPAWN_COORD_Z 2 | |
CONST_INT PED_SPAWN_ANGLE 3 | |
CONST_INT PED_SPAWN_MODEL 4 | |
CONST_INT PED_SPAWN_FIX_GROUND 5 | |
CONST_INT PED_SPAWN_FREEZE 6 | |
CONST_INT PED_SPAWN_COLLISION 7 | |
CONST_INT PED_SPAWN_CHANCE 8 | |
CONST_INT PED_SPAWN_ANIM_IFP_OFFSET 36 // size 16 | |
CONST_INT PED_SPAWN_ANIM_OFFSET 52 // size 16 | |
CONST_INT SIZE_OF_PED_SPAWN_STRUCT 68 // 16 + 16 + (4*9) | |
GET_LABEL_POINTER Buffer pFileString | |
IF pTempString = 0 // First thread (root) | |
WAIT 0 // ignore first load frame, that then reloads | |
WAIT 0 | |
IF FIND_FIRST_FILE "CLEO\Ped Spawn Creator\*.ini" (i pFileString) | |
WHILE TRUE | |
STREAM_CUSTOM_SCRIPT "Ped Spawn Creator (Junior_Djjr).cs" pFileString | |
WAIT 0 // to make .cs use the allocate memory var, so we can change it again | |
IF NOT FIND_NEXT_FILE i (pFileString) | |
BREAK | |
ENDIF | |
ENDWHILE | |
ENDIF | |
TERMINATE_THIS_CUSTOM_SCRIPT | |
ENDIF | |
// Each thread starts with pTempString as .ini file name | |
STRING_FORMAT pFileString "CLEO\Ped Spawn Creator\%s" $pTempString | |
GET_LABEL_POINTER Buffer2 pTempString | |
IF READ_STRING_FROM_INI_FILE $pFileString "Settings" "Coord" (pTempString) | |
IF NOT SCAN_STRING $pTempString "%f %f %f" i spawnX spawnY spawnZ | |
PRINT_FORMATTED_NOW "~r~Error: Unable to read 'Coord' from %s" 10000 $pFileString | |
TERMINATE_THIS_CUSTOM_SCRIPT | |
ENDIF | |
ELSE | |
PRINT_FORMATTED_NOW "~r~Error: Unable to find 'Coord' from %s" 10000 $pFileString | |
TERMINATE_THIS_CUSTOM_SCRIPT | |
ENDIF | |
IF NOT READ_INT_FROM_INI_FILE $pFileString "Settings" "AreaID" (iAreaID) | |
PRINT_FORMATTED_NOW "~r~Error: Unable to read 'AreaID' from %s" 10000 $pFileString | |
TERMINATE_THIS_CUSTOM_SCRIPT | |
ELSE | |
IF iAreaID = 0 | |
PRINT_FORMATTED_NOW "~r~%s is using AreaID 0, which isn't adapted yet. Please use this mod for interiors only." 10000 $pFileString | |
TERMINATE_THIS_CUSTOM_SCRIPT | |
ENDIF | |
ENDIF | |
IF NOT READ_INT_FROM_INI_FILE $pFileString "Settings" "SpawnOnMission" (bSpawnOnMission) | |
PRINT_FORMATTED_NOW "~r~Error: Unable to read 'SpawnOnMission' from %s" 10000 $pFileString | |
TERMINATE_THIS_CUSTOM_SCRIPT | |
ENDIF | |
IF NOT READ_FLOAT_FROM_INI_FILE $pFileString "Settings" "Radius" (radius) | |
PRINT_FORMATTED_NOW "~r~Error: Unable to read 'Radius' from %s" 10000 $pFileString | |
TERMINATE_THIS_CUSTOM_SCRIPT | |
ENDIF | |
GET_LABEL_POINTER Buffer3 pKeyString | |
CREATE_LIST DATATYPE_INT (lPedList) | |
CREATE_LIST DATATYPE_INT (lCreatedPedsList) | |
iPed = 1 | |
WHILE TRUE | |
STRING_FORMAT pKeyString "Ped%i" iPed | |
IF READ_STRING_FROM_INI_FILE $pFileString $pKeyString "Coord" (pTempString) | |
IF SCAN_STRING $pTempString "%f %f %f" i x y z | |
ALLOCATE_MEMORY SIZE_OF_PED_SPAWN_STRUCT (pPedSpawn) | |
LIST_ADD lPedList pPedSpawn | |
WRITE_STRUCT_PARAM pPedSpawn PED_SPAWN_COORD_X x | |
WRITE_STRUCT_PARAM pPedSpawn PED_SPAWN_COORD_Y y | |
WRITE_STRUCT_PARAM pPedSpawn PED_SPAWN_COORD_Z z | |
IF NOT READ_FLOAT_FROM_INI_FILE $pFileString $pKeyString "Angle" (f) | |
f = 0.0 | |
ENDIF | |
WRITE_STRUCT_PARAM pPedSpawn PED_SPAWN_ANGLE f | |
IF NOT READ_INT_FROM_INI_FILE $pFileString $pKeyString "Model" (i) | |
i = -1 | |
ENDIF | |
WRITE_STRUCT_PARAM pPedSpawn PED_SPAWN_MODEL i | |
IF NOT READ_INT_FROM_INI_FILE $pFileString $pKeyString "FixGround" (i) | |
i = TRUE | |
ENDIF | |
WRITE_STRUCT_PARAM pPedSpawn PED_SPAWN_FIX_GROUND i | |
IF NOT READ_INT_FROM_INI_FILE $pFileString $pKeyString "Freeze" (i) | |
i = FALSE | |
ENDIF | |
WRITE_STRUCT_PARAM pPedSpawn PED_SPAWN_FREEZE i | |
IF NOT READ_INT_FROM_INI_FILE $pFileString $pKeyString "Collision" (i) | |
i = TRUE | |
ENDIF | |
WRITE_STRUCT_PARAM pPedSpawn PED_SPAWN_COLLISION i | |
IF NOT READ_INT_FROM_INI_FILE $pFileString $pKeyString "Chance" (i) | |
i = 100 | |
ENDIF | |
WRITE_STRUCT_PARAM pPedSpawn PED_SPAWN_CHANCE i | |
IF NOT READ_STRING_FROM_INI_FILE $pFileString $pKeyString "AnimIFP" (pTempString) | |
STRING_FORMAT pTempString "" | |
ENDIF | |
i = pPedSpawn + PED_SPAWN_ANIM_IFP_OFFSET | |
STRING_FORMAT i "%s" $pTempString | |
IF NOT READ_STRING_FROM_INI_FILE $pFileString $pKeyString "Anim" (pTempString) | |
STRING_FORMAT pTempString "" | |
ENDIF | |
i = pPedSpawn + PED_SPAWN_ANIM_OFFSET | |
STRING_FORMAT i "%s" $pTempString | |
ELSE | |
PRINT_FORMATTED_NOW "~r~Error: Unable to read 'Coord' from %s ped %i" 10000 $pFileString iPed | |
BREAK | |
ENDIF | |
ELSE | |
BREAK | |
ENDIF | |
++iPed | |
ENDWHILE | |
IF READ_INT_FROM_INI_FILE $pFileString "Settings" "TestMode" (iTestMode) | |
AND iTestMode > 0 | |
WAIT 500 | |
SET_AREA_VISIBLE iAreaID | |
GET_PLAYER_CHAR 0 (hChar) | |
SET_CHAR_AREA_VISIBLE hChar iAreaID | |
SET_CHAR_COORDINATES hChar spawnX spawnY spawnZ | |
WAIT 1500 | |
ENDIF | |
WHILE TRUE | |
GOSUB Process | |
GET_AREA_VISIBLE (i) | |
IF i = iAreaID | |
IF NOT IS_ON_MISSION | |
OR bSpawnOnMission = TRUE | |
IF LOCATE_CAMERA_DISTANCE_TO_COORDINATES spawnX spawnY spawnZ radius | |
//PRINT_STRING_NOW "ok" 100 | |
GOSUB CreatePeds | |
radius += 10.0 | |
WHILE LOCATE_CAMERA_DISTANCE_TO_COORDINATES spawnX spawnY spawnZ radius | |
GET_AREA_VISIBLE (i) | |
IF NOT i = iAreaID | |
BREAK | |
ENDIF | |
i = 0 //player ID | |
GOSUB CheckPanic | |
IF IS_2PLAYER_GAME_GOING_ON | |
GET_PLAYER_CHAR 1 (hChar) | |
GOSUB CheckPanic | |
ENDIF | |
GOSUB Process | |
ENDWHILE | |
radius -= 10.0 | |
GOSUB ReleasePeds | |
ENDIF | |
ENDIF | |
ENDIF | |
ENDWHILE | |
TERMINATE_THIS_CUSTOM_SCRIPT | |
Process: | |
WAIT 0 | |
IF iTestMode > 0 | |
IF TEST_CHEAT AREAID | |
GET_AREA_VISIBLE (timerb) | |
PRINT_FORMATTED_NOW "Current Area ID: %i" 4000 timerb | |
ENDIF | |
ENDIF | |
RETURN | |
CheckPanic: | |
IF bInPanic = FALSE | |
GET_PLAYER_CHAR i (hChar) | |
IF IS_CHAR_SHOOTING hChar | |
GOSUB SetPanic | |
RETURN | |
ENDIF | |
IF GET_CHAR_PLAYER_IS_TARGETING i timera | |
AND DOES_CHAR_EXIST timera | |
GET_CURRENT_CHAR_WEAPON hChar (timera) | |
IF IS_WEAPON_FIRE_TYPE timera WEAPONFIRE_INSTANT_HIT | |
OR IS_WEAPON_FIRE_TYPE timera WEAPONFIRE_PROJECTILE | |
OR IS_WEAPON_FIRE_TYPE timera WEAPONFIRE_AREA_EFFECT | |
GOSUB SetPanic | |
RETURN | |
ENDIF | |
ENDIF | |
IF IS_CHAR_FIGHTING hChar | |
timerb = 0 | |
WHILE GET_ANY_CHAR_NO_SAVE_RECURSIVE timerb (timerb timera) | |
IF NOT hChar = timera | |
IF LOCATE_CHAR_DISTANCE_TO_CHAR hChar timera 1.0 | |
hChar = timera | |
GOSUB ClearTaskThisChar | |
RETURN | |
ENDIF | |
ENDIF | |
ENDWHILE | |
ENDIF | |
ENDIF | |
RETURN | |
SetPanic: | |
iPed = 0 | |
GET_LIST_SIZE lCreatedPedsList (iTotalPeds) | |
WHILE iPed < iTotalPeds | |
GET_LIST_VALUE_BY_INDEX lCreatedPedsList iPed (hChar) | |
IF DOES_CHAR_EXIST hChar | |
GOSUB ClearTaskThisChar | |
ENDIF | |
++iPed | |
ENDWHILE | |
bInPanic = TRUE | |
RETURN | |
ClearTaskThisChar: | |
IF GET_EXTENDED_CHAR_VAR hChar AUTO 1 (timera) | |
IF timera = 1 | |
FREEZE_CHAR_POSITION hChar OFF | |
SET_CHAR_COLLISION hChar TRUE | |
CLEAR_CHAR_TASKS hChar | |
MARK_CHAR_AS_NO_LONGER_NEEDED hChar // releases everything | |
MARK_CHAR_AS_NEEDED hChar // but make sure that don't delete it | |
SET_EXTENDED_CHAR_VAR hChar AUTO 1 0 | |
ENDIF | |
ENDIF | |
RETURN | |
CreatePeds: | |
bInPanic = FALSE | |
iPed = 0 | |
GET_LIST_SIZE lPedList (iTotalPeds) | |
WHILE iPed < iTotalPeds | |
GET_LIST_VALUE_BY_INDEX lPedList iPed (pPedSpawn) | |
READ_STRUCT_PARAM pPedSpawn PED_SPAWN_CHANCE (i) | |
IF RANDOM_PERCENT i | |
OR iTestMode = 2 | |
READ_STRUCT_PARAM pPedSpawn PED_SPAWN_COORD_X (x) | |
READ_STRUCT_PARAM pPedSpawn PED_SPAWN_COORD_Y (y) | |
READ_STRUCT_PARAM pPedSpawn PED_SPAWN_COORD_Z (z) | |
GET_FADE_ALPHA f | |
IF f > 0.8 | |
bLazySpawn = FALSE | |
ELSE | |
bLazySpawn = TRUE | |
ENDIF | |
pTempString = pPedSpawn + PED_SPAWN_ANIM_IFP_OFFSET | |
GET_STRING_LENGTH $pTempString (i) | |
IF i > 1 | |
STRING_FORMAT tAnimIfp "%s" pTempString | |
IF NOT IS_STRING_EQUAL $pTempString "ped" 3 FALSE "" | |
REQUEST_ANIMATION $tAnimIfp | |
bLoadAnim = TRUE | |
ENDIF | |
ENDIF | |
READ_STRUCT_PARAM pPedSpawn PED_SPAWN_MODEL (i) | |
IF i >= 0 | |
REQUEST_MODEL i | |
IF bLazySpawn = TRUE | |
WHILE NOT HAS_MODEL_LOADED i | |
WAIT 0 | |
ENDWHILE | |
IF bLoadAnim = TRUE | |
//PRINT_FORMATTED_NOW "loading ifp '%s'" 10000 $tAnimIfp | |
WHILE NOT HAS_ANIMATION_LOADED $tAnimIfp | |
WAIT 0 | |
ENDWHILE | |
ENDIF | |
ELSE | |
LOAD_ALL_MODELS_NOW | |
ENDIF | |
GET_MODEL_PED_TYPE i (timera timerb) | |
CREATE_CHAR timera i x y z (hChar) | |
MARK_MODEL_AS_NO_LONGER_NEEDED i | |
ELSE | |
IF bLoadAnim = TRUE | |
IF bLazySpawn = TRUE | |
WHILE NOT HAS_ANIMATION_LOADED $tAnimIfp | |
WAIT 0 | |
ENDWHILE | |
ELSE | |
LOAD_ALL_MODELS_NOW | |
ENDIF | |
ENDIF | |
CREATE_RANDOM_CHAR x y z (hChar) | |
ENDIF | |
SET_CHAR_AREA_VISIBLE hChar iAreaID | |
READ_STRUCT_PARAM pPedSpawn PED_SPAWN_ANGLE (f) | |
SET_CHAR_HEADING hChar f | |
READ_STRUCT_PARAM pPedSpawn PED_SPAWN_FIX_GROUND (i) | |
FIX_CHAR_GROUND_BRIGHTNESS_AND_FADE_IN hChar i TRUE bLazySpawn | |
READ_STRUCT_PARAM pPedSpawn PED_SPAWN_FREEZE (i) | |
FREEZE_CHAR_POSITION hChar i | |
READ_STRUCT_PARAM pPedSpawn PED_SPAWN_COLLISION (i) | |
SET_CHAR_COLLISION hChar i | |
pTempString = pPedSpawn + PED_SPAWN_ANIM_OFFSET | |
GET_STRING_LENGTH $pTempString (i) | |
IF i > 1 | |
STRING_FORMAT tAnim "%s" pTempString | |
//PRINT_FORMATTED_NOW "'%s' '%s'" 10000 $tAnim $tAnimIfp | |
READ_STRUCT_PARAM pPedSpawn PED_SPAWN_FREEZE (i) | |
IF i = TRUE | |
TASK_PLAY_ANIM_NON_INTERRUPTABLE hChar $tAnim $tAnimIfp 20.0 TRUE FALSE FALSE FALSE -1 | |
ELSE | |
TASK_PLAY_ANIM hChar $tAnim $tAnimIfp 20.0 TRUE FALSE FALSE FALSE -1 | |
ENDIF | |
ENDIF | |
// Extended vars will be very useful for upcoming in-game editor | |
INIT_EXTENDED_CHAR_VARS hChar AUTO 2 | |
SET_EXTENDED_CHAR_VAR hChar AUTO 1 1 // is doing tasks | |
pTempString = pPedSpawn + PED_SPAWN_ANIM_IFP_OFFSET | |
SET_EXTENDED_CHAR_VAR hChar AUTO 2 pTempString | |
LIST_ADD lCreatedPedsList hChar | |
ENDIF | |
++iPed | |
ENDWHILE | |
RETURN | |
ReleasePeds: | |
iPed = 0 | |
GET_LIST_SIZE lCreatedPedsList (iTotalPeds) | |
WHILE iPed < iTotalPeds | |
GET_LIST_VALUE_BY_INDEX lCreatedPedsList iPed (hChar) | |
IF DOES_CHAR_EXIST hChar | |
IF GET_EXTENDED_CHAR_VAR hChar AUTO 2 (pTempString) | |
STRING_FORMAT tAnimIfp "%s" pTempString | |
REMOVE_ANIMATION $tAnimIfp | |
ENDIF | |
DELETE_CHAR hChar | |
ENDIF | |
++iPed | |
ENDWHILE | |
RESET_LIST lCreatedPedsList | |
RETURN | |
} | |
SCRIPT_END | |
Buffer: | |
DUMP | |
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
ENDDUMP | |
Buffer2: | |
DUMP | |
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
ENDDUMP | |
Buffer3: | |
DUMP | |
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
ENDDUMP |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment