Skip to content

Instantly share code, notes, and snippets.

@JuniorDjjr
Last active January 5, 2024 17:50
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/adfd288278c16afb55df313ad8db5a56 to your computer and use it in GitHub Desktop.
Save JuniorDjjr/adfd288278c16afb55df313ad8db5a56 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 playerId scplayer i iWeaponType iAmmo bButtonDisabled[2] bLastFirePressed[2] bAmmoLastFrame[2] pPed pWeapon iState bReloadModKeep iTotalAmmo hAudio bNoWeaponDropScript
LVAR_FLOAT fVolume
IF NOT READ_INT_FROM_INI_FILE "CLEO/Reload Mod.ini" "Settings" "KeepNoAmmo" (bReloadModKeep)
bReloadModKeep = FALSE
ENDIF
IF NOT LOAD_3D_AUDIO_STREAM "CLEO/KeepNoAmmo/keepnoammo_click.wav" (hAudio)
hAudio = -1
ENDIF
GET_SCRIPT_STRUCT_NAMED WEADROP i
IF i <= 0
bNoWeaponDropScript = TRUE
ENDIF
WAIT 500
bButtonDisabled[0] = TRUE
bButtonDisabled[1] = TRUE
WHILE TRUE
WAIT 0
playerId = 0
GOSUB Process
IF IS_2PLAYER_GAME_GOING_ON
playerId = 1
GOSUB Process
ENDIF
ENDWHILE
Process:
GET_PLAYER_CHAR playerId scplayer
IF NOT IS_CHAR_DEAD scplayer
AND IS_PLAYER_CONTROL_ON playerId
AND NOT IS_CHAR_IN_ANY_CAR scplayer
IF bNoWeaponDropScript = TRUE
IF IS_BUTTON_PRESSED playerId 4
AND IS_BUTTON_PRESSED playerId 10
IF GOSUB ValidDropTimer
GET_CURRENT_CHAR_WEAPON scplayer iWeaponType
REMOVE_WEAPON_FROM_CHAR scplayer iWeaponType
RETURN
ENDIF
ELSE
GOSUB ResetDropTimer
ENDIF
ENDIF
IF CLEO_CALL IsCharHoldingFireGun 0 (scplayer)
GET_PED_POINTER scplayer (pPed)
i = pPed + 0x718 //m_nActiveWeaponSlot
READ_MEMORY i 1 FALSE (i)
IF NOT i = 0
i *= 0x1C //sizeof CWeapon
i += pPed
pWeapon = i + 0x5A0 //CWeapon
IF bReloadModKeep = FALSE
iTotalAmmo = pWeapon + 0xC //m_nTotalAmmo
READ_MEMORY iTotalAmmo 4 FALSE (iTotalAmmo)
IF iTotalAmmo > 0
bAmmoLastFrame[playerId] = TRUE
GOTO Process_Return
ENDIF
ELSE
// Get reload state
iState = pWeapon + 0x4 //m_nState
READ_MEMORY iState 4 FALSE (iState)
IF iState = 2
GOTO Process_Return
ENDIF
ENDIF
iAmmo = pWeapon + 0x8 //m_nAmmoInClip
READ_MEMORY iAmmo 4 FALSE (iAmmo)
IF iAmmo = 0
IF CLEO_CALL IsCharHoldingReloadableGun 0 scplayer
ELSE
iTotalAmmo = pWeapon + 0xC //m_nTotalAmmo
READ_MEMORY iTotalAmmo 4 FALSE (iTotalAmmo)
IF iTotalAmmo > 0
GOTO Process_Return
ENDIF
ENDIF
IF bButtonDisabled[playerId] = FALSE
SET_PLAYER_FIRE_BUTTON playerId OFF
bButtonDisabled[playerId] = TRUE
ENDIF
IF GOSUB IsFiring
IF bAmmoLastFrame[playerId] = FALSE
IF bLastFirePressed[playerId] = FALSE
IF GOSUB IsAiming
IF hAudio >= 0
SET_PLAY_3D_AUDIO_STREAM_AT_CHAR hAudio scplayer
READ_MEMORY 0xB5FCCC 4 FALSE (fVolume)
fVolume *= 0.8
SET_AUDIO_STREAM_VOLUME hAudio fVolume
SET_AUDIO_STREAM_STATE hAudio 1
//PRINT_STRING_NOW "CLICK!" 100
ENDIF
ENDIF
ENDIF
ENDIF
bLastFirePressed[playerId] = TRUE
ELSE
bLastFirePressed[playerId] = FALSE
ENDIF
bAmmoLastFrame[playerId] = FALSE
RETURN // dont reenable button
ELSE
bAmmoLastFrame[playerId] = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
Process_Return:
GOSUB ResetDropTimer
GOSUB ResetButtonDisabled
RETURN
ValidDropTimer:
IF playerId = 0
IF timera > 1000
RETURN_TRUE
RETURN
ENDIF
ELSE
IF timerb > 1000
RETURN_TRUE
RETURN
ENDIF
ENDIF
RETURN_FALSE
RETURN
ResetDropTimer:
IF playerId = 0
timera = 0
ELSE
timerb = 0
ENDIF
RETURN
ResetButtonDisabled:
IF bButtonDisabled[playerId] = TRUE
SET_PLAYER_FIRE_BUTTON playerId ON
bButtonDisabled[playerId] = FALSE
ENDIF
RETURN
IsFiring:
IF IS_BUTTON_PRESSED playerId 17
RETURN_TRUE
RETURN
ENDIF
GET_CONTROLLER_MODE i
IF i = 1
IS_BUTTON_PRESSED playerId 7
RETURN
ELSE
IS_BUTTON_PRESSED playerId 4
RETURN
ENDIF
LVAR_INT camMode
CONST_INT MODE_NONE 0
CONST_INT MODE_TOPDOWN 1
CONST_INT MODE_GTACLASSIC 2
CONST_INT MODE_BEHINDCAR 3
CONST_INT MODE_FOLLOWPED 4
CONST_INT MODE_AIMING 5
CONST_INT MODE_DEBUG 6
CONST_INT MODE_SNIPER 7
CONST_INT MODE_ROCKETLAUNCHER 8
CONST_INT MODE_MODELVIEW 9
CONST_INT MODE_BILL 10
CONST_INT MODE_SYPHON 11
CONST_INT MODE_CIRCLE 12
CONST_INT MODE_CHEESYZOOM 13
CONST_INT MODE_WHEELCAM 14
CONST_INT MODE_FIXED 15
CONST_INT MODE_1STPERSON 16
CONST_INT MODE_FLYBY 17
CONST_INT MODE_CAM_ON_A_STRING 18
CONST_INT MODE_REACTION 19
CONST_INT MODE_FOLLOW_PED_WITH_BIND 20
CONST_INT MODE_CHRIS 21
CONST_INT MODE_BEHINDBOAT 22
CONST_INT MODE_PLAYER_FALLEN_WATER 23
CONST_INT MODE_CAM_ON_TRAIN_ROOF 24
CONST_INT MODE_CAM_RUNNING_SIDE_TRAIN 25
CONST_INT MODE_BLOOD_ON_THE_TRACKS 26
CONST_INT MODE_IM_THE_PASSENGER_WOOWOO 27
CONST_INT MODE_SYPHON_CRIM_IN_FRONT 28
CONST_INT MODE_PED_DEAD_BABY 29
CONST_INT MODE_PILLOWS_PAPS 30
CONST_INT MODE_LOOK_AT_CARS 31
CONST_INT MODE_ARRESTCAM_ONE 32
CONST_INT MODE_ARRESTCAM_TWO 33
CONST_INT MODE_M16_1STPERSON 34
CONST_INT MODE_SPECIAL_FIXED_FOR_SYPHON 35
CONST_INT MODE_FIGHT_CAM 36
CONST_INT MODE_TOP_DOWN_PED 37
CONST_INT MODE_LIGHTHOUSE 38
CONST_INT MODE_SNIPER_RUNABOUT 39
CONST_INT MODE_ROCKETLAUNCHER_RUNABOUT 40
CONST_INT MODE_1STPERSON_RUNABOUT 41
CONST_INT MODE_M16_1STPERSON_RUNABOUT 42
CONST_INT MODE_FIGHT_CAM_RUNABOUT 43
CONST_INT MODE_EDITOR 44
CONST_INT MODE_HELICANNON_1STPERSON 45
CONST_INT MODE_CAMERA 46
CONST_INT MODE_ATTACHCAM 47
CONST_INT MODE_TWOPLAYER 48
CONST_INT MODE_TWOPLAYER_IN_CAR_AND_SHOOTING 49
CONST_INT MODE_TWOPLAYER_SEPARATE_CARS 50
CONST_INT MODE_ROCKETLAUNCHER_HS 51
CONST_INT MODE_ROCKETLAUNCHER_RUNABOUT_HS 52
CONST_INT MODE_AIMWEAPON 53
CONST_INT MODE_TWOPLAYER_SEPARATE_CARS_TOPDOWN 54
CONST_INT MODE_AIMWEAPON_FROMCAR 55
CONST_INT MODE_DW_HELI_CHASE 56
CONST_INT MODE_DW_CAM_MAN 57
CONST_INT MODE_DW_BIRDY 58
CONST_INT MODE_DW_PLANE_SPOTTER 59
CONST_INT MODE_DW_DOG_FIGHT 60
CONST_INT MODE_DW_FISH 61
CONST_INT MODE_DW_PLANECAM1 62
CONST_INT MODE_DW_PLANECAM2 63
CONST_INT MODE_DW_PLANECAM3 64
CONST_INT MODE_AIMWEAPON_ATTACHED 65
IsAiming:
IF IS_2PLAYER_GAME_GOING_ON
IF GOSUB IsAimingByButton
RETURN_TRUE
ENDIF
ENDIF
READ_MEMORY 0x00B6F1A8 2 FALSE (camMode)
IF camMode = MODE_AIMING
OR camMode = MODE_SNIPER
OR camMode = MODE_ROCKETLAUNCHER
OR camMode = MODE_CAMERA
OR camMode = MODE_ROCKETLAUNCHER_HS
OR camMode = MODE_AIMWEAPON
OR camMode = MODE_AIMWEAPON_ATTACHED
RETURN_TRUE
RETURN
ENDIF
RETURN_FALSE
RETURN
// Preferable for 2 players
IsAimingByButton:
GET_CONTROLLER_MODE i
IF i = 1
IS_BUTTON_PRESSED playerId 5
RETURN
ELSE
IS_BUTTON_PRESSED playerId 6
RETURN
ENDIF
}
SCRIPT_END
{
/*
Return true if char is holding any fire weapon - By Junior_Djjr
Use: IF CLEO_CALL IsCharHoldingFireGun 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
IsCharHoldingFireGun:
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
RETURN_TRUE
ELSE
RETURN_FALSE
ENDIF
CLEO_RETURN 0 ()
}
{
/*
Return true if char is holding any reloadable gun - By Junior_Djjr
Use: IF CLEO_CALL IsCharHoldingReloadableGun 0 (hChar)()
*/
LVAR_INT hChar // In
LVAR_INT iWeaponType pWeaponInfo iFlags
IsCharHoldingReloadableGun:
GET_CURRENT_CHAR_WEAPON hChar (iWeaponType)
// GetWeaponInfo (we can ignore skill (1) here)
CALL_FUNCTION_RETURN 0x743C60 2 2 (1 iWeaponType)(pWeaponInfo)
pWeaponInfo += 0x18
READ_MEMORY pWeaponInfo 4 FALSE (iFlags)
IF IS_LOCAL_VAR_BIT_SET_CONST iFlags 12
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