Last active
January 5, 2024 17:48
-
-
Save JuniorDjjr/b8c2123032a21b99f8dccf583030d9d1 to your computer and use it in GitHub Desktop.
This file contains 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
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