Last active
January 5, 2024 17:57
-
-
Save JuniorDjjr/708ac9af223290505214f0d6e08690dc 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
// Ped Fear Fix 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 i j k iPlayerId scplayer hChar hVeh p iTaskStatus iMinPedFear iMode iPedType iWantedLevel bFleeFromCarFireEnable bFleeFromChainsaw bFleeFromGuns bOnlyUsing iFindVehProgress iFindCharProgress bShooting bDevastingWeapon | |
LVAR_FLOAT camx camy camz x y z fRadius fCarFireRadius fFleeRadius fCarFireFleeRadius fChainsawRadius | |
CONST_INT MODE_ONLY_COWARDS 1 | |
CONST_INT MODE_ALL_COWARDS_AND_LESS_OTHERS 2 | |
CONST_INT MODE_ALL 3 | |
///////////////////////////////////////////////// | |
GET_PLAYER_CHAR 0 (scplayer) | |
IF NOT READ_INT_FROM_INI_FILE "CLEO\Ped Fear Fix.ini" "FleeFromGuns" "Enable" (bFleeFromGuns) | |
OR NOT READ_INT_FROM_INI_FILE "CLEO\Ped Fear Fix.ini" "FleeFromGuns" "OnlyUsing" (bOnlyUsing) | |
OR NOT READ_INT_FROM_INI_FILE "CLEO\Ped Fear Fix.ini" "FleeFromGuns" "MinPedFear" (iMinPedFear) | |
OR NOT READ_INT_FROM_INI_FILE "CLEO\Ped Fear Fix.ini" "FleeFromGuns" "Mode" (iMode) | |
OR NOT READ_INT_FROM_INI_FILE "CLEO\Ped Fear Fix.ini" "FleeFromGuns" "WantedLevel" (iWantedLevel) | |
OR NOT READ_FLOAT_FROM_INI_FILE "CLEO\Ped Fear Fix.ini" "FleeFromGuns" "Radius" (fRadius) | |
GOTO ReadIniError | |
ENDIF | |
IF NOT READ_INT_FROM_INI_FILE "CLEO\Ped Fear Fix.ini" "FleeFromCarFire" "Enable" (bFleeFromCarFireEnable) | |
OR NOT READ_FLOAT_FROM_INI_FILE "CLEO\Ped Fear Fix.ini" "FleeFromCarFire" "Radius" (fCarFireRadius) | |
OR NOT READ_INT_FROM_INI_FILE "CLEO\Ped Fear Fix.ini" "FleeFromChainsaw" "Enable" (bFleeFromChainsaw) | |
OR NOT READ_FLOAT_FROM_INI_FILE "CLEO\Ped Fear Fix.ini" "FleeFromChainsaw" "Radius" (fChainsawRadius) | |
GOTO ReadIniError | |
ENDIF | |
fFleeRadius = fRadius + 10.0 | |
fCarFireFleeRadius = fCarFireRadius + 20.0 | |
///////////////////////////////////////////////// | |
WHILE TRUE | |
WAIT 40 | |
IF NOT IS_ON_CUTSCENE | |
AND NOT IS_ON_SCRIPTED_CUTSCENE | |
IF bFleeFromCarFireEnable = TRUE | |
iFindVehProgress = 0 | |
WHILE GET_ANY_CAR_NO_SAVE_RECURSIVE iFindVehProgress (iFindVehProgress hVeh) | |
GOSUB ActiveForVehicle | |
ENDWHILE | |
ENDIF | |
IF bFleeFromGuns = TRUE | |
OR bFleeFromChainsaw = TRUE | |
iPlayerId = 0 | |
GOSUB ActiveForPlayer | |
IF IS_2PLAYER_GAME_GOING_ON | |
iPlayerId = 1 | |
GOSUB ActiveForPlayer | |
ENDIF | |
ENDIF | |
ENDIF | |
ENDWHILE | |
///////////////////////////////////////////////// | |
ActiveForVehicle: | |
IF NOT IS_CAR_HEALTH_GREATER hVeh 250 | |
GET_CAR_COORDINATES hVeh x y z | |
iFindCharProgress = 0 | |
WHILE GET_ANY_CHAR_NO_SAVE_RECURSIVE iFindCharProgress (iFindCharProgress hChar) | |
IF LOCATE_CHAR_DISTANCE_TO_COORDINATES hChar x y z fCarFireRadius | |
AND NOT IS_CHAR_SCRIPT_CONTROLLED hChar | |
GOSUB ProcessCharCarFire | |
ENDIF | |
ENDWHILE | |
ENDIF | |
RETURN | |
ProcessCharCarFire: | |
GET_SCRIPT_TASK_STATUS hChar 0x5DC (iTaskStatus) // get TASK_SMART_FLEE_POINT status | |
IF iTaskStatus = 7 | |
IF NOT IS_CHAR_IN_ANY_CAR hChar | |
TASK_SMART_FLEE_POINT hChar x y z fCarFireFleeRadius 5000 | |
ENDIF | |
ENDIF | |
RETURN | |
ActiveForPlayer: | |
GET_PLAYER_CHAR iPlayerId scplayer | |
IF IS_CHAR_ENTERING_ANY_CAR scplayer // because he gets the weapon when entering | |
RETURN | |
ENDIF | |
GET_MAX_WANTED_LEVEL i | |
IF i > 0 | |
IF NOT IS_CHAR_IN_ANY_CAR scplayer | |
GOSUB ExecutePlayer | |
ELSE | |
IF IS_CHAR_ON_ANY_BIKE scplayer | |
GOSUB ExecutePlayer | |
ENDIF | |
ENDIF | |
ENDIF | |
RETURN | |
ExecutePlayer: | |
bDevastingWeapon = FALSE | |
IF bFleeFromGuns = TRUE | |
IF IS_CHAR_USING_GUN scplayer | |
OR bOnlyUsing = FALSE | |
IF CLEO_CALL IsCharHoldingDangerousWeapon 0 (scplayer)() | |
GET_CHAR_WEAPON_STATE scplayer i | |
IF i = WEAPONSTATE_SHOOTING | |
bShooting = TRUE | |
ELSE | |
bShooting = FALSE | |
ENDIF | |
IF CLEO_CALL IsCharUsingDevastingWeapon 0 (scplayer)() | |
bDevastingWeapon = TRUE | |
ELSE | |
bDevastingWeapon = FALSE | |
ENDIF | |
GET_CHAR_COORDINATES scplayer x y z | |
iFindCharProgress = 0 | |
WHILE GET_ANY_CHAR_NO_SAVE_RECURSIVE iFindCharProgress (iFindCharProgress hChar) | |
IF LOCATE_CHAR_DISTANCE_TO_COORDINATES hChar x y z fRadius | |
GOSUB ProcessCharReaction | |
ENDIF | |
ENDWHILE | |
RETURN | |
ENDIF | |
ENDIF | |
ENDIF | |
IF bFleeFromChainsaw = TRUE | |
IF IS_CURRENT_CHAR_WEAPON scplayer WEAPONTYPE_CHAINSAW | |
IF IS_CHAR_FIGHTING scplayer | |
bShooting = TRUE | |
GET_CHAR_COORDINATES scplayer x y z | |
iFindCharProgress = 0 | |
WHILE GET_ANY_CHAR_NO_SAVE_RECURSIVE iFindCharProgress (iFindCharProgress hChar) | |
IF LOCATE_CHAR_DISTANCE_TO_COORDINATES hChar x y z fChainsawRadius | |
GOSUB ProcessCharReaction | |
ENDIF | |
ENDWHILE | |
RETURN | |
ENDIF | |
ENDIF | |
ENDIF | |
RETURN | |
ProcessCharReaction: | |
GET_PED_TYPE hChar (iPedType) | |
IF iPedType <= 1 // is player 1 or 2 | |
RETURN | |
ENDIF | |
IF GOSUB IsCop | |
IF iWantedLevel > 0 | |
IF HAS_CHAR_SPOTTED_CHAR_IN_FRONT hChar scplayer | |
ALTER_WANTED_LEVEL_NO_DROP 0 1 | |
ENDIF | |
ENDIF | |
// If player is holding a devasting weapon, cops can also flee | |
IF bDevastingWeapon = FALSE | |
RETURN | |
ENDIF | |
ENDIF | |
IF bDevastingWeapon = TRUE | |
IF IS_CHAR_IN_ANY_CAR hChar | |
RETURN | |
ENDIF | |
// Don't enable it if the victim is also using a devasting weapon | |
IF CLEO_CALL IsCharUsingDevastingWeapon 0 (hChar)() | |
RETURN | |
ENDIF | |
GOSUB CharFlee | |
RETURN | |
ENDIF | |
IF IS_CHAR_IN_ANY_CAR hChar | |
OR IS_CHAR_SCRIPT_CONTROLLED hChar | |
RETURN | |
ENDIF | |
IF iMode = MODE_ONLY_COWARDS | |
IF IS_LOCAL_VAR_BIT_SET_CONST hChar 0 // 50% chances each char, for custom chances, use GET_CHAR_RANDOM_SEED + GENERATE_RANDOM_INT_IN_RANGE_WITH_SEED | |
RETURN | |
ENDIF | |
ENDIF | |
IF iPedType = PEDTYPE_CIVMALE | |
OR iPedType = PEDTYPE_CIVFEMALE | |
OR iPedType = PEDTYPE_MEDIC | |
OR iPedType = PEDTYPE_FIRE | |
OR iPedType = PEDTYPE_PROSTITUTE | |
IF CLEO_CALL IsCharHoldingDangerousWeapon 0 hChar | |
ELSE | |
IF iMode = MODE_ALL | |
GOSUB CharFlee | |
ELSE | |
GET_CHAR_FEAR hChar i | |
IF i > iMinPedFear | |
OR bShooting = TRUE | |
GOSUB CharFlee | |
ELSE | |
IF iMode = MODE_ALL_COWARDS_AND_LESS_OTHERS | |
IF IS_LOCAL_VAR_BIT_SET_CONST hChar 0 // 50% chances each char | |
GOSUB CharFlee | |
ENDIF | |
ENDIF | |
ENDIF | |
ENDIF | |
ENDIF | |
ENDIF | |
RETURN | |
IsCop: | |
IF iPedType = PEDTYPE_COP | |
RETURN_TRUE | |
RETURN | |
ENDIF | |
GET_CHAR_STAT_ID hChar p | |
IF p = PEDSTAT_COP | |
RETURN_TRUE | |
RETURN | |
ENDIF | |
GET_CHAR_MODEL hChar p | |
IF p >= 280 | |
AND p <= 288 | |
RETURN_TRUE | |
RETURN | |
ENDIF | |
RETURN_FALSE | |
RETURN | |
CharFlee: | |
// Check TASK_SMART_FLEE_CHAR command status | |
// IS_CHAR_DOING_TASK_ID is another option | |
GET_SCRIPT_TASK_STATUS hChar 0x5DD (iTaskStatus) | |
IF iTaskStatus = 7 | |
IF bShooting = TRUE | |
OR HAS_CHAR_SPOTTED_CHAR_IN_FRONT hChar scplayer | |
TASK_SMART_FLEE_CHAR hChar scplayer fFleeRadius 5000 | |
ENDIF | |
ENDIF | |
RETURN | |
ReadIniError: | |
timera = 0 | |
WHILE timera < 5000 | |
WAIT 0 | |
PRINT_STRING_NOW "~r~Fail to load 'CLEO\Ped Fear Fix.ini'" 1000 | |
ENDWHILE | |
TERMINATE_THIS_CUSTOM_SCRIPT | |
} | |
SCRIPT_END | |
///////////////////////////////////////////////// | |
{ | |
/* | |
Return true if char is holding any fire or explosion weapon - By Junior_Djjr | |
Use: IF CLEO_CALL IsCharHoldingDangerousWeapon 0 (hChar)() | |
*/ | |
LVAR_INT hChar // In | |
LVAR_INT iWeaponType pWeaponInfo iFireType | |
IsCharHoldingDangerousWeapon: | |
GET_CURRENT_CHAR_WEAPON hChar (iWeaponType) | |
IF iWeaponType > 0 | |
GET_CURRENT_CHAR_WEAPONINFO hChar (pWeaponInfo) | |
GET_WEAPONINFO_FIRE_TYPE pWeaponInfo (iFireType) | |
IF iFireType = WEAPONFIRE_INSTANT_HIT | |
OR iFireType = WEAPONFIRE_PROJECTILE | |
OR iWeaponType = WEAPONTYPE_FLAMETHROWER // this is AREA_EFFECT, but spraycan too, so we need to check by weapontype | |
// You may want to include knife, chainsaw, katana, but you can't check knife by animgroup because dildo uses the same animgroup | |
IF IS_CHAR_WEAPON_VISIBLE_SET hChar // also consider weapon visibility (player only, at least for now) | |
RETURN_TRUE | |
CLEO_RETURN 0 () | |
ENDIF | |
ENDIF | |
ENDIF | |
RETURN_FALSE | |
CLEO_RETURN 0 () | |
} | |
{ | |
/* | |
Return true if char is holding any powerful weapon - By Junior_Djjr | |
Use: IF CLEO_CALL IsCharUsingDevastingWeapon 0 (hChar)() | |
*/ | |
LVAR_INT hChar // In | |
LVAR_INT iWeaponType pWeaponInfo iFireType iAnimGroup | |
IsCharUsingDevastingWeapon: | |
GET_CURRENT_CHAR_WEAPON hChar (iWeaponType) | |
IF iWeaponType > 0 | |
IF IS_CHAR_USING_GUN hChar | |
GET_CURRENT_CHAR_WEAPONINFO hChar pWeaponInfo | |
GET_WEAPONINFO_FIRE_TYPE pWeaponInfo (iFireType) | |
GET_WEAPONINFO_ANIMGROUP pWeaponInfo (iAnimGroup) | |
IF iFireType = WEAPONFIRE_PROJECTILE | |
AND iAnimGroup = 30 // ROCKET | |
RETURN_TRUE | |
CLEO_RETURN 0 () | |
ELSE | |
IF IS_CURRENT_CHAR_WEAPON hChar WEAPONTYPE_MINIGUN | |
RETURN_TRUE | |
CLEO_RETURN 0 () | |
ENDIF | |
ENDIF | |
ENDIF | |
ENDIF | |
RETURN_FALSE | |
CLEO_RETURN 0 () | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment