Skip to content

Instantly share code, notes, and snippets.

@JuniorDjjr
Created February 12, 2022 23: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/86e25524bf0698f4830d696182575c03 to your computer and use it in GitHub Desktop.
Save JuniorDjjr/86e25524bf0698f4830d696182575c03 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
// For Inventory System
SCRIPT_START
{
LVAR_INT scplayer i pItemName iExternalAction iPrice iGiveItemCounter iPosIndex
LVAR_FLOAT x y z screenX screenY sizeX sizeY charX charY charZ f shopX shopY
//-----------------
// External actions
CONST_INT EXTERNAL_ACTION_NONE 0
CONST_INT EXTERNAL_ACTION_CREATE_ITEM_OBJECT 1
CONST_INT EXTERNAL_ACTION_GIVE_ITEM 2
//-----------------
CONST_FLOAT MIN_DISTANCE_TO_SHOW 7.0
CONST_FLOAT MIN_DISTANCE_TO_PICK 1.0
CONST_FLOAT SHOP_ITEM_LETTER_SIZE_MULT 0.3
WAIT 0
WAIT 0
WAIT 0 // to give time for items to be read on script root
GET_PLAYER_CHAR 0 scplayer
//SET_CHAR_COORDINATES scplayer 2087.1177 2074.3567 10.9706 //tests
WHILE TRUE
WAIT 0
GET_AREA_VISIBLE (i)
IF i > 0
shopX = -104.7788
shopY = -22.6772
IF LOCATE_CHAR_ANY_MEANS_3D scplayer shopX shopY 1000.0 40.0 40.0 30.0 FALSE
GOSUB ProcessShop
ENDIF
ENDIF
ENDWHILE
ProcessShop:
WHILE TRUE
WAIT 0
GET_CHAR_COORDINATES scplayer (charX charY charZ)
GET_AREA_VISIBLE (i)
IF LOCATE_CHAR_ANY_MEANS_3D scplayer shopX shopY 1000.0 50.0 50.0 20.0 FALSE
AND i > 0
iPosIndex = 0
WHILE iPosIndex < 2
GOSUB GetPos
IF LOCATE_CHAR_DISTANCE_TO_COORDINATES scplayer x y z MIN_DISTANCE_TO_SHOW
CONVERT_3D_TO_SCREEN_2D x y z TRUE FALSE (screenX screenY sizeX sizeY)
sizeX *= SHOP_ITEM_LETTER_SIZE_MULT
sizeY *= SHOP_ITEM_LETTER_SIZE_MULT
GET_LABEL_POINTER Buffer (timera)
GET_TEXT_LABEL_STRING IScondm (timera)
DRAW_STRING_EXT $timera DRAW_EVENT_BEFORE_DRAWING screenX screenY sizeX sizeY TRUE FONT_SUBTITLES TRUE ALIGN_CENTER 640.0 FALSE (255 255 255 255) 1 0 (0 0 0 255) FALSE (0 0 0 0)
f = z + 0.1
CONVERT_3D_TO_SCREEN_2D x y f TRUE FALSE (screenX screenY sizeX sizeY)
sizeX *= SHOP_ITEM_LETTER_SIZE_MULT
sizeY *= SHOP_ITEM_LETTER_SIZE_MULT
DRAW_STRING_EXT "$10" DRAW_EVENT_BEFORE_DRAWING screenX screenY sizeX sizeY TRUE FONT_SUBTITLES TRUE ALIGN_CENTER 640.0 FALSE (100 255 0 255) 1 0 (0 0 0 255) FALSE (0 0 0 0)
IF IS_LINE_OF_SIGHT_CLEAR x y z charX charY charZ 1 0 0 0 0
AND LOCATE_CHAR_DISTANCE_TO_COORDINATES scplayer x y z MIN_DISTANCE_TO_PICK
f = z + 0.2
CONVERT_3D_TO_SCREEN_2D x y f TRUE FALSE (screenX screenY sizeX sizeY)
sizeX *= SHOP_ITEM_LETTER_SIZE_MULT
sizeY *= SHOP_ITEM_LETTER_SIZE_MULT
sizeX *= 0.8
sizeY *= 1.5
GET_FIXED_XY_ASPECT_RATIO sizeX sizeY (sizeX sizeY)
USE_TEXT_COMMANDS 1
SET_TEXT_FONT FONT_SUBTITLES
SET_TEXT_EDGE 1 0 0 0 255
SET_TEXT_CENTRE ON
SET_TEXT_SCALE sizeX sizeY
//ISSHP01 ~s~Press ~y~~k~~CONVERSATION_YES~~s~+ / ~y~~k~~CONVERSATION_NO~~s~-
//ISSHP01 ~s~Press ~y~~k~~VEHICLE_ENTER_EXIT~
DISPLAY_TEXT screenX screenY ISBCND1
USE_TEXT_COMMANDS 0
IF IS_BUTTON_JUST_PRESSED PAD1 TRIANGLE
IF IS_SCORE_GREATER 0 10
iPrice = 10
GET_LABEL_POINTER BufferItemGive (pItemName)
STRING_FORMAT pItemName "IScondm"
iExternalAction = EXTERNAL_ACTION_GIVE_ITEM //char; item name pointer or ID
iGiveItemCounter = 0
WHILE iGiveItemCounter < 3 //give 3 count (not built in inventory system yet, so just loop it)
IF STREAM_CUSTOM_SCRIPT "Inventory System (Junior_Djjr).cs" iExternalAction scplayer pItemName
IF iGiveItemCounter = 0 // count once
REPORT_MISSION_AUDIO_EVENT_AT_POSITION 0.0 0.0 0.0 SOUND_SHOP_BUY
CHANGE_PLAYER_MONEY 0 CHANGE_MONEY_REMOVE iPrice //NOTE: this will run even if the item isn't installed
f =# iPrice
INCREMENT_FLOAT_STAT 62 f //STAT_TOTAL_SHOPPING_BUDGET
ENDIF
ELSE
PRINT_STRING_NOW "~r~Error: Can't find 'Inventory System (Junior_Djjr).cs'" 5000
BREAK
ENDIF
++iGiveItemCounter
ENDWHILE
ELSE
REPORT_MISSION_AUDIO_EVENT_AT_POSITION 0.0 0.0 0.0 SOUND_SHOP_BUY_DENIED
PRINT_NOW SHOPNO 3000 1 // ~s~You don't have enough money to buy this item.
ENDIF
ENDIF
ENDIF
ENDIF
++iPosIndex
ENDWHILE
ELSE
BREAK
ENDIF
ENDWHILE
RETURN
GetPos:
SWITCH iPosIndex
CASE 0
x = -104.7788
y = -22.6772
z = 1000.7187
BREAK
CASE 1
x = -108.2925
y = -10.6166
z = 1000.7187
BREAK
ENDSWITCH
RETURN
}
SCRIPT_END
Buffer:
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 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 //64
ENDDUMP
BufferItemGive: /// this must keep for at least 1 frame
DUMP
00 00 00 00 00 00 00 00 //8
ENDDUMP
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment