Skip to content

Instantly share code, notes, and snippets.

@JuniorDjjr
Last active January 5, 2024 17:24
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save JuniorDjjr/aa4c54b811686bbbc7d90e84977cbd2a to your computer and use it in GitHub Desktop.
Save JuniorDjjr/aa4c54b811686bbbc7d90e84977cbd2a to your computer and use it in GitHub Desktop.
// by Junior_Djjr - MixMods.com.br
// You need: https://forum.mixmods.com.br/f141-gta3script-cleo/t5206-como-criar-scripts-com-cleoplus
SCRIPT_START
{
LVAR_INT scplayer i j pPlayer bUsingChainsawLastFrame bGotChainsawLastFrame pWeaponInfo iSlot iChainsawAmmo hObject iModel bFoundObjectLastFrame bFoundObjectNow bShowAmmoOnScreen
LVAR_FLOAT fChainsawAmmo x y z
GET_PLAYER_CHAR 0 (scplayer)
GET_PED_POINTER scplayer (pPlayer)
IF NOT READ_INT_FROM_INI_FILE "CLEO\Chainsaw Ammo Fuel.ini" "Settings" "ShowAmmoOnScreen" (bShowAmmoOnScreen)
bShowAmmoOnScreen = FALSE
ENDIF
WHILE TRUE
WAIT 0
IF HAS_CHAR_GOT_WEAPON scplayer WEAPONTYPE_CHAINSAW
IF bGotChainsawLastFrame = FALSE
bGotChainsawLastFrame = TRUE
GET_AMMO_IN_CHAR_WEAPON scplayer WEAPONTYPE_CHAINSAW (iChainsawAmmo)
IF iChainsawAmmo <= 1
fChainsawAmmo = 999.0
GOSUB UpdateChainsawAmmo
ELSE
fChainsawAmmo =# iChainsawAmmo
GOSUB UpdateChainsawAmmo
ENDIF
ENDIF
ELSE
IF bGotChainsawLastFrame = TRUE
bGotChainsawLastFrame = FALSE
iChainsawAmmo = 0
fChainsawAmmo = 0.0
ENDIF
ENDIF
IF IS_CURRENT_CHAR_WEAPON scplayer WEAPONTYPE_CHAINSAW
GET_AMMO_IN_CHAR_WEAPON scplayer WEAPONTYPE_CHAINSAW (iChainsawAmmo)
IF iChainsawAmmo > 999
OR iChainsawAmmo <= 0
fChainsawAmmo =# iChainsawAmmo
GOSUB UpdateChainsawAmmo
ENDIF
GOSUB ShowAmmoOnScreen
IF bUsingChainsawLastFrame = FALSE
bUsingChainsawLastFrame = TRUE
WRITE_MEMORY 0x5895EA 1 0 TRUE // "nSlot <= 0" to show melee ammo
ENDIF
IF IS_CHAR_FIGHTING scplayer
IF IS_CHAR_PLAYING_ANIM scplayer "CSAW_1"
OR IS_CHAR_PLAYING_ANIM scplayer "CSAW_2"
OR IS_CHAR_PLAYING_ANIM scplayer "CSAW_3"
OR IS_CHAR_PLAYING_ANIM scplayer "CSAW_G"
OR IS_CHAR_PLAYING_ANIM scplayer "csaw_part"
fChainsawAmmo -=@ 0.3
GOSUB UpdateChainsawAmmo
ENDIF
ELSE
GET_CHAR_MOVE_STATE scplayer (i)
IF i = MOVE_STATE_IDLE
GOSUB CheckGasNear
ELSE
bFoundObjectLastFrame = FALSE
ENDIF
ENDIF
ELSE
IF bUsingChainsawLastFrame = TRUE
bUsingChainsawLastFrame = FALSE
WRITE_MEMORY 0x5895EA 1 1 TRUE // "nSlot <= 1" to show melee ammo
ENDIF
ENDIF
ENDWHILE
ShowAmmoOnScreen:
IF bShowAmmoOnScreen = TRUE
SET_TEXT_EDGE 1 0 0 0 255
SET_TEXT_FONT FONT_SUBTITLES
SET_TEXT_WRAPX 640.0
SET_TEXT_RIGHT_JUSTIFY TRUE
GET_FIXED_XY_ASPECT_RATIO 0.35 1.1 (x y)
SET_TEXT_SCALE x y
DISPLAY_TEXT_WITH_NUMBER 630.0 300.0 CHAMFM3 iChainsawAmmo
USE_TEXT_COMMANDS 0
ENDIF
RETURN
CheckGasNear:
bFoundObjectNow = FALSE
GET_CHAR_COORDINATES scplayer x y z
i = 0
WHILE GET_ANY_OBJECT_NO_SAVE_RECURSIVE i (i hObject)
IF LOCATE_OBJECT_DISTANCE_TO_COORDINATES hObject x y z 2.0
GET_OBJECT_MODEL hObject (iModel)
IF iModel = 3465
OR iModel = 1686
OR iModel = 1676
OR iModel = 1244
OR iModel = 1650
bFoundObjectNow = TRUE
IF fChainsawAmmo < 999.0
AND IS_SCORE_GREATER 0 99
IF bFoundObjectLastFrame = FALSE
AND timera > 5000
IF NOT iModel = 1650 // petrolcanm, not gas station, just make infinite free fuel
PRINT_HELP CHAMFM1
ELSE
PRINT_HELP CHAMFM2
ENDIF
bFoundObjectLastFrame = TRUE
timera = 0
ENDIF
IF IS_BUTTON_JUST_PRESSED PAD1 4 //~k~~PED_ANSWER_PHONE~/ ~k~~PED_FIREWEAPON_ALT~
IF NOT iModel = 1650
CHANGE_PLAYER_MONEY 0 CHANGE_MONEY_REMOVE 100
ENDIF
fChainsawAmmo = 999.0
GOSUB UpdateChainsawAmmo
ENDIF
ENDIF
ENDIF
ENDIF
ENDWHILE
bFoundObjectLastFrame = bFoundObjectNow
RETURN
UpdateChainsawAmmo:
CLAMP_FLOAT fChainsawAmmo 0.0 999.0 (fChainsawAmmo)
iChainsawAmmo =# fChainsawAmmo
IF iChainsawAmmo <= 0
iChainsawAmmo = 0
REMOVE_WEAPON_FROM_CHAR scplayer WEAPONTYPE_CHAINSAW
RETURN
ENDIF
SET_CHAR_AMMO scplayer WEAPONTYPE_CHAINSAW iChainsawAmmo
//ADD_AMMO_TO_CHAR scplayer WEAPONTYPE_CHAINSAW iChainsawAmmo
/*GET_CURRENT_CHAR_WEAPONINFO scplayer pWeaponInfo
READ_STRUCT_OFFSET pWeaponInfo 0x14 4 (iSlot)
iSlot *= 0x1C // size of CWeapon
i = 0x5A0 + iSlot // start of CWeapon array
i += 0xC // m_nTotalAmmo
//READ_STRUCT_OFFSET pPlayer i 4 (j)
//PRINT_FORMATTED_NOW "%i" 1000 j
WRITE_STRUCT_OFFSET pPlayer i 4 100*/
RETURN
}
SCRIPT_END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment