Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@JuniorDjjr
Last active January 5, 2024 17:38
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/8caad91c6858a276ad84329d640c72f4 to your computer and use it in GitHub Desktop.
Save JuniorDjjr/8caad91c6858a276ad84329d640c72f4 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 hPlayerVeh lfBlipsCacheX lfBlipsCacheY lBlips iProgress hVeh iModel iTotal iCount hBlip iAlpha pDotTexture iPlayerId iOnMenuListSize iR iG iB
LVAR_FLOAT x y f fEaseProgress fMinSize fA
IF READ_INT_FROM_INI_FILE "CLEO\Boat Radar.ini" "Settings" "R" (iR)
AND READ_INT_FROM_INI_FILE "CLEO\Boat Radar.ini" "Settings" "G" (iG)
AND READ_INT_FROM_INI_FILE "CLEO\Boat Radar.ini" "Settings" "B" (iB)
AND READ_FLOAT_FROM_INI_FILE "CLEO\Boat Radar.ini" "Settings" "A" (fA)
AND READ_FLOAT_FROM_INI_FILE "CLEO\Boat Radar.ini" "Settings" "MinSize" (fMinSize)
ELSE
PRINT_STRING_NOW "~r~Error: Fail to read 'Boat Radar.ini'" 6000
TERMINATE_THIS_CUSTOM_SCRIPT
ENDIF
WHILE TRUE
WAIT 0
iPlayerId = 0
GOSUB Process
IF IS_2PLAYER_GAME_GOING_ON
iPlayerId = 1
GOSUB Process
ENDIF
ENDWHILE
Process:
GET_PLAYER_CHAR iPlayerId (scplayer)
IF scplayer > 0
IF IS_CHAR_SITTING_IN_ANY_CAR scplayer
STORE_CAR_CHAR_IS_IN_NO_SAVE scplayer (hPlayerVeh)
GET_VEHICLE_SUBCLASS hPlayerVeh (i)
IF i = VEHICLE_SUBCLASS_BOAT
GET_CAR_MODEL hPlayerVeh iModel
GET_MODEL_DIMENSIONS iModel x y f f f f
ABS_LVAR_FLOAT y
IF y > fMinSize
GOSUB Init
WHILE IS_CHAR_SITTING_IN_ANY_CAR scplayer
GOSUB ShowBlips
ENDWHILE
GOSUB Deinit
ENDIF
ENDIF
ENDIF
ENDIF
RETURN
Init:
LOAD_TEXTURE_DICTIONARY BOTRDAR
LOAD_SPRITE 1 SMOOTHDOT
GET_TEXTURE_FROM_SPRITE 1 (pDotTexture)
CREATE_LIST DATATYPE_FLOAT (lfBlipsCacheX)
CREATE_LIST DATATYPE_FLOAT (lfBlipsCacheY)
CREATE_LIST DATATYPE_INT (lBlips)
SET_SCRIPT_EVENT_ON_MENU ON OnMenu i
RETURN
Deinit:
REMOVE_TEXTURE_DICTIONARY
DELETE_LIST lfBlipsCacheX
DELETE_LIST lfBlipsCacheY
DELETE_LIST lBlips
lfBlipsCacheX = 0
lfBlipsCacheY = 0
lBlips = 0
RETURN
ShowBlips:
iTotal = 0
iProgress = 0
WHILE GET_ANY_CAR_NO_SAVE_RECURSIVE iProgress (iProgress hVeh)
GET_VEHICLE_SUBCLASS hVeh (i)
IF i = VEHICLE_SUBCLASS_BOAT
AND NOT hVeh = hPlayerVeh
GET_CAR_COORDINATES hVeh (x y f)
LIST_ADD lfBlipsCacheX x
LIST_ADD lfBlipsCacheY y
++iTotal
ENDIF
ENDWHILE
IF iTotal = 0
WAIT 0 // important!
RETURN
ENDIF
iCount = 0
WHILE iCount < iTotal
GET_LIST_VALUE_BY_INDEX lfBlipsCacheX iCount (x)
GET_LIST_VALUE_BY_INDEX lfBlipsCacheY iCount (y)
ADD_CLEO_BLIP pDotTexture x y TRUE iR iG iB 0 (hBlip)
LIST_ADD lBlips (hBlip)
++iCount
ENDWHILE
// Draw loop
fEaseProgress = 0.0
WHILE fEaseProgress < 2.0
IF fEaseProgress < 1.0
f = fEaseProgress
ELSE
f = fEaseProgress - 2.0
ABS_LVAR_FLOAT f
ENDIF
CLAMP_FLOAT f 0.0 1.0 (f)
EASE f EASE_MODE_CUBIC EASE_WAY_OUT (f)
f *= fA
iAlpha =# f
iCount = 0
WHILE iCount < iTotal
GET_LIST_VALUE_BY_INDEX lBlips iCount (hBlip)
WRITE_STRUCT_OFFSET hBlip 15 1 iAlpha //alpha value; it's safe, the struct will not change
++iCount
ENDWHILE
//PRINT_FORMATTED_NOW "%.3f %.3f %i" 100 fEaseProgress f iAlpha
fEaseProgress +=@ 0.02
WAIT 0
ENDWHILE
iCount = 0
WHILE iCount < iTotal
GET_LIST_VALUE_BY_INDEX lBlips iCount (hBlip)
REMOVE_CLEO_BLIP hBlip
++iCount
ENDWHILE
RESET_LIST lfBlipsCacheX
RESET_LIST lfBlipsCacheY
RESET_LIST lBlips
RETURN
OnMenu:
// If paused, set all blips to full opacity for pause map
IF NOT lBlips = 0
GET_LIST_SIZE lBlips (iOnMenuListSize)
IF iOnMenuListSize > 0
i = 0
WHILE i < iOnMenuListSize
GET_LIST_VALUE_BY_INDEX lBlips i (hBlip)
WRITE_STRUCT_OFFSET hBlip 15 1 255 // alpha = 255
++i
ENDWHILE
ENDIF
ENDIF
RETURN_SCRIPT_EVENT
}
SCRIPT_END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment