Skip to content

Instantly share code, notes, and snippets.

@JuniorDjjr
Last active January 5, 2024 17:57
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/708ac9af223290505214f0d6e08690dc to your computer and use it in GitHub Desktop.
Save JuniorDjjr/708ac9af223290505214f0d6e08690dc to your computer and use it in GitHub Desktop.
// 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