Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@JuniorDjjr
Last active January 5, 2024 17:26
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/93457d0647a7ca01393838be130ddc65 to your computer and use it in GitHub Desktop.
Save JuniorDjjr/93457d0647a7ca01393838be130ddc65 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 iModelIgTrolley iModelIgTrolleyLid hIgTrolley hIgTrolleyLid hMenu iWeaponList bEmmetAvailable i j iSelected iLastSelected iMaxAmmo iClipAmmo iWeaponType pWeaponInfo hChar iProgress bShowingHelp iAmmoMult
LVAR_FLOAT fOpenProgress fOpenEased fLidAngle f
WAIT 0
WAIT 0
GET_PLAYER_CHAR 0 (scplayer)
IF NOT GET_MODEL_BY_NAME "igtrolley" (iModelIgTrolley)
PRINT_STRING_NOW "Emmet But Useful: ~r~Model 'igtrolley' isn't installed." 5000
TERMINATE_THIS_CUSTOM_SCRIPT
ENDIF
IF NOT GET_MODEL_BY_NAME "igtrolley_lid" (iModelIgTrolleyLid)
PRINT_STRING_NOW "Emmet But Useful: ~r~Model 'igtrolley_lid' isn't installed." 5000
TERMINATE_THIS_CUSTOM_SCRIPT
ENDIF
//REQUEST_MODEL iModelIgTrolley
//REQUEST_MODEL iModelIgTrolleyLid
//LOAD_ALL_MODELS_NOW
//SET_CHAR_COORDINATES scplayer 2442.9462 -1966.2584 13.2
WHILE TRUE
WAIT 0
IF LOCATE_CHAR_DISTANCE_TO_COORDINATES scplayer 2440.2 -1966.0 13.1 100.0
AND NOT IS_ON_CUTSCENE
GOSUB CreateObjectIfNeeded
IF bEmmetAvailable = TRUE
IF NOT IS_CHAR_IN_ANY_CAR scplayer
IF LOCATE_CHAR_DISTANCE_TO_COORDINATES scplayer 2440.2 -1966.0 13.1 1.7
AND NOT IS_CHAR_DEAD scplayer
AND IS_PLAYER_CONTROL_ON 0
AND NOT IS_CHAR_ENTERING_ANY_CAR scplayer
SET_PLAYER_ENTER_CAR_BUTTON 0 OFF
PRINT_HELP_FOREVER EMBTU01
bShowingHelp = TRUE
IF IS_BUTTON_JUST_PRESSED PAD1 15
IF GOSUB IsOkToOpen
GOSUB Start
ELSE
PRINT_NOW EMBTU05 4000 1
ENDIF
ENDIF
ELSE
IF bShowingHelp = TRUE
SET_PLAYER_ENTER_CAR_BUTTON 0 ON
CLEAR_HELP
bShowingHelp = FALSE
ENDIF
ENDIF
ENDIF
ELSE
GOSUB CheckEmmetAvailable
ENDIF
ELSE
GOSUB DeleteObjectIfNeeded
ENDIF
ENDWHILE
DeleteObjectIfNeeded:
IF NOT hIgTrolley = 0
AND DOES_OBJECT_EXIST hIgTrolley
DELETE_OBJECT hIgTrolley
hIgTrolley = 0
ENDIF
IF NOT hIgTrolleyLid = 0
AND DOES_OBJECT_EXIST hIgTrolleyLid
DELETE_OBJECT hIgTrolleyLid
hIgTrolleyLid = 0
ENDIF
RETURN
CreateObjectIfNeeded:
IF NOT DOES_OBJECT_EXIST hIgTrolley
CREATE_OBJECT_NO_SAVE iModelIgTrolley 2440.2 -1966.0 13.1 FALSE FALSE (hIgTrolley)
SET_OBJECT_HEADING hIgTrolley 90.0
ENDIF
IF NOT DOES_OBJECT_EXIST hIgTrolleyLid
CREATE_OBJECT_NO_SAVE iModelIgTrolleyLid 0.0 0.0 0.0 FALSE FALSE (hIgTrolleyLid)
GOSUB AttachLid
ENDIF
RETURN
IsOkToOpen:
IF IS_WANTED_LEVEL_GREATER 0 1
RETURN_FALSE
RETURN
ENDIF
iProgress = 0
WHILE GET_ANY_CHAR_NO_SAVE_RECURSIVE iProgress (iProgress hChar)
IF NOT hChar = scplayer
AND NOT IS_CHAR_DEAD hChar
IF HAS_CHAR_SPOTTED_CHAR_IN_FRONT hChar scplayer
GET_CHAR_STAT_ID scplayer i
IF i = PEDSTAT_GANG2 //families
ELSE
GET_PED_TYPE hChar i
IF i <= 1 //is player
ELSE
GET_PLAYER_GROUP 0 i
IF IS_GROUP_MEMBER hChar i
ELSE
RETURN_FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDWHILE
RETURN_TRUE
RETURN
CheckEmmetAvailable:
CLEO_CALL ReadGlobalVar 0 (452)(i) //Sweet_Total_Passed_Missions
//PRINT_FORMATTED_NOW "sweet %i" 5000 i
IF i > 20 // something is wrong, may not be original storyline
GOSUB DeleteObjectIfNeeded
TERMINATE_THIS_CUSTOM_SCRIPT
ENDIF
IF i >= 4
bEmmetAvailable = TRUE
CLEO_CALL ReadGlobalVar 0 (32)(i) //Pickup_Emmets_Colt45
IF DOES_PICKUP_EXIST i
REMOVE_PICKUP i
ENDIF
ENDIF
RETURN
Start:
CLEAR_HELP
CLEAR_PRINTS
REQUEST_ANIMATION EMBTU
LOAD_ALL_MODELS_NOW
SET_PLAYER_CONTROL_PAD PAD1 OFF
SET_CURRENT_CHAR_WEAPON scplayer WEAPONTYPE_UNARMED
CLEO_CALL SlideCharTo 0 (scplayer 2441.002 -1965.9785 13.5469 90.0 0.05)()
IF NOT IS_CHAR_DEAD scplayer
TASK_LOOK_AT_OBJECT scplayer hIgTrolley 9999999
TASK_PLAY_ANIM scplayer "EMBTU_open" "EMBTU" 2.0 FALSE FALSE FALSE FALSE -1
fOpenProgress = 0.0
WHILE fOpenProgress < 0.5
WAIT 0
IF IS_CHAR_DEAD scplayer
BREAK
ENDIF
GOSUB SetAnimProgress
fOpenProgress += 0.02
ENDWHILE
IF NOT IS_CHAR_DEAD scplayer
GOSUB MenuLoop
IF NOT IS_CHAR_DEAD scplayer
AND IS_PLAYER_PLAYING 0
WHILE fOpenProgress < 1.0
WAIT 0
IF IS_CHAR_DEAD scplayer
BREAK
ENDIF
GOSUB SetAnimProgress
fOpenProgress += 0.02
ENDWHILE
fOpenProgress = 1.0
GOSUB SetAnimProgress
ENDIF
ENDIF
ENDIF
IF NOT IS_CHAR_DEAD scplayer
CLEAR_CHAR_SECONDARY_TASKS scplayer
ENDIF
SET_PLAYER_CONTROL_PAD PAD1 ON
REMOVE_ANIMATION EMBTU
CLEAR_PRINTS
RETURN
MenuLoop:
CLEO_CALL ReadGlobalVar 0 (452)(i) //Sweet_Total_Passed_Missions
//PRINT_FORMATTED_NOW "sweet %i" 5000 i
IF i >= 9
iWeaponList = 4
ELSE
CLEO_CALL ReadGlobalVar 0 (453)(iWeaponList) //Ryder_Total_Passed_Missions
//PRINT_FORMATTED_NOW "ryder %i" 5000 iWeaponList
CLAMP_INT iWeaponList 0 3 (iWeaponList)
ENDIF
iLastSelected = -1
//PRINT_FORMATTED_NOW "%i" 1000 iWeaponList
//08D4=9,create_menu %1g% position %2d% %3d% width %4d% columns %5h% interactive %6h% background %7h% alignment %8h% store_to %9d%
CREATE_MENU EMBTU02 (20.0 150.0) (125.0) 1 (ON ON 1) (hMenu)
//08DB=15,set_menu_column %1d% col %2h% title_to %3g% items_to %4g% %5g% %6g% %7g% %8g% %9g% %10g% %11g% %12g% %13g% %14g% %15g%
SWITCH iWeaponList
CASE 2
SET_MENU_COLUMN hMenu 0 EMBTU03 (WEAP5 WEAP22 WEAP32 DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY) //Weapon
BREAK
CASE 3
SET_MENU_COLUMN hMenu 0 EMBTU03 (WEAP5 WEAP22 WEAP32 WEAP29 DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY) //Weapon
BREAK
CASE 4
SET_MENU_COLUMN hMenu 0 EMBTU03 (WEAP5 WEAP22 WEAP32 WEAP29 WEAP30 DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY) //Weapon
BREAK
DEFAULT
SET_MENU_COLUMN hMenu 0 EMBTU03 (WEAP5 WEAP22 DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY) //Weapon
BREAK
ENDSWITCH
WHILE TRUE
WAIT 0
IF IS_CHAR_DEAD scplayer
OR NOT IS_PLAYER_PLAYING 0
OR NOT LOCATE_CHAR_DISTANCE_TO_COORDINATES scplayer 2440.2 -1966.0 13.1 2.0
OR IS_BUTTON_JUST_PRESSED PAD1 TRIANGLE
BREAK
ENDIF
GET_MENU_ITEM_SELECTED hMenu (iSelected)
IF NOT iLastSelected = iSelected
CLEAR_THIS_PRINT EMBTU04
CLEAR_THIS_PRINT EMBTU06
iLastSelected = iSelected
ENDIF
GOSUB ShowWeaponWillReplace
IF IS_SELECT_MENU_JUST_PRESSED
GOSUB GiveWeapon
ENDIF
GOSUB SetAnimProgress
ENDWHILE
DELETE_MENU hMenu
RETURN
ShowWeaponWillReplace:
SWITCH iSelected
CASE 0
j = WEAPONTYPE_BASEBALLBAT
BREAK
CASE 1
j = WEAPONTYPE_PISTOL
BREAK
CASE 2
j = WEAPONTYPE_TEC9
BREAK
CASE 3
j = WEAPONTYPE_MP5
BREAK
CASE 4
j = WEAPONTYPE_AK47
BREAK
ENDSWITCH
GET_WEAPONINFO j 1 pWeaponInfo
GET_WEAPONINFO_SLOT pWeaponInfo (i)
i += 1
GET_CHAR_WEAPON_IN_SLOT scplayer i iWeaponType i i
IF NOT iWeaponType = j
AND NOT iWeaponType = 0
AND NOT j = 0
PRINT EMBTU06 100 1
ENDIF
RETURN
GiveWeapon:
iAmmoMult = iWeaponList
CLAMP_INT iAmmoMult 1 3 (iAmmoMult)
SWITCH iSelected
CASE 0
REQUEST_MODEL BAT
LOAD_ALL_MODELS_NOW
GIVE_WEAPON_TO_CHAR scplayer WEAPONTYPE_BASEBALLBAT 1
BREAK
CASE 1
GET_AMMO_IN_CHAR_WEAPON scplayer WEAPONTYPE_PISTOL (i)
GET_WEAPONINFO WEAPONTYPE_PISTOL 1 pWeaponInfo
GET_WEAPONINFO_TOTAL_CLIP pWeaponInfo iClipAmmo
iMaxAmmo = iClipAmmo * iAmmoMult
IF i >= iMaxAmmo
PRINT_NOW EMBTU04 5000 1
BREAK
ENDIF
CLEAR_THIS_PRINT EMBTU04
REQUEST_MODEL COLT45
LOAD_ALL_MODELS_NOW
REMOVE_WEAPON_FROM_CHAR scplayer WEAPONTYPE_PISTOL
GIVE_WEAPON_TO_CHAR scplayer WEAPONTYPE_PISTOL iMaxAmmo
MARK_MODEL_AS_NO_LONGER_NEEDED COLT45
BREAK
CASE 2
GET_AMMO_IN_CHAR_WEAPON scplayer WEAPONTYPE_TEC9 (i)
GET_WEAPONINFO WEAPONTYPE_TEC9 1 pWeaponInfo
GET_WEAPONINFO_TOTAL_CLIP pWeaponInfo iClipAmmo
iMaxAmmo = iClipAmmo * iAmmoMult
IF i >= iMaxAmmo
PRINT_NOW EMBTU04 5000 1
BREAK
ENDIF
CLEAR_THIS_PRINT EMBTU04
REQUEST_MODEL TEC9
LOAD_ALL_MODELS_NOW
GET_WEAPONINFO_SLOT pWeaponInfo (i)
i += 1
GET_CHAR_WEAPON_IN_SLOT scplayer i iWeaponType i i
REMOVE_WEAPON_FROM_CHAR scplayer iWeaponType
GIVE_WEAPON_TO_CHAR scplayer WEAPONTYPE_TEC9 iMaxAmmo
MARK_MODEL_AS_NO_LONGER_NEEDED TEC9
BREAK
CASE 3
GET_AMMO_IN_CHAR_WEAPON scplayer WEAPONTYPE_MP5 (i)
GET_WEAPONINFO WEAPONTYPE_MP5 1 pWeaponInfo
GET_WEAPONINFO_TOTAL_CLIP pWeaponInfo iClipAmmo
iMaxAmmo = iClipAmmo * iAmmoMult
IF i >= iMaxAmmo
PRINT_NOW EMBTU04 5000 1
BREAK
ENDIF
CLEAR_THIS_PRINT EMBTU04
REQUEST_MODEL MP5LNG
LOAD_ALL_MODELS_NOW
GET_WEAPONINFO_SLOT pWeaponInfo (i)
i += 1
GET_CHAR_WEAPON_IN_SLOT scplayer i iWeaponType i i
REMOVE_WEAPON_FROM_CHAR scplayer iWeaponType
GIVE_WEAPON_TO_CHAR scplayer WEAPONTYPE_MP5 iMaxAmmo
MARK_MODEL_AS_NO_LONGER_NEEDED MP5LNG
BREAK
CASE 4
GET_AMMO_IN_CHAR_WEAPON scplayer WEAPONTYPE_AK47 (i)
GET_WEAPONINFO WEAPONTYPE_AK47 1 pWeaponInfo
GET_WEAPONINFO_TOTAL_CLIP pWeaponInfo iClipAmmo
iMaxAmmo = iClipAmmo * iAmmoMult
IF i >= iMaxAmmo
PRINT_NOW EMBTU04 5000 1
BREAK
ENDIF
CLEAR_THIS_PRINT EMBTU04
REQUEST_MODEL AK47
LOAD_ALL_MODELS_NOW
REMOVE_WEAPON_FROM_CHAR scplayer WEAPONTYPE_AK47
GIVE_WEAPON_TO_CHAR scplayer WEAPONTYPE_AK47 iMaxAmmo
MARK_MODEL_AS_NO_LONGER_NEEDED AK47
BREAK
ENDSWITCH
SET_CURRENT_CHAR_WEAPON scplayer WEAPONTYPE_UNARMED
RETURN
SetAnimProgress:
EASE fOpenProgress EASE_MODE_CUBIC EASE_WAY_INOUT (fOpenEased)
SET_CHAR_ANIM_PLAYING_FLAG scplayer "EMBTU_open" ON
SET_CHAR_ANIM_CURRENT_TIME scplayer "EMBTU_open" fOpenEased
IF fOpenEased > 0.5
f = fOpenEased - 0.5
f *= 2.0
fOpenEased -= f
ENDIF
fLidAngle = fOpenEased * -80.0
GOSUB AttachLid
RETURN
AttachLid:
ATTACH_OBJECT_TO_OBJECT hIgTrolleyLid hIgTrolley 0.0 0.5 0.479 fLidAngle 0.0 0.0
RETURN
}
SCRIPT_END
{
LVAR_INT var //In
LVAR_INT value scriptSpace finalOffset
ReadGlobalVar:
READ_MEMORY 0x00468D5E 4 1 (scriptSpace)
finalOffset = var * 4
finalOffset += scriptSpace
READ_MEMORY finalOffset 4 FALSE (value)
CLEO_RETURN 0 (value)
}
{
//CLEO_CALL SlideCharTo 0 (scplayer 2441.002 -1965.9785 13.5469 90.0 0.05)()
LVAR_INT hChar //In
LVAR_FLOAT xDest yDest zDest aDest fMoveSpeed //In
LVAR_FLOAT x y z x2 y2 z2 f fEased
LVAR_INT i
SlideCharTo:
GET_CHAR_COORDINATES hChar x y z
TASK_ACHIEVE_HEADING hChar aDest
WHILE f < 1.0
WAIT 0
IF IS_CHAR_DEAD hChar
BREAK
ENDIF
EASE f EASE_MODE_CUBIC EASE_WAY_INOUT (fEased)
LERP x xDest fEased (x2)
LERP y yDest fEased (y2)
LERP z zDest fEased (z2)
SET_CHAR_COORDINATES_SIMPLE hChar x2 y2 z2
f +=@ fMoveSpeed
ENDWHILE
f = 0.0
WHILE NOT IS_CHAR_DEAD hChar
GET_SCRIPT_TASK_STATUS hChar 0x5d4 i // TASK_ACHIEVE_HEADING
IF i = 7 // finished
OR f > 1.0
BREAK
ENDIF
f +=@ 0.005 // this is just a time counter to avoid soft lock
WAIT 0
ENDWHILE
CLEO_RETURN 0 ()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment