Skip to content

Instantly share code, notes, and snippets.

@JuniorDjjr
Last active January 5, 2024 17:32
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/9120055916eb2850d517296ad521fa43 to your computer and use it in GitHub Desktop.
Save JuniorDjjr/9120055916eb2850d517296ad521fa43 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-cleo
SCRIPT_START
{
LVAR_INT scplayer hChar pEntity iWeaponType pColPoint i hObject iModel iNewModel hNewObject hFxSystem lObjects lDamObjects iListSize
LVAR_FLOAT x y z f
GET_PLAYER_CHAR 0 scplayer
SET_SCRIPT_EVENT_BULLET_IMPACT ON OnBulletImpact hChar pEntity iWeaponType pColPoint
//SET_SCRIPT_EVENT_OBJECT_DELETE ON OnObjectDelete hObject //didn't work on current CLEO+ version, I think it only works for scripted objects
CREATE_LIST DATATYPE_INT (lObjects)
CREATE_LIST DATATYPE_INT (lDamObjects)
WHILE TRUE
WAIT 0
GET_LIST_SIZE lObjects (iListSize)
IF iListSize > 0
i = 0
WHILE i < iListSize
GET_LIST_VALUE_BY_INDEX lObjects i (hObject)
IF NOT DOES_OBJECT_EXIST hObject
GOSUB DeleteDamObjectFromObject
ELSE
GET_OBJECT_COORDINATES hObject x y z
IF NOT z = -50.0 //something is wrong
GOSUB DeleteDamObjectFromObject
ENDIF
ENDIF
++i
ENDWHILE
ENDIF
ENDWHILE
OnBulletImpact:
IF pEntity > 0
GET_ENTITY_TYPE pEntity (i)
IF i = ENTITY_TYPE_OBJECT
GET_OBJECT_REF pEntity (hObject)
GET_OBJECT_MODEL hObject (iModel)
//PRINT_FORMATTED_NOW "%i" 1000 iModel
IF iModel = 955 //ext
OR iModel = 1775 //int
IF iModel = 955 //ext
iNewModel = 7393 //ext
ELSE
iNewModel = 7414 //int
ENDIF
GOSUB ChangeToNewModel
ENDIF
ENDIF
ENDIF
RETURN_SCRIPT_EVENT
ChangeToNewModel:
GET_OBJECT_COORDINATES hObject x y z
IF NOT z = -50.0 //not already removed
GET_OBJECT_COORDINATES hObject (x y z)
GET_OBJECT_HEADING hObject (f)
//DON'T DELETE THE ORIGINAL OBJECT! Keep it less intrusive
SET_OBJECT_COORDINATES hObject x y -50.0
SET_OBJECT_VISIBLE hObject OFF
SET_OBJECT_COLLISION hObject OFF
REQUEST_MODEL iNewModel
LOAD_ALL_MODELS_NOW
CREATE_OBJECT_NO_SAVE iNewModel x y z FALSE FALSE (hNewObject)
SET_OBJECT_HEADING hNewObject f
MARK_MODEL_AS_NO_LONGER_NEEDED iNewModel
//CREATE_FX_SYSTEM "explosion_tiny" x y z 1 (hFxSystem)
//PLAY_AND_KILL_FX_SYSTEM hFxSystem
ADD_EXPLOSION x y z EXPLOSION_TINY
//INIT_EXTENDED_OBJECT_VARS hObject AUTO 1
//SET_EXTENDED_OBJECT_VAR hObject AUTO 1 hNewObject
LIST_ADD lObjects hObject
LIST_ADD lDamObjects hNewObject
ENDIF
RETURN
/*
//didn't work on current CLEO+ version, I think it only works for scripted objects
OnObjectDelete:
IF GET_EXTENDED_OBJECT_VAR hObject AUTO 1 (hNewObject)
PRINT_STRING_NOW "deleted obj" 2000
DELETE_OBJECT hNewObject
ENDIF
RETURN_SCRIPT_EVENT
*/
DeleteDamObjectFromObject:
GET_LIST_VALUE_BY_INDEX lDamObjects i (hNewObject)
DELETE_OBJECT hNewObject
LIST_REMOVE_VALUE lObjects i
LIST_REMOVE_VALUE lDamObjects i
//PRINT_STRING_NOW "deleted obj" 2000
RETURN
}
SCRIPT_END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment