Created
November 29, 2020 04:16
-
-
Save JuniorDjjr/e641a5c3b14fecebc2265662dc1ef8b9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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 playerId i j scplayer iModel hObject pObject pMatrix pColPoint pQuat bValidToSpray iTimeToFinish iSpraying hProcessObject iAlpha bNotSprayingLastFrame pAPI pSetObjectAlpha iLayer iSelected iFlags iTotalModels | |
LVAR_FLOAT x y z x2 y2 z2 f g fTotalArea | |
CONST_INT MIN_ALPHA 60 | |
CONST_FLOAT HUD_ICON_SIZE 20.0 | |
CONST_FLOAT HUD_POS_X 310.0 | |
CONST_FLOAT HUD_POS_X_PLAYER_2 400.0 | |
CONST_FLOAT HUD_POS_Y 20.0 | |
CONST_FLOAT HUD_POS_Y_ICON_SPACE 10.0 | |
CONST_FLOAT HUD_POS_Y_TEXT_SPACE 25.0 | |
CONST_INT FLAG_SAVE 0 | |
CONST_INT FLAG_DONE 1 | |
CONST_INT FLAG_ENABLED_LAST_FRAME 2 | |
CONST_INT SPRITE_ICON_STYLE 1 | |
CONST_INT SPRITE_ICON_LAYER 2 | |
CONST_INT SPRITE_ICON_DELETE 3 | |
WAIT 600 | |
IF playerId = 0 | |
STREAM_CUSTOM_SCRIPT "Graffiti Anywhere (Junior_Djjr).cs" 1 | |
GET_PLAYER_CHAR playerId scplayer | |
ENDIF | |
pSetObjectAlpha = 0 | |
IF GET_LOADED_LIBRARY "ObjectColorsAPI.SA.asi" (pAPI) | |
IF NOT GET_DYNAMIC_LIBRARY_PROCEDURE "SetObjectAlpha" pAPI (pSetObjectAlpha) | |
pSetObjectAlpha = 0 | |
ENDIF | |
ENDIF | |
IF pSetObjectAlpha = 0 | |
PRINT_STRING_NOW "~r~Error: Graffiti Anywhere requires 'ObjectColorsAPI.SA.asi' installed." 5000 | |
TERMINATE_THIS_CUSTOM_SCRIPT | |
ENDIF | |
iLayer = 1 | |
iSelected = 1 | |
IF GOSUB ReadSelected | |
ELSE | |
PRINT_STRING_NOW "~r~Error: Need at least one graffiti model ID in 'Graffiti Anywhere.ini' 'Models'" 5000 | |
TERMINATE_THIS_CUSTOM_SCRIPT | |
ENDIF | |
IF READ_INT_FROM_INI_FILE "CLEO/Graffiti Anywhere.ini" "Settings" "Save" (i) | |
AND i = TRUE | |
SET_LOCAL_VAR_BIT_CONST iFlags FLAG_SAVE | |
ENDIF | |
LOAD_TEXTURE_DICTIONARY GRFANYW | |
LOAD_SPRITE 1 ICON_STYLE | |
LOAD_SPRITE 2 ICON_LAYER | |
LOAD_SPRITE 3 ICON_DELETE | |
///////////////////////////////////////////// | |
WHILE TRUE | |
IF TEST_CHEAT CLEARALLGRAF | |
CREATE_LIST DATATYPE_INT timera | |
j = 1 | |
GET_LABEL_POINTER Buffer32 (i) | |
WHILE j < 1000 | |
STRING_FORMAT i "ID%i" j | |
IF NOT READ_INT_FROM_INI_FILE "CLEO/Graffiti Anywhere.ini" "Models" $i (iModel) | |
BREAK | |
ENDIF | |
LIST_ADD timera iModel | |
++j | |
ENDWHILE | |
i = 0 | |
GET_LIST_SIZE timera timerb | |
WHILE GET_ANY_OBJECT_NO_SAVE_RECURSIVE i (i hObject) | |
j = 0 | |
WHILE j < timerb | |
GET_LIST_VALUE_BY_INDEX timera j (iModel) | |
IF DOES_OBJECT_HAVE_THIS_MODEL hObject iModel | |
DELETE_OBJECT hObject | |
BREAK | |
ENDIF | |
++j | |
ENDWHILE | |
ENDWHILE | |
DELETE_LIST timera | |
PRINT_HELP GRFANY3 | |
ENDIF | |
/*IF TEST_CHEAT GR | |
REQUEST_MODEL SPRAYCAN | |
LOAD_ALL_MODELS_NOW | |
GIVE_WEAPON_TO_CHAR scplayer WEAPONTYPE_SPRAYCAN 9999 | |
ENDIF*/ | |
IF IS_LOCAL_VAR_BIT_SET_CONST iFlags FLAG_ENABLED_LAST_FRAME | |
GOSUB DrawInterface | |
ELSE | |
WAIT 0 | |
ENDIF | |
CLEAR_LOCAL_VAR_BIT_CONST iFlags FLAG_ENABLED_LAST_FRAME | |
IF playerId = 1 | |
IF IS_2PLAYER_GAME_GOING_ON | |
GET_PLAYER_CHAR playerId scplayer | |
ELSE | |
CONTINUE | |
ENDIF | |
ENDIF | |
IF IS_CURRENT_CHAR_WEAPON scplayer WEAPONTYPE_SPRAYCAN | |
IF IS_AIM_BUTTON_PRESSED playerId | |
AND NOT IS_CHAR_DEAD scplayer | |
AND NOT IS_CHAR_IN_ANY_CAR scplayer | |
AND NOT IS_CHAR_DOING_ANY_IMPORTANT_TASK scplayer INCLUDE_ANIMS_BOTH | |
AND NOT IS_ON_SCRIPTED_CUTSCENE | |
SET_LOCAL_VAR_BIT_CONST iFlags FLAG_ENABLED_LAST_FRAME | |
GOSUB PosGraffiti | |
ENDIF | |
ENDIF | |
ENDWHILE | |
///////////////////////////////////////////// | |
PosGraffiti: | |
// Paint disabled, wait change graffiti | |
IF iSelected = 0 | |
WHILE IS_CURRENT_CHAR_WEAPON scplayer WEAPONTYPE_SPRAYCAN | |
AND IS_AIM_BUTTON_PRESSED playerId | |
IF IS_BUTTON_JUST_PRESSED playerId LEFTSHOULDER2 | |
iSelected = 1 | |
BREAK | |
ENDIF | |
IF IS_BUTTON_JUST_PRESSED playerId RIGHTSHOULDER2 | |
iSelected = iTotalModels | |
BREAK | |
ENDIF | |
GOSUB DrawInterface | |
IF playerId = 1 | |
IF NOT IS_2PLAYER_GAME_GOING_ON | |
BREAK | |
ENDIF | |
ENDIF | |
ENDWHILE | |
RETURN | |
ENDIF | |
IF GOSUB ReadSelected | |
ELSE | |
RETURN | |
ENDIF | |
REQUEST_PRIORITY_MODEL iModel | |
LOAD_ALL_PRIORITY_MODELS_NOW | |
CREATE_OBJECT_NO_SAVE iModel 0.0 0.0 -100.0 FALSE FALSE (hObject) | |
GET_OBJECT_POINTER hObject (pObject) | |
READ_STRUCT_OFFSET pObject 0x14 4 (pMatrix) | |
iAlpha = MIN_ALPHA | |
bValidToSpray = FALSE | |
iSpraying = FALSE | |
bNotSprayingLastFrame = FALSE | |
timera = 0 | |
CLEAR_LOCAL_VAR_BIT_CONST iFlags FLAG_DONE | |
//extern "C" void __declspec(dllexport) SetObjectColor(CObject *object, int red, int green, int blue) | |
//CALL_FUNCTION pSetObjectAlpha 2 2 (iAlpha pObject)() | |
WHILE IS_CURRENT_CHAR_WEAPON scplayer WEAPONTYPE_SPRAYCAN | |
AND IS_AIM_BUTTON_PRESSED playerId | |
AND DOES_OBJECT_EXIST hObject | |
AND NOT IS_CHAR_DEAD scplayer | |
AND NOT IS_CHAR_IN_ANY_CAR scplayer | |
AND NOT IS_CHAR_DOING_ANY_IMPORTANT_TASK scplayer INCLUDE_ANIMS_BOTH | |
AND NOT IS_ON_SCRIPTED_CUTSCENE | |
GET_CURRENT_CAMERA_MODE (i) | |
IF i = CAMERAMODE_AIMING | |
OR i = CAMERAMODE_AIMWEAPON | |
// the following ones aren't really required, but trying to be safe | |
OR i = CAMERAMODE_FOLLOWPED | |
OR i = CAMERAMODE_1STPERSON | |
OR i = CAMERAMODE_CAM_ON_A_STRING | |
OR i >= CAMERAMODE_AIMWEAPON_ATTACHED // maybe this includes other camera modes added by mods | |
GET_OFFSET_FROM_CAMERA_IN_WORLD_COORDS 0.0 0.0 0.0 (x y z) | |
GET_OFFSET_FROM_CAMERA_IN_WORLD_COORDS 0.0 5.0 0.0 (x2 y2 z2) | |
ELSE | |
GET_OFFSET_FROM_CHAR_IN_WORLD_COORDS scplayer 0.0 0.0 0.0 (x y z) | |
GET_OFFSET_FROM_CHAR_IN_WORLD_COORDS scplayer 0.0 5.0 0.0 (x2 y2 z2) | |
ENDIF | |
IF IS_BUTTON_JUST_PRESSED playerId LEFTSHOULDER2 | |
++iSelected | |
IF iSelected > iTotalModels | |
iSelected = 0 | |
ENDIF | |
BREAK | |
ENDIF | |
IF IS_BUTTON_JUST_PRESSED playerId RIGHTSHOULDER2 | |
--iSelected | |
BREAK | |
ENDIF | |
IF NOT LOCATE_CHAR_DISTANCE_TO_OBJECT scplayer hObject 7.0 | |
bValidToSpray = FALSE | |
ENDIF | |
// Fix spraycan "reloading" on 1 frame (not really realoading) | |
IF bValidToSpray = TRUE | |
GET_CHAR_WEAPON_STATE scplayer iSpraying | |
ELSE | |
iSpraying = FALSE | |
ENDIF | |
IF iSpraying = FALSE | |
IF bNotSprayingLastFrame = TRUE | |
timera = 0 | |
ELSE | |
iSpraying = TRUE | |
ENDIF | |
bNotSprayingLastFrame = TRUE | |
ELSE | |
bNotSprayingLastFrame = FALSE | |
ENDIF | |
IF IS_LOCAL_VAR_BIT_SET_CONST iFlags FLAG_DONE | |
IF iSpraying = FALSE | |
BREAK | |
ENDIF | |
GOSUB DrawInterface | |
IF playerId = 1 | |
IF NOT IS_2PLAYER_GAME_GOING_ON | |
BREAK | |
ENDIF | |
ENDIF | |
CONTINUE | |
ELSE | |
SET_OBJECT_VISIBLE hObject OFF | |
ENDIF | |
IF IS_BUTTON_JUST_PRESSED playerId DPADRIGHT | |
++iLayer | |
IF iLayer > 10 | |
iLayer = 10 | |
ENDIF | |
ENDIF | |
IF IS_BUTTON_JUST_PRESSED playerId DPADLEFT | |
--iLayer | |
IF iLayer < 1 | |
iLayer = 1 | |
ENDIF | |
ENDIF | |
bValidToSpray = FALSE | |
iAlpha = MIN_ALPHA | |
GET_PED_POINTER scplayer i | |
GET_LABEL_POINTER ColPointBuffer (pColPoint) | |
IF GET_COLLISION_BETWEEN_POINTS (x y z) (x2 y2 z2) TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE i pColPoint (x y z i) | |
IF IS_BUTTON_PRESSED playerId DPADDOWN | |
AND playerId = 0 | |
i = 0 | |
WHILE GET_ANY_OBJECT_NO_SAVE_RECURSIVE i (i j) | |
GET_OBJECT_MODEL j timera | |
IF timera = iModel | |
AND NOT hObject = j | |
AND LOCATE_OBJECT_DISTANCE_TO_OBJECT hObject j 1.0 | |
DELETE_OBJECT j | |
ENDIF | |
ENDWHILE | |
timera = 0 | |
ELSE | |
SET_OBJECT_VISIBLE hObject ON | |
bValidToSpray = TRUE | |
// Final validation | |
IF iSpraying = 1 | |
IF NOT IS_WANTED_LEVEL_GREATER playerId 0 | |
IF GET_CLOSEST_COP_NEAR_CHAR scplayer 50.0 TRUE TRUE TRUE TRUE i | |
ALTER_WANTED_LEVEL_NO_DROP playerId 1 | |
ENDIF | |
ENDIF | |
GET_MODEL_DIMENSIONS iModel (x y z x2 y2 z2) | |
fTotalArea = 0.0 | |
f = x - x2 | |
ABS_LVAR_FLOAT f | |
fTotalArea += f | |
f = y - y2 | |
ABS_LVAR_FLOAT f | |
fTotalArea += f | |
f = z - z2 | |
ABS_LVAR_FLOAT f | |
fTotalArea += f | |
f = fTotalArea * 400.0 | |
iTimeToFinish =# f | |
iTimeToFinish += 500 | |
IF timera > iTimeToFinish | |
iAlpha = 255 | |
// Set object to save | |
IF IS_LOCAL_VAR_BIT_SET_CONST iFlags FLAG_SAVE | |
WRITE_STRUCT_OFFSET pObject 0x13C 1 2 // eObjectType::OBJECT_MISSION | |
ENDIF | |
SET_LOCAL_VAR_BIT_CONST iFlags FLAG_DONE | |
ELSE | |
// convert to percent progress; mult for close 255.0 | |
f =# timera | |
g =# iTimeToFinish | |
f /= g | |
f *= 120.0 | |
iAlpha =# f | |
iAlpha += MIN_ALPHA | |
CLAMP_INT iAlpha MIN_ALPHA 255 (iAlpha) | |
//PRINT_FORMATTED_NOW "%i / %i ALPHA %f" 1000 timera iTimeToFinish f | |
ENDIF | |
ELSE | |
SET_OBJECT_COORDINATES hObject x y z | |
GET_COLPOINT_NORMAL_VECTOR pColPoint (x2 y2 z2) | |
GET_LABEL_POINTER QuaternionBuffer (pQuat) | |
// for better CONVERT_DIRECTION_TO_QUAT calculation | |
x2 *= 10.0 | |
y2 *= 10.0 | |
z2 *= 10.0 | |
CONVERT_DIRECTION_TO_QUAT pQuat x2 y2 z2 | |
ROTATE_QUAT_ON_AXIS pQuat 1.0 0.0 0.0 -90.0 1 | |
SET_MATRIX_ROTATION_FROM_QUAT pMatrix pQuat | |
f =# iLayer | |
f *= -0.01 // each layer step | |
GET_OFFSET_FROM_OBJECT_IN_WORLD_COORDS hObject 0.0 f 0.0 x y z | |
SET_OBJECT_COORDINATES hObject x y z | |
ENDIF | |
ENDIF | |
ENDIF | |
IF DOES_OBJECT_EXIST hObject | |
CALL_FUNCTION pSetObjectAlpha 2 2 (iAlpha pObject)() | |
ENDIF | |
GOSUB DrawInterface | |
IF playerId = 1 | |
IF NOT IS_2PLAYER_GAME_GOING_ON | |
BREAK | |
ENDIF | |
ENDIF | |
ENDWHILE | |
IF NOT IS_LOCAL_VAR_BIT_SET_CONST iFlags FLAG_DONE | |
AND hObject > 0 | |
DELETE_OBJECT hObject | |
hObject = 0 | |
ENDIF | |
RETURN | |
DrawInterface: | |
GET_FIXED_XY_ASPECT_RATIO HUD_ICON_SIZE HUD_ICON_SIZE (x y) | |
y2 = HUD_POS_Y | |
IF playerId = 0 | |
x2 = HUD_POS_X | |
ELSE | |
x2 = HUD_POS_X_PLAYER_2 | |
ENDIF | |
DRAW_SPRITE SPRITE_ICON_STYLE x2 y2 x y 255 255 255 255 | |
y2 += HUD_POS_Y_ICON_SPACE | |
GOSUB HudTextFormat | |
DISPLAY_TEXT_WITH_NUMBER x2 y2 GRFANY0 iSelected | |
y2 += HUD_POS_Y_TEXT_SPACE | |
DRAW_SPRITE SPRITE_ICON_LAYER x2 y2 x y 255 255 255 255 | |
y2 += HUD_POS_Y_ICON_SPACE | |
GOSUB HudTextFormat | |
DISPLAY_TEXT_WITH_NUMBER x2 y2 GRFANY1 iLayer | |
y2 += HUD_POS_Y_TEXT_SPACE | |
IF NOT iSelected = 0 | |
IF IS_BUTTON_PRESSED playerId DPADDOWN | |
DRAW_SPRITE SPRITE_ICON_DELETE x2 y2 x y 255 50 0 255 | |
y2 += HUD_POS_Y_ICON_SPACE | |
GOSUB HudTextFormat | |
SET_TEXT_COLOUR 255 50 0 255 | |
ELSE | |
DRAW_SPRITE SPRITE_ICON_DELETE x2 y2 x y 255 255 255 255 | |
y2 += HUD_POS_Y_ICON_SPACE | |
GOSUB HudTextFormat | |
ENDIF | |
DISPLAY_TEXT x2 y2 GRFANY2 | |
y2 += HUD_POS_Y_TEXT_SPACE | |
ENDIF | |
USE_TEXT_COMMANDS 0 | |
WAIT 0 | |
RETURN | |
HudTextFormat: | |
SET_TEXT_FONT FONT_MENU | |
SET_TEXT_PROPORTIONAL TRUE | |
SET_TEXT_SCALE 0.3 0.93 | |
SET_TEXT_EDGE 1 0 0 0 255 | |
SET_TEXT_COLOUR 255 255 255 255 | |
SET_TEXT_CENTRE TRUE | |
SET_TEXT_CENTRE_SIZE 640.0 | |
RETURN | |
CountModels: | |
iTotalModels = 0 | |
j = 1 | |
GET_LABEL_POINTER Buffer32 (i) | |
WHILE j < 1000 | |
STRING_FORMAT i "ID%i" j | |
IF NOT READ_INT_FROM_INI_FILE "CLEO/Graffiti Anywhere.ini" "Models" $i (iModel) | |
BREAK | |
ENDIF | |
++iTotalModels | |
++j | |
ENDWHILE | |
IF iTotalModels > 0 | |
RETURN_TRUE | |
RETURN | |
ENDIF | |
RETURN_FALSE | |
RETURN | |
ReadSelected: | |
GOSUB CountModels | |
j = iModel //backup | |
GET_LABEL_POINTER Buffer32 (i) | |
STRING_FORMAT i "ID%i" iSelected | |
READ_INT_FROM_INI_FILE "CLEO/Graffiti Anywhere.ini" "Models" $i (iModel) | |
IF NOT IS_MODEL_IN_CDIMAGE iModel | |
PRINT_FORMATTED_NOW "~r~Error: Can't read graffiti model ID %i" 3000 iModel | |
IF j = 0 | |
RETURN_FALSE | |
RETURN | |
ELSE | |
iModel = j | |
ENDIF | |
ENDIF | |
RETURN_TRUE | |
RETURN | |
} | |
SCRIPT_END | |
ColPointBuffer: | |
DUMP | |
00 00 00 00 00 00 00 00 | |
00 00 00 00 00 00 00 00 | |
00 00 00 00 00 00 00 00 | |
00 00 00 00 00 00 00 00 | |
00 00 00 00 00 00 00 00 | |
00 00 00 00 | |
ENDDUMP | |
QuaternionBuffer: | |
DUMP | |
00 00 00 00 //x | |
00 00 00 00 //y | |
00 00 00 00 //z | |
00 00 00 00 //w | |
ENDDUMP | |
Buffer32: | |
DUMP | |
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
ENDDUMP |
Prelight is inside .dff.
Oh, thanks! I will try to workaround the issue later then
GET_DAY_NIGHT_BALANCE from CLEO+ returns the balance value used for prelight transition.
oh nono, I don't need to change that. If prelight works on the .dff and this code is indeed up to date with the last .cs then I will only need to change the joystick mappings to work with the IV-style ginput preset!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Is this code updated with the night lighting fix? I am trying to fix an issue with my controller input (using Ginput's IV-style mapping, you might want to take a look at that conflict yourself).
Asking here since I don't have a facebook account to comment on mixmods. I love your work!