Skip to content

Instantly share code, notes, and snippets.

@JuniorDjjr
Last active January 5, 2024 17:48
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/b8c2123032a21b99f8dccf583030d9d1 to your computer and use it in GitHub Desktop.
Save JuniorDjjr/b8c2123032a21b99f8dccf583030d9d1 to your computer and use it in GitHub Desktop.
SCRIPT_START
{
LVAR_INT hExternalCharCop scplayer hChar pChar hCharCop p i iPedType hDamageChar hClosestCop
LVAR_INT searchCharsI searchCharsP searchCopI searchCopP hSequenceTask bCharHoldingDangerousWeapon
LVAR_FLOAT x y z char_x char_y char_z cop_x cop_y cop_z f fClosestCopDistance fMinCopDistance
IF hExternalCharCop > 0
GOSUB ProcessCopKilling
TERMINATE_THIS_CUSTOM_SCRIPT
ENDIF
GET_PLAYER_CHAR 0 scplayer
WHILE TRUE
WAIT 0
IF NOT IS_WANTED_LEVEL_GREATER 0 0
READ_MEMORY 0xB74490 4 0 (searchCharsP)
searchCharsP += 0x04
READ_MEMORY searchCharsP 4 0 (searchCharsP)
searchCharsI = 0
WHILE searchCharsI <= 27904
READ_MEMORY searchCharsP 1 0 (hChar)
searchCharsP++
IF hChar >= 0x00
AND hChar < 0x80
hChar += searchCharsI
GOSUB ProcessChar
ENDIF
searchCharsI += 256
ENDWHILE
ENDIF
ENDWHILE
ProcessChar:
GET_CHAR_HIGHEST_PRIORITY_EVENT hChar i
IF i = 9 //EVENT_DAMAGE
GET_PED_TYPE hChar i
IF NOT i = 6
//PRINT_STRING_NOW "DAMAGED" 1000
GET_CHAR_HEALTH hChar i
IF i > 0
GET_PED_POINTER hChar pChar
p = pChar + 0x764 //m_pLastEntityDamaged
READ_MEMORY p 4 FALSE (p)
IF p > 0
p += 0x36 //unsigned char m_nType : 3;
READ_MEMORY p 1 FALSE (i)
BIT_AND i 7 (i)
IF i = 3 //ENTITY_TYPE_PED
GET_PED_REF p (hDamageChar)
IF hDamageChar > 0
IF NOT hDamageChar = scplayer
GET_CHAR_HEALTH hDamageChar i
IF i > 0
GET_PED_TYPE hDamageChar i
IF NOT i = 6
AND i >= 4
/*IF GET_EXTENDED_CHAR_VAR hChar AUTO 1 (i)
IF i = hDamageChar
RETURN
ENDIF
ELSE
INIT_EXTENDED_CHAR_VARS hChar AUTO 1
SET_EXTENDED_CHAR_VAR hChar AUTO 1 hDamageChar
ENDIF*/
bCharHoldingDangerousWeapon = FALSE
IF CLEO_CALL IsCharHoldingDangerousWeapon 0 (hDamageChar)
bCharHoldingDangerousWeapon = TRUE
ENDIF
IF GOSUB CopNearChar
GET_SCRIPT_TASK_STATUS hCharCop 0x5E2 i //TASK_KILL_CHAR_ON_FOOT
IF i = 7
IF bCharHoldingDangerousWeapon = TRUE
REQUEST_MODEL COLT45
LOAD_ALL_MODELS_NOW
GIVE_WEAPON_TO_CHAR hCharCop WEAPONTYPE_PISTOL 100
MARK_MODEL_AS_NO_LONGER_NEEDED COLT45
ELSE
REQUEST_MODEL NITESTICK
LOAD_ALL_MODELS_NOW
GIVE_WEAPON_TO_CHAR hCharCop WEAPONTYPE_NIGHTSTICK 1
MARK_MODEL_AS_NO_LONGER_NEEDED NITESTICK
ENDIF
TASK_KILL_CHAR_ON_FOOT hCharCop hDamageChar
STREAM_CUSTOM_SCRIPT "Fair Police (Junior_Djjr).cs" hCharCop
//PRINT_STRING_NOW "IH SERJAO, SUJOU" 100
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
RETURN
CopNearChar:
hClosestCop = -1
fClosestCopDistance = 9999.9
IF bCharHoldingDangerousWeapon = TRUE
fMinCopDistance = 200.0
ELSE
fMinCopDistance = 50.0
ENDIF
GET_CHAR_COORDINATES hDamageChar char_x char_y char_z
READ_MEMORY 0xB74490 4 0 (searchCopP)
searchCopP += 0x04
READ_MEMORY searchCopP 4 0 (searchCopP)
searchCopI = 0
WHILE searchCopI <= 27904
READ_MEMORY searchCopP 1 0 (hCharCop)
searchCopP++
IF hCharCop >= 0x00
AND hCharCop < 0x80
hCharCop += searchCopI
GET_PED_TYPE hCharCop iPedType
IF iPedType = 6
GET_CHAR_HEALTH hCharCop i
IF i > 0
GET_CHAR_COORDINATES hCharCop cop_x cop_y cop_z
GET_DISTANCE_BETWEEN_COORDS_3D cop_x cop_y cop_z, char_x char_y char_z (f)
IF f < fMinCopDistance
OR HAS_CHAR_SPOTTED_CHAR_IN_FRONT hCharCop hDamageChar
IF f < fClosestCopDistance
fClosestCopDistance = f
hClosestCop = hCharCop
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
searchCopI += 256
ENDWHILE
IF hClosestCop > -1
hCharCop = hClosestCop
RETURN_TRUE
RETURN
ENDIF
RETURN_FALSE
RETURN
ProcessCopKilling:
WHILE TRUE
WAIT 0
IF NOT DOES_CHAR_EXIST hExternalCharCop
BREAK
ENDIF
GET_CHAR_HEALTH hExternalCharCop i
IF NOT i > 0
BREAK
ENDIF
GET_SCRIPT_TASK_STATUS hExternalCharCop 0x5E2 i //TASK_KILL_CHAR_ON_FOOT
IF i = 7
CLEAR_CHAR_TASKS_IMMEDIATELY hExternalCharCop
BREAK
ENDIF
ENDWHILE
RETURN
}
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
CONST_INT WEAPON_FIRE_MELEE 0
CONST_INT WEAPON_FIRE_INSTANT_HIT 1
CONST_INT WEAPON_FIRE_PROJECTILE 2
CONST_INT WEAPON_FIRE_AREA_EFFECT 3
CONST_INT WEAPON_FIRE_CAMERA 4
CONST_INT WEAPON_FIRE_USE 5
IsCharHoldingDangerousWeapon:
GET_CURRENT_CHAR_WEAPON hChar (iWeaponType)
// GetWeaponInfo (we can ignore skill (1) here)
CALL_FUNCTION_RETURN 0x743C60 2 2 (1 iWeaponType)(pWeaponInfo)
READ_MEMORY pWeaponInfo 4 FALSE (iFireType)
IF iFireType = WEAPON_FIRE_INSTANT_HIT
OR iFireType = WEAPON_FIRE_PROJECTILE
RETURN_TRUE
ELSE
RETURN_FALSE
ENDIF
CLEO_RETURN 0 ()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment