Last active
March 12, 2024 11:31
-
-
Save JuniorDjjr/f7cbca7c92ffb9ac33cfb1b410ff0bc5 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
// by Junior_Djjr - MixMods.com.br | |
// You need: https://forum.mixmods.com.br/f16-utilidades/t179-gta3script-while-true-return_true-e-return_false | |
SCRIPT_START | |
{ | |
LVAR_INT scplayer playerId pPed i j iCmds[2] pLib bDontReloadIfFull bDisabledOnSAMP iCurWeapon iSkill iMaxAmmo iCurAmmo pWeapon pWeaponInfo iTimeInMilliseconds iReloadTime iLastCurAmmo bKeepNoAmmo iTotalAmmo | |
IF NOT READ_INT_FROM_INI_FILE "CLEO/Reload Mod.ini" "Settings" "CMD_Player1" (iCmds[0]) | |
OR NOT READ_INT_FROM_INI_FILE "CLEO/Reload Mod.ini" "Settings" "CMD_Player2" (iCmds[1]) | |
OR NOT READ_INT_FROM_INI_FILE "CLEO/Reload Mod.ini" "Settings" "DontReloadIfFull" (bDontReloadIfFull) | |
OR NOT READ_INT_FROM_INI_FILE "CLEO/Reload Mod.ini" "Settings" "DisabledOnSAMP" (bDisabledOnSAMP) | |
OR NOT READ_INT_FROM_INI_FILE "CLEO/Reload Mod.ini" "Settings" "KeepNoAmmo" (bKeepNoAmmo) | |
timera = 0 | |
WHILE timera < 3000 | |
WAIT 0 | |
PRINT_STRING_NOW "Error: Fail to read 'Reload Mod.ini'" 1000 | |
ENDWHILE | |
TERMINATE_THIS_CUSTOM_SCRIPT | |
ENDIF | |
IF bDisabledOnSAMP = TRUE | |
LOAD_DYNAMIC_LIBRARY "kernel32" (pLib) | |
GET_DYNAMIC_LIBRARY_PROCEDURE "GetModuleHandleA" pLib (i) | |
CALL_FUNCTION_RETURN i 1 0 ("SAMP.dll")(i) | |
FREE_DYNAMIC_LIBRARY pLib | |
IF i > 0 | |
TERMINATE_THIS_CUSTOM_SCRIPT | |
ENDIF | |
ENDIF | |
IF bKeepNoAmmo = TRUE | |
IF LOAD_DYNAMIC_LIBRARY "KeepNoAmmo.SA.asi" (i) | |
IF GET_DYNAMIC_LIBRARY_PROCEDURE "PatchNoReload" i (j) | |
CALL_FUNCTION j 0 0 | |
ENDIF | |
FREE_DYNAMIC_LIBRARY i | |
ENDIF | |
ENDIF | |
///////////////////////////////////////////// | |
WHILE TRUE | |
WAIT 0 | |
playerId = 0 | |
GOSUB Activate | |
IF IS_2PLAYER_GAME_GOING_ON | |
playerId = 1 | |
GOSUB Activate | |
ENDIF | |
ENDWHILE | |
Activate: | |
IF IS_PLAYER_CONTROL_ON playerId | |
IF GOSUB IsPressingCMD | |
GET_PLAYER_CHAR playerId (scplayer) | |
GET_PED_POINTER scplayer (pPed) | |
i = pPed + 0x718 //m_nActiveWeaponSlot | |
READ_MEMORY i 1 FALSE (i) | |
IF NOT i = 0 | |
AND NOT IS_CHAR_DEAD scplayer | |
i *= 0x1C //sizeof CWeapon | |
i += pPed | |
pWeapon = i + 0x5A0 //CWeapon | |
GET_CURRENT_CHAR_WEAPON scplayer (iCurWeapon) | |
//char __thiscall CPed::GetWeaponSkill(CPed *this, eWeaponType weaponType) | |
CALL_METHOD_RETURN 0x5E3B60 pPed 1 0 (iCurWeapon)(iSkill) | |
//CWeaponInfo *__cdecl CWeaponInfo::GetWeaponInfo(eWeaponType weaponID, char skill) | |
CALL_FUNCTION_RETURN 0x743C60 2 2 (iSkill iCurWeapon)(pWeaponInfo) | |
iMaxAmmo = pWeaponInfo + 0x20 //ammoClip | |
READ_MEMORY iMaxAmmo 2 FALSE (iMaxAmmo) | |
IF iMaxAmmo > 1 // only activate on weapons with clips | |
iCurAmmo = pWeapon + 0x8 //m_nAmmoInClip | |
READ_MEMORY iCurAmmo 4 FALSE (iCurAmmo) | |
IF bDontReloadIfFull = TRUE | |
IF iCurAmmo = iMaxAmmo | |
RETURN | |
ENDIF | |
ENDIF | |
iCurAmmo = pWeapon + 0xC //m_nTotalAmmo | |
READ_MEMORY iCurAmmo 4 FALSE (iTotalAmmo) | |
IF iTotalAmmo <= 0 | |
RETURN | |
ENDIF | |
//signed int __thiscall CWeaponInfo::GetWeaponReloadTime(CWeaponInfo *this) | |
CALL_METHOD_RETURN 0x743D70 pWeaponInfo 0 0 ()(iReloadTime) | |
// Fast reload tweak | |
j = playerId * 0x190 //sizeof CPlayerInfo | |
j += 0xB7CB84 | |
READ_MEMORY j 1 FALSE (j) //CWorld::Players[playerId].fastReload | |
IF j = TRUE | |
iReloadTime /= 4 | |
ENDIF | |
// Set shot timer limit | |
READ_MEMORY 0xB7CB84 4 FALSE (iTimeInMilliseconds) | |
j = iReloadTime + iTimeInMilliseconds | |
i = pWeapon + 0x10 //m_nShotTimer | |
WRITE_MEMORY i 4 (j) FALSE | |
// Set reload state | |
i = pWeapon + 0x4 //m_nState | |
WRITE_MEMORY i 4 (2) FALSE | |
// Wait reload end | |
timera = 0 | |
i = pWeapon + 0x8 //m_nAmmoInClip | |
READ_MEMORY i 4 FALSE (iLastCurAmmo) | |
WHILE iLastCurAmmo = iCurAmmo | |
AND timera < 3000 // anti-bug | |
WAIT 0 | |
READ_MEMORY i 4 FALSE (iLastCurAmmo) | |
ENDWHILE | |
ENDIF | |
ENDIF | |
ENDIF | |
ENDIF | |
RETURN | |
IsPressingCMD: | |
i = iCmds[playerId] | |
IF i <= 19 | |
IF IS_BUTTON_PRESSED playerId i | |
RETURN_TRUE | |
RETURN | |
ENDIF | |
ELSE | |
IF IS_KEY_PRESSED i | |
RETURN_TRUE | |
RETURN | |
ENDIF | |
ENDIF | |
RETURN_FALSE | |
RETURN | |
} | |
SCRIPT_END |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment