Skip to content

Instantly share code, notes, and snippets.

@JuniorDjjr
Last active March 12, 2024 11:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save JuniorDjjr/f7cbca7c92ffb9ac33cfb1b410ff0bc5 to your computer and use it in GitHub Desktop.
Save JuniorDjjr/f7cbca7c92ffb9ac33cfb1b410ff0bc5 to your computer and use it in GitHub Desktop.
// 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