Last active
December 23, 2016 00:25
-
-
Save thelink2012/5be92d2949f85f0644ffd1a16e210cfb 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
// | |
// Quick Vehicle Spawner v2.0 | |
// | |
// Originally one of my first scripts (http://www.gtagarage.com/mods/show.php?id=19593), this is | |
// a improved version with performance issues fixed. | |
// | |
// This script reaches its best potential together CPad.DoCheats_Numpad_and_KeyPressedFlag.cs | |
// which can be found in the download link above. | |
// | |
// This should somehow demonstrate the use of GTA3script on the making of custom scripts. | |
// | |
// Additionally, this code is set under the public domain, so do whatever you want with it. | |
// | |
SCRIPT_START | |
{ | |
LVAR_INT scplayer | |
LVAR_INT counter | |
LVAR_INT tempvar tempva2 | |
LVAR_INT id this_vehicle_name this_model_info this_vehicle_label | |
LVAR_INT num_vehicles vehicle_names vehicle_str_ids | |
LVAR_INT ptr_gsVehicleModels | |
LVAR_INT current_language | |
LVAR_INT cfg_flying cfg_putincar cfg_speed | |
LVAR_FLOAT x y z a | |
LVAR_FLOAT fwd_x fwd_y fwd_z | |
LVAR_INT car menu | |
GET_PLAYER_CHAR 0 scplayer | |
vehicle_names = 0 | |
num_vehicles = 0 | |
READ_MEMORY 0x4C6771 4 TRUE ptr_gsVehicleModels | |
GET_CURRENT_LANGUAGE current_language | |
GOSUB load_vehicle_names | |
IF NOT READ_INT_FROM_INI_FILE "CLEO/QVHS.ini" "SPAWNER" "PutInCar" cfg_putincar | |
cfg_putincar = TRUE | |
ENDIF | |
IF NOT READ_INT_FROM_INI_FILE "CLEO/QVHS.ini" "SPAWNER" "Flying" cfg_flying | |
cfg_flying = TRUE | |
ENDIF | |
IF NOT READ_INT_FROM_INI_FILE "CLEO/QVHS.ini" "SPAWNER" "Speed" cfg_speed | |
cfg_speed = 1 | |
ENDIF | |
main_loop: | |
WAIT 0 | |
#ifdef DEBUG | |
IF IS_KEY_PRESSED VK_F6 | |
PRINT_HELP_STRING "Reloading QVHS.cs" | |
STREAM_CUSTOM_SCRIPT "QVHS.cs" | |
TERMINATE_THIS_CUSTOM_SCRIPT | |
ENDIF | |
#endif | |
GET_CURRENT_LANGUAGE tempvar | |
IF NOT current_language = tempvar | |
current_language = tempvar | |
GOSUB load_vehicle_names | |
ENDIF | |
IF IS_PLAYER_PLAYING 0 | |
IF IS_PLAYER_CONTROL_ON 0 | |
IF TEST_CHEAT "QVHSCFG" | |
GOSUB config_menu | |
GOTO main_loop | |
ENDIF | |
ENDIF | |
IF NOT IS_CHAR_IN_ANY_CAR scplayer | |
counter = 0 | |
WHILE counter < num_vehicles | |
// Spawn by text label | |
this_model_info = 0x308 * counter // sizeof CVehicleModelInfo | |
this_model_info += ptr_gsVehicleModels | |
this_vehicle_label = this_model_info + 0x36 // + (4 + 0x32) (->m_nGameName) | |
IF TEST_CHEAT $this_vehicle_label | |
GOSUB spawn_vehicle | |
GOTO main_loop | |
ENDIF | |
// Spawn by text label string | |
this_vehicle_name = 4 * counter | |
this_vehicle_name += vehicle_names | |
READ_MEMORY this_vehicle_name 4 FALSE tempvar | |
IF NOT tempvar = 0 | |
IF TEST_CHEAT $tempvar | |
GOSUB spawn_vehicle | |
GOTO main_loop | |
ENDIF | |
ENDIF | |
// Spawn by ID | |
tempvar = 8 * counter | |
tempva2 = vehicle_str_ids + tempvar | |
IF TEST_CHEAT $tempva2 | |
GOSUB spawn_vehicle | |
GOTO main_loop | |
ENDIF | |
++counter | |
MOD counter 50 tempvar | |
IF tempvar = 0 | |
WAIT 0 | |
ENDIF | |
ENDWHILE | |
ENDIF | |
ENDIF | |
GOTO main_loop | |
config_menu: | |
SET_PLAYER_CONTROL 0 FALSE | |
DISPLAY_HUD FALSE | |
DISPLAY_RADAR FALSE | |
ADD_TEXT_LABEL QVHS_TL "Quick Vehicle Spawner" | |
ADD_TEXT_LABEL QVHS_CP "Put player in vehicle" | |
ADD_TEXT_LABEL QVHS_CF "Spawn flying" | |
ADD_TEXT_LABEL QVHS_CS "Vehicle speed" | |
ADD_TEXT_LABEL QVHS_S0 "Stopped" | |
ADD_TEXT_LABEL QVHS_S1 "Normal" | |
ADD_TEXT_LABEL QVHS_S2 "Fast" | |
CREATE_MENU QVHS_TL (120.00 300.00) (400.0) TRUE TRUE TRUE 0 menu | |
SET_MENU_COLUMN menu 0 (DUMMY) (QVHS_CP QVHS_CF QVHS_CS DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY DUMMY) | |
SET_ACTIVE_MENU_ITEM menu 0 | |
WHILE NOT IS_BUTTON_PRESSED 0 TRIANGLE | |
HIGHLIGHT_MENU_ITEM menu 0 cfg_putincar | |
HIGHLIGHT_MENU_ITEM menu 1 cfg_flying | |
IF cfg_speed = 0 | |
HIGHLIGHT_MENU_ITEM menu 2 FALSE | |
ELSE | |
HIGHLIGHT_MENU_ITEM menu 2 TRUE | |
ENDIF | |
WAIT 0 | |
IF IS_BUTTON_PRESSED 0 CROSS | |
GET_MENU_ITEM_SELECTED menu tempvar | |
SWITCH tempvar | |
CASE 0 | |
BITWISE_XOR cfg_putincar 0x1 cfg_putincar | |
WRITE_INT_TO_INI_FILE cfg_putincar "CLEO/QVHS.ini" "SPAWNER" "PutInCar" | |
BREAK | |
CASE 1 | |
BITWISE_XOR cfg_flying 0x1 cfg_flying | |
WRITE_INT_TO_INI_FILE cfg_flying "CLEO/QVHS.ini" "SPAWNER" "Flying" | |
BREAK | |
CASE 2 | |
IF cfg_speed >= 2 | |
cfg_speed = 0 | |
ELSE | |
++cfg_speed | |
ENDIF | |
WRITE_INT_TO_INI_FILE cfg_speed "CLEO/QVHS.ini" "SPAWNER" "Speed" | |
SWITCH cfg_speed | |
CASE 0 | |
PRINT_HELP QVHS_S0 | |
BREAK | |
CASE 1 | |
PRINT_HELP QVHS_S1 | |
BREAK | |
CASE 2 | |
PRINT_HELP QVHS_S2 | |
BREAK | |
ENDSWITCH | |
BREAK | |
ENDSWITCH | |
WHILE IS_BUTTON_PRESSED 0 CROSS | |
WAIT 0 | |
ENDWHILE | |
ENDIF | |
ENDWHILE | |
DELETE_MENU menu | |
REMOVE_TEXT_LABEL QVHS_TL | |
REMOVE_TEXT_LABEL QVHS_CP | |
REMOVE_TEXT_LABEL QVHS_CF | |
REMOVE_TEXT_LABEL QVHS_CS | |
REMOVE_TEXT_LABEL QVHS_S0 | |
REMOVE_TEXT_LABEL QVHS_S1 | |
REMOVE_TEXT_LABEL QVHS_S2 | |
SET_PLAYER_CONTROL 0 TRUE | |
DISPLAY_HUD TRUE | |
DISPLAY_RADAR TRUE | |
RETURN | |
load_vehicle_names: | |
FREE_MEMORY vehicle_names | |
vehicle_names = 0 | |
READ_MEMORY ptr_gsVehicleModels 4 FALSE num_vehicles | |
IF num_vehicles > 0 | |
tempvar = 4 * num_vehicles | |
tempva2 = 8 * num_vehicles // max is ID65535 | |
tempvar = tempvar + tempva2 | |
ALLOCATE_MEMORY tempvar vehicle_names | |
vehicle_str_ids = 4 * num_vehicles | |
vehicle_str_ids += vehicle_names | |
counter = 0 | |
WHILE counter < num_vehicles | |
this_model_info = 0x308 * counter // sizeof CVehicleModelInfo | |
this_model_info += ptr_gsVehicleModels | |
this_model_info += 0x4 | |
// Store text label string | |
this_vehicle_name = 4 * counter | |
this_vehicle_name += vehicle_names | |
this_vehicle_label = this_model_info + 0x32 // +0x32 (->m_nGameName) | |
GET_TEXT_LABEL_STRING $this_vehicle_label tempvar | |
READ_MEMORY tempvar 1 FALSE tempva2 | |
IF tempva2 = 0 // test if empty string | |
tempvar = 0 | |
ENDIF | |
WRITE_MEMORY this_vehicle_name 4 tempvar FALSE | |
// Store vehicle id string | |
tempvar = 4 * num_vehicles | |
tempva2 = 8 * counter | |
this_vehicle_name = tempvar + tempva2 | |
this_vehicle_name += vehicle_names | |
CLEO_CALL get_id_from_model_info 0 this_model_info id | |
STRING_FORMAT this_vehicle_name "ID%d" id | |
++counter | |
ENDWHILE | |
ENDIF | |
RETURN | |
spawn_vehicle: | |
this_model_info = 0x308 * counter // sizeof CVehicleModelInfo | |
this_model_info += ptr_gsVehicleModels | |
this_model_info += 0x4 | |
CLEO_CALL get_id_from_model_info 0 this_model_info id | |
IF cfg_putincar = FALSE | |
SPAWN_VEHICLE_BY_CHEATING id | |
ELSE | |
REQUEST_MODEL id | |
LOAD_ALL_MODELS_NOW | |
GET_CHAR_COORDINATES scplayer x y z | |
GET_CHAR_HEADING scplayer a | |
CREATE_CAR id x y z car | |
SET_CAR_HEADING car a | |
WARP_CHAR_INTO_CAR scplayer car | |
IF cfg_speed > 0 | |
IF cfg_speed = 2 | |
SET_CAR_FORWARD_SPEED car 60.0 | |
ELSE | |
SET_CAR_FORWARD_SPEED car 23.0 | |
ENDIF | |
ENDIF | |
IF IS_CHAR_IN_FLYING_VEHICLE scplayer | |
AND cfg_flying = TRUE | |
GET_GROUND_Z_FOR_3D_COORD x y 9999.0 z | |
z = z + 100.0 | |
SET_CAR_COORDINATES car x y z | |
GET_OFFSET_FROM_CAR_IN_WORLD_COORDS car 0.0 200.0 0.0 fwd_x fwd_y fwd_z | |
WHILE NOT IS_LINE_OF_SIGHT_CLEAR x y z fwd_x fwd_y fwd_z TRUE FALSE FALSE FALSE FALSE | |
z = z + 100.0 | |
SET_CAR_COORDINATES car x y z | |
GET_OFFSET_FROM_CAR_IN_WORLD_COORDS car 0.0 200.0 0.0 fwd_x fwd_y fwd_z | |
ENDWHILE | |
SET_CAR_FORWARD_SPEED car 100.0 | |
SET_PLANE_UNDERCARRIAGE_UP car TRUE | |
PLANE_STARTS_IN_AIR car | |
ENDIF | |
MARK_CAR_AS_NO_LONGER_NEEDED car | |
MARK_MODEL_AS_NO_LONGER_NEEDED id | |
ENDIF | |
RETURN | |
} | |
{ | |
get_id_from_model_info: | |
LVAR_INT model_info | |
LVAR_INT id hash | |
hash = model_info + 0x4 // +0x4 (->m_dwKey) | |
READ_MEMORY hash 4 FALSE hash | |
GET_VAR_POINTER id id | |
CALL_FUNCTION 0x4C59B0 2 2 id hash // CModelInfo::GetModelInfoFromHashKey | |
CLEO_RETURN 0 id | |
} | |
SCRIPT_END |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment