Skip to content

Instantly share code, notes, and snippets.

@user-grinch
Last active January 22, 2021 07:05
Show Gist options
  • Save user-grinch/723402f7b636ea9e47bffbf83b22658b to your computer and use it in GitHub Desktop.
Save user-grinch/723402f7b636ea9e47bffbf83b22658b to your computer and use it in GitHub Desktop.
/*
RC Vehicle script
Author: Grinch_
*/
SCRIPT_START
{
SCRIPT_NAME RC_FTW
/////////////////////////////////////////////////////////////
// CONSTS
CONST_INT rc_interior 6
CONST_INT seller_model 217
CONST_FLOAT sphere_x -2237.0
CONST_FLOAT sphere_y 131.0
CONST_FLOAT sphere_z 1035.0
CONST_FLOAT rc_x -2237.0
CONST_FLOAT rc_y 129.0
CONST_FLOAT rc_z 1036.0
CONST_FLOAT sphere_radius 1.0
CONST_FLOAT menu_heading 188.47
/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
// vars
LVAR_INT sc_player interior sphere hmenu menu_selected submenu_selected price_list[6] hseller rc_models[6] hveh imodel bought_veh_model skip_seller
LVAR_FLOAT coord[3] distance
bought_veh_model = -1
hveh = -1
skip_seller = FALSE
// add prices
price_list[0] = 200 // RC Bandit
price_list[1] = 250 // RC Baron
price_list[2] = 150 // RC Cam
price_list[3] = 350 // RC Goblin
price_list[4] = 350 // RC Raider
price_list[5] = 650 // RC Tiger
// add models
rc_models[0] = 441 // RC Bandit
rc_models[1] = 464 // RC Baron
rc_models[2] = 594 // RC Cam
rc_models[3] = 501 // RC Goblin
rc_models[4] = 465 // RC Raider
rc_models[5] = 564 // RC Tiger
/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
// gxt
ADD_TEXT_LABEL RSHOP "RC Shop"
ADD_TEXT_LABEL RBANDIT "RC Bandit"
ADD_TEXT_LABEL RBARON "RC Baron"
ADD_TEXT_LABEL RCAM "RC Cam"
ADD_TEXT_LABEL RGOBLIN "RC Goblin"
ADD_TEXT_LABEL RRAIDER "RC Raider"
ADD_TEXT_LABEL RTIGER "RC Tiger"
ADD_TEXT_LABEL RCBUY "Buy"
ADD_TEXT_LABEL PBANDIT "$200"
ADD_TEXT_LABEL PBARON "$250"
ADD_TEXT_LABEL PCAM "$150"
ADD_TEXT_LABEL PGOBLIN "$350"
ADD_TEXT_LABEL PRAIDER "$350"
ADD_TEXT_LABEL PTIGER "$650"
/////////////////////////////////////////////////////////////
GET_PLAYER_CHAR 0 sc_player
// Main loop
WHILE TRUE
/////////////////////////////////////////////////////////////
// process shop if in Zero RC Interior
GET_AREA_VISIBLE interior
// Dummy code
IF IS_AUSTRALIAN_GAME
ADD_SPHERE 0.0 0.0 0.0 0.0 sphere
ENDIF
IF interior = rc_interior
GOSUB process_shop
ENDIF
IF TEST_CHEAT KKJJMASTER
PRINT_STRING "KKJJ is the master" 2000
skip_seller = TRUE
GOSUB process_menu
skip_seller = FALSE
ENDIF
IF TEST_CHEAT RCPLAY
GOSUB spawn_rc
ENDIF
IF IS_AUSTRALIAN_GAME
CREATE_CAR bought_veh_model coord[0] coord[1] -100.0 hveh
ENDIF
// handle rc
IF NOT hveh = -1
WHILE IS_CHAR_IN_CAR sc_player hveh
WAIT 0
IF IS_BUTTON_PRESSED PAD1 TRIANGLE
BREAK
ENDIF
IF IS_CAR_ON_FIRE hveh
PRINT_HELP_STRING "You've destroyed your rc vehicle"
bought_veh_model = -1
BREAK
ENDIF
ENDWHILE
GOSUB remove_rc
ENDIF
/////////////////////////////////////////////////////////////
WAIT 0
ENDWHILE
/////////////////////////////////////////////////////////////
remove_rc:
/////////////////////////////////////////////////////////////
GET_CAR_COORDINATES hveh coord[0] coord[1] coord[2]
WARP_CHAR_FROM_CAR_TO_COORD sc_player coord[0] coord[1] coord[2]
DELETE_CAR hveh
SET_EVERYONE_IGNORE_PLAYER 0 FALSE
CLEO_CALL show_player 0 1
hveh = -1
RETURN
/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
spawn_rc:
/////////////////////////////////////////////////////////////
IF hveh = -1
AND interior = 0 // world
IF bought_veh_model = -1
PRINT_HELP_STRING "You don't own a rc vehicle"
ELSE
IF IS_CHAR_IN_ANY_CAR sc_player
PRINT_HELP_STRING "You must be on foot to use rc vehicle"
ELSE
GET_CHAR_COORDINATES sc_player coord[0] coord[1] coord[2]
REQUEST_MODEL bought_veh_model
LOAD_ALL_MODELS_NOW
coord[2] = coord[2] - 2.0
CREATE_CAR bought_veh_model coord[0] coord[1] coord[2] hveh
MARK_MODEL_AS_NO_LONGER_NEEDED bought_veh_model
WARP_CHAR_INTO_CAR sc_player hveh
LOCK_CAR_DOORS hveh CARLOCK_LOCKED_PLAYER_INSIDE
SET_EVERYONE_IGNORE_PLAYER 0 TRUE
CLEO_CALL show_player 0 0
ENDIF
ENDIF
ENDIF
RETURN
/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
process_shop:
/////////////////////////////////////////////////////////////
// clear stuff
REMOVE_SPHERE sphere
// Try to find the seller
IF skip_seller = FALSE
IF GET_RANDOM_CHAR_IN_SPHERE_NO_SAVE_RECURSIVE sphere_x sphere_y sphere_z 10.0 FALSE TRUE hseller
GET_CHAR_MODEl hseller imodel
IF NOT imodel = seller_model
WHILE GET_RANDOM_CHAR_IN_SPHERE_NO_SAVE_RECURSIVE sphere_x sphere_y sphere_z 10.0 TRUE TRUE hseller
GET_CHAR_MODEl hseller imodel
IF imodel = seller_model
BREAK
ENDIF
ENDWHILE
ENDIF
ENDIF
IF hseller = -1
RETURN
ENDIF
ENDIF
// Enex clears spehere?
ADD_SPHERE sphere_x sphere_y sphere_z sphere_radius sphere
GET_CHAR_COORDINATES sc_player coord[0] coord[1] coord[2]
GET_DISTANCE_BETWEEN_COORDS_3D sphere_x sphere_y sphere_z coord[0] coord[1] coord[2] distance
IF distance < 0.8
AND IS_CHAR_STOPPED sc_player
IF NOT hseller = 0
OR skip_seller = TRUE
GOSUB process_menu
ENDIF
ENDIF
RETURN
/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
process_menu:
/////////////////////////////////////////////////////////////
GOSUB init_menu
CREATE_MENU RSHOP (30.0 170.0) (120.0) 2 TRUE TRUE 0 (hmenu)
menu_create:
IF hmenu = -1
RETURN
ENDIF
SET_MENU_COLUMN hmenu 0 DUMMY (RBANDIT RBARON RCAM RGOBLIN RRAIDER RTIGER DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY)
SET_MENU_COLUMN hmenu 1 DUMMY (PBANDIT PBARON PCAM PGOBLIN PRAIDER PTIGER DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY)
SET_MENU_COLUMN_ORIENTATION hmenu 0 1
SET_MENU_COLUMN_WIDTH hmenu 1 50
WHILE TRUE
WAIT 0
IF hmenu = -1
RETURN
ENDIF
GET_MENU_ITEM_SELECTED hmenu (menu_selected)
IF IS_BUTTON_PRESSED PAD1 CROSS // sprint key
WHILE IS_BUTTON_PRESSED PAD1 CROSS
WAIT 0
ENDWHILE
GOSUB process_submenu
GOTO menu_create
ENDIF
IF IS_BUTTON_PRESSED PAD1 TRIANGLE // action key
WHILE IS_BUTTON_PRESSED PAD1 TRIANGLE
WAIT 0
ENDWHILE
BREAK
ENDIF
ENDWHILE
menu_destroy:
DELETE_MENU hmenu
hmenu = -1
GOSUB clear_menu
GOSUB process_player_leave
RETURN
/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
process_submenu:
/////////////////////////////////////////////////////////////
SET_MENU_COLUMN hmenu 0 DUMMY (RCBUY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY)
SET_MENU_COLUMN hmenu 1 DUMMY (DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY)
SET_ACTIVE_MENU_ITEM hmenu 0
WHILE TRUE
GET_MENU_ITEM_SELECTED hmenu (submenu_selected)
IF NOT bought_veh_model = -1
AND submenu_selected = 0
PRINT_STRING "Buying this would replace your current rc vehicle" 10
ENDIF
IF IS_BUTTON_PRESSED PAD1 CROSS // sprint key
WHILE IS_BUTTON_PRESSED PAD1 CROSS
WAIT 0
ENDWHILE
IF submenu_selected = 0
bought_veh_model = rc_models[menu_selected]
PRINT_STRING "You've bought the rc vehicle" 2000
// cut money
READ_MEMORY 0xB7CE50 4 0 interior
interior = interior - price_list[menu_selected]
WRITE_MEMORY 0xB7CE50 4 interior 0
GOTO menu_destroy
ENDIF
ENDIF
IF IS_BUTTON_PRESSED PAD1 TRIANGLE // action key
WHILE IS_BUTTON_PRESSED PAD1 TRIANGLE
WAIT 0
ENDWHILE
SET_ACTIVE_MENU_ITEM hmenu 0
BREAK
ENDIF
WAIT 0
ENDWHILE
RETURN
/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
init_menu:
/////////////////////////////////////////////////////////////
SET_PLAYER_CONTROL 0 OFF
DISPLAY_RADAR OFF
DISPLAY_NON_MINIGAME_HELP_MESSAGES FALSE
PRINT_HELP_FOREVER AMMU_H
IF skip_seller = FALSE
TASK_LOOK_AT_CHAR sc_player hseller 0
TASK_TURN_CHAR_TO_FACE_CHAR sc_player hseller
RESTORE_CAMERA_JUMPCUT
ATTACH_CAMERA_TO_CHAR hseller 0.0 1.5 0.4 0.0 0.0 0.4 0.0 0
REQUEST_ANIMATION "WEAPONS"
LOAD_ALL_MODELS_NOW
TASK_PLAY_ANIM hseller "SHP_TRAY_POSE" "WEAPONS" 1000.0 1 0 0 0 -1
ENDIF
RETURN
/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
clear_menu:
/////////////////////////////////////////////////////////////
IF skip_seller = FALSE
TASK_PLAY_ANIM hseller "SHP_TRAY_POSE" "WEAPONS" 1000.0 0 0 0 0 1
REMOVE_ANIMATION "WEAPONS"
ENDIF
DISPLAY_NON_MINIGAME_HELP_MESSAGES TRUE
CLEAR_HELP
DISPLAY_RADAR ON
SET_PLAYER_CONTROL 0 ON
RESTORE_CAMERA_JUMPCUT
RETURN
/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
process_player_leave:
/////////////////////////////////////////////////////////////
WHILE TRUE
GET_CHAR_COORDINATES sc_player coord[0] coord[1] coord[2]
GET_DISTANCE_BETWEEN_COORDS_3D sphere_x sphere_y sphere_z coord[0] coord[1] coord[2] distance
IF distance > 1.0
BREAK
ENDIF
WAIT 0
ENDWHILE
RETURN
/////////////////////////////////////////////////////////////
}
{
LVAR_INT show
LVAR_INT pPlayer sc_player var
/////////////////////////////////////////////////////////////
show_player:
/////////////////////////////////////////////////////////////
GET_PLAYER_CHAR 0 sc_player
GET_PED_POINTER sc_player pPlayer
pPlayer = pPlayer + 0x46C // m_nPedFlags
pPlayer = pPlayer + 0x8 // + 8 Bytes
READ_MEMORY pPlayer 1 0 var // get that byte into var
IF show = 0 // Hide player model
BIT_OR var 0x2 var // Enable bDontReander
ELSE
BIT_XOR var 0x2 var // Disable bDontReander
ENDIF
WRITE_MEMORY pPlayer 1 var 0 // write that back to memory
CLEO_RETURN 0
/////////////////////////////////////////////////////////////
}
SCRIPT_END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment