Last active
January 22, 2021 07:05
-
-
Save user-grinch/723402f7b636ea9e47bffbf83b22658b to your computer and use it in GitHub Desktop.
This file contains hidden or 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
/* | |
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