Files
GTAConnectedDocs/Trident/MD_Contents/MDC_Vehicle_Garage_Pplayer.c
2026-01-28 21:32:26 +04:00

724 lines
29 KiB
C

/**
* @ MD EXTEND+
* @ Version MDv13 TRIDENT(Essentials Based)
* @ MADE BY - DEVILSDESIGN & IIV_NATHAN_VII & SHOCKixiXixiWAVE
*/
#pragma once
//extern void EXPLODE_CAR(Vehicle vehicle, boolean unknownTrue, boolean unknownFalse); //etter than spawnin an explosion
//ANCHOR_BOAT(Vehicle boat, boolean anchor); //NEED THIS!!!
//NEEDED! Seat swap: int value (NATHAN CAN RIG THIS PERFECT IF U LIKE IT)
void MD_VehOpt_Pplayer_Setup(void){
MENU_SUB_HEADER = "Vehicle Options";
NETWORK_FIRST_FOUR_ITEMS_MENU_SETUP();
Add_JumpOver("~BLIP_94~ V E H I C L E O P T I O N S ~BLIP_94~"); //5
AddSubMenu("Full Spawner ~PAD_RIGHT~"); //6
AddSubMenu("Garage ~y~(Addons & Colours) ~PAD_RIGHT~"); //7
AddSubMenu("Upgrades ~PAD_RIGHT~"); //8
AddFunction_Value("Quick Spawn",13); //9
AddFunction_Value("General",8); //10
AddFunction_Value("Spawn Settings", 8); //11
AddFunction_Value("Physics", 3); //12
AddFunction_Value("Stunt Modes", 5); //13
AddFunction_Value("Speed Settings",3); //14
AddFunction_Value("Auto-lock",3); //15
AddFunction_Value("Actions", 6); //16
AddFunction_Value("Forces",9); //17
AddFunction_Value("Heading",6); //18
AddFunction_Value("Transformer",6); //19
AddFunction_Value("Heli Weapon Type",3); //20
AddFunction_Value("Armed Vehicles",2); //21
/**Remember Strings and numvals**/
item_highlighted = 6;
menu_item[15].num_val = GetByteInSet(WeatherTimeAutoLockByteSet,VEHICLE_AUTOLOCK);
//menu_item[20].num_val == Vehicle_Weapon;
}
void MD_VehOpt_Pplayer_Action(void){
NETWORK_FIRST_FOUR_ITEMS_MENU_ACTION();
//Jumpover 5
//Sub Spawner 6
//Sub Addons 7
//Sub Upgrades 8
if(SelectedItem == 10 || SelectedItem == 11 || SelectedItem == 15 || SelectedItem == 16 || SelectedItem == 17 || SelectedItem == 18 || SelectedItem == 19 || SelectedItem == 20 || SelectedItem == 21 ){
if(!IS_CHAR_IN_ANY_CAR(pPlayer)){
Alert(Error_Personal_Vehicle,false);
return;
}
else GET_CAR_CHAR_IS_USING(pPlayer,&Personal_Vehicle);
}
if(SelectedItem == 9){//DONE
int Vehicle[14];
Vehicle[1] = MODEL_COMET;
Vehicle[2] = MODEL_TURISMO;
Vehicle[3] = MODEL_INFERNUS;
Vehicle[4] = MODEL_SUPERGT;
Vehicle[5] = MODEL_SULTANRS;
Vehicle[6] = MODEL_ORACLE;
Vehicle[7] = MODEL_PATRIOT;
Vehicle[8] = MODEL_FBI;
Vehicle[9] = MODEL_BUS;
Vehicle[10] = MODEL_SQUALO;
Vehicle[11] = MODEL_NRG900;
Vehicle[12] = MODEL_MAVERICK;
Vehicle[13] = MODEL_ANNIHILATOR;
MD_VEHICLE_SPAWNER_ON_ID(iPlayer,Vehicle[(menu_item[SelectedItem].num_val)]);
}
/**General**/
if(SelectedItem == 10){//DONE
if(menu_item[SelectedItem].num_val == 1){ // Fix & Wash
FIX_CAR(Personal_Vehicle);
SET_CAR_ENGINE_ON(Personal_Vehicle,true,true);
SET_CAR_PROOFS( Personal_Vehicle, 1, 1, 1, 1, 1 );
SET_VEHICLE_DIRT_LEVEL(Personal_Vehicle, 0);
}
else if(menu_item[SelectedItem].num_val == 2){ //Flip
float h;
GET_CAR_HEADING(Personal_Vehicle,&h);
SET_VEHICLE_QUATERNION(Personal_Vehicle,0,0,0,0);
SET_CAR_HEADING(Personal_Vehicle,h);
SET_CAR_ON_GROUND_PROPERLY(Personal_Vehicle);
}
else if(menu_item[SelectedItem].num_val == 3){
int i;
SET_CAN_BURST_CAR_TYRES(Personal_Vehicle,true);
for(i = 0; i < 8; i++)
{
if(IS_CAR_TYRE_BURST(Personal_Vehicle,i)) continue;
BURST_CAR_TYRE(Personal_Vehicle,i);
}
//Burst Tyres
}
else if(menu_item[SelectedItem].num_val == 4){ //Fix tyres --> This doesnt work well, for a bike only front wheel is fixed, same for vehicle, not all wheels get fixed
int num_tyres = 0;
int i;
for(i = 0; i < 8; i++)
{
if(IS_CAR_TYRE_BURST(Personal_Vehicle,i))
{
FIX_CAR_TYRE(Personal_Vehicle,i);
}
}
}
else if(menu_item[SelectedItem].num_val == 5){ // Okay..Works
SET_CHAR_VISIBLE(pPlayer,!IS_CHAR_VISIBLE(pPlayer));
}
else if(menu_item[SelectedItem].num_val == 6){ // Sets invisible, doesnt reverse it --> This needs work
if(IS_CHAR_VISIBLE(pPlayer)){
SET_CHAR_VISIBLE(pPlayer,false);
if(IS_CHAR_IN_ANY_CAR(pPlayer)){
GET_CAR_CHAR_IS_USING(pPlayer,&Personal_Vehicle);
SET_CAR_VISIBLE(Personal_Vehicle, false);
SetBit(VehicleOptionsBitSet, VEHICLE_OPTION_INVISIBLE,true);
}
}
else{
SET_CHAR_VISIBLE(pPlayer,true);
if(IS_CHAR_IN_ANY_CAR(pPlayer)){
GET_CAR_CHAR_IS_USING(pPlayer,&Personal_Vehicle);
SET_CAR_VISIBLE(Personal_Vehicle, true);
SetBit(VehicleOptionsBitSet, VEHICLE_OPTION_INVISIBLE,false);
}
}
}
else if(menu_item[SelectedItem].num_val == 7){ //Blips need work too. 2 things : Hide/show Blip Ped (ped alone) / or / Hide/show Blip Ped (+ vehicle visible/invisible)
if((GetBit(VehicleOptionsBitSet,VEHICLE_OPTION_REMOVE_BLIP) || GetBit(pPlayerOptionsBitSet,PLAYER_OPTION_REMOVE_BLIP))){
SetBit(VehicleOptionsBitSet,VEHICLE_OPTION_REMOVE_BLIP,false);
SetBit(pPlayerOptionsBitSet,PLAYER_OPTION_REMOVE_BLIP,false);
SET_CHAR_VISIBLE(pPlayer,true);
if(IS_CHAR_IN_ANY_CAR(pPlayer)){
GET_CAR_CHAR_IS_USING(pPlayer,&Personal_Vehicle);
SET_CAR_VISIBLE(Personal_Vehicle, true);
SetBit(VehicleOptionsBitSet, VEHICLE_OPTION_INVISIBLE,false);
SetBit(VehicleOptionsBitSet, VEHICLE_OPTION_DESOLIDIFY,false);
}
SET_PLAYER_CONTROL(iPlayer, true);
}
else{
SetBit(VehicleOptionsBitSet,VEHICLE_OPTION_REMOVE_BLIP,true);
SetBit(pPlayerOptionsBitSet,PLAYER_OPTION_REMOVE_BLIP,true);
}
}
else if(menu_item[SelectedItem].num_val == 8){
MD_Delete_Objects_On_Vehicle(iPlayer); //will only print if it deletes an object
DELETE_CAR(&Personal_Vehicle);
}
}
/**Active Spawn Settings**/
else if(SelectedItem == 11){ //DONE
if(menu_item[SelectedItem].num_val == 1){
ToggleBit(VehicleOptionsBitSet,VEHICLE_OPTION_ALL_UPGRADES);
int i;
for(i=0;i<10;i++)TURN_OFF_VEHICLE_EXTRA(Personal_Vehicle, i, !GetBit(VehicleOptionsBitSet,VEHICLE_OPTION_ALL_UPGRADES));
}
else if(menu_item[SelectedItem].num_val == 2){
ToggleBit(VehicleOptionsBitSet, VEHICLE_OPTION_INVINCIBLE);
/* //This is looped buddy..
SET_CAR_CAN_BE_DAMAGED(Personal_Vehicle,!GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_INVINCIBLE));
SET_CAR_CAN_BE_VISIBLY_DAMAGED(Personal_Vehicle,!GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_INVINCIBLE));
SET_CAN_BURST_CAR_TYRES(Personal_Vehicle,!GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_INVINCIBLE));
*/
if(GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_INVINCIBLE)){
FIX_CAR(Personal_Vehicle);
SET_CAR_ENGINE_ON(Personal_Vehicle,true,true);
SET_VEHICLE_DIRT_LEVEL(Personal_Vehicle, 0);
}
}
else if(menu_item[SelectedItem].num_val == 3){
ToggleBit(VehicleOptionsBitSet, VEHICLE_OPTION_SIREN);
SWITCH_CAR_SIREN(Personal_Vehicle,GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_SIREN));
}
else if(menu_item[SelectedItem].num_val == 4)ToggleBit(VehicleOptionsBitSet,VEHICLE_OPTION_RAINBOW);
else if(menu_item[SelectedItem].num_val == 5){
ToggleBit(VehicleOptionsBitSet,VEHICLE_OPTION_ENGINE);
SET_CAR_ENGINE_ON(Personal_Vehicle,GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_ENGINE),GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_ENGINE));
}
else if(menu_item[SelectedItem].num_val == 6){
Coloursetting_Personal = !Coloursetting_Personal;
if(Coloursetting_Personal )Alert("~b~MD: ~y~Personal Vehicle: ~s~This will enable saved colors on next spawns!",false);
else Alert("~b~MD: ~y~Personal Vehicle: ~s~Random colours will be used next spawns!",false);
}
else if(menu_item[SelectedItem].num_val == 7){
Coloursetting_Net = !Coloursetting_Net;
if(Coloursetting_Net )Alert("~b~MD: ~y~Net Vehicles: ~s~This will enable saved colors on next spawns!",false);
else Alert("~b~MD: ~y~Net Vehicles: ~s~Random colours will be used next spawns!",false);
}
else if(menu_item[SelectedItem].num_val == 8){
Coloursetting_Net = false;
Coloursetting_Personal = false;
Alert("~b~MD: ~y~Use of saved colours disabled.~n~~s~Random colours will be used next spawns!",false);
}
}
/**Physics**/
else if(SelectedItem == 12){//DONE
if(menu_item[SelectedItem].num_val == 1)TOGGLE_DRIVE_WALK_WATER_FOR_PLAYER(iPlayer);
else if(menu_item[SelectedItem].num_val == 2){
ToggleBit(VehicleOptionsBitSet, VEHICLE_OPTION_DESOLIDIFY);
Alert_Two("~b~MD: ~s~Desolidified vehicle", GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_DESOLIDIFY) ? PrintON : PrintOFF ,false);
//if(GetBit(VehicleOptionsBitSet, !VEHICLE_OPTION_DESOLIDIFY))SET_CAR_COLLISION(Personal_Vehicle,true); // This fixes the issue //can't see it would buddy, you have !number here.. wtf?
if(!GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_DESOLIDIFY)) SET_CAR_COLLISION(Personal_Vehicle,true);
}
else if(menu_item[SelectedItem].num_val == 3)ToggleBit(VehicleOptionsBitSet, VEHICLE_OPTION_AUTO_BOAT);
}
/**Handling**/
else if(SelectedItem == 13){//DONE
if(menu_item[SelectedItem].num_val == 1)ToggleBit(VehicleOptionsBitSet, VEHICLE_OPTION_JUMP);
else if(menu_item[SelectedItem].num_val == 2)ToggleBit(VehicleOptionsBitSet, VEHICLE_OPTION_DRIFT);
else if(menu_item[SelectedItem].num_val == 3)ToggleBit(VehicleOptionsBitSet, VEHICLE_OPTION_LOWER);
else if(menu_item[SelectedItem].num_val == 4)ToggleBit(VehicleOptionsBitSet, VEHICLE_OPTION_STICK_GROUND);
else if(menu_item[SelectedItem].num_val == 5)ToggleBit(VehicleOptionsBitSet, VEHICLE_OPTION_SUPER_BIKE);
}
/**Speed settings**/
else if(SelectedItem == 14){//DONE
if(menu_item[SelectedItem].num_val == 1){
SetBit(VehicleOptionsBitSet, VEHICLE_OPTION_NORMAL_SPEED, true);
SetBit(VehicleOptionsBitSet, VEHICLE_OPTION_SUPER_SPEED,false);
SetBit(VehicleOptionsBitSet, VEHICLE_OPTION_TURBO_SPEED,false);
}
else if(menu_item[SelectedItem].num_val == 2){
ToggleBit(VehicleOptionsBitSet, VEHICLE_OPTION_TURBO_SPEED);
SetBit(VehicleOptionsBitSet, VEHICLE_OPTION_SUPER_SPEED,false);
SetBit(VehicleOptionsBitSet, VEHICLE_OPTION_NORMAL_SPEED,false);//Just used to highlight
}
else if(menu_item[SelectedItem].num_val == 3){
ToggleBit(VehicleOptionsBitSet, VEHICLE_OPTION_SUPER_SPEED);
SetBit(VehicleOptionsBitSet, VEHICLE_OPTION_TURBO_SPEED,false);
SetBit(VehicleOptionsBitSet, VEHICLE_OPTION_NORMAL_SPEED,false);//Just used to highlight
}
}
else if(SelectedItem == 15){//Lock modes, should contain all lock modes
//Add as item 1 : SET_VEHICLE_LOCKED_WITHOUT_NET_CONTROL_REQUEST(Personal_Vehicle, !IS_CHARS_VEHICLE_LOCKED(PLAYER_CHAR(iPlayer)));
#ifndef Premium
if(menu_item[SelectedItem].num_val == 2){//Unlock for friends
Alert(PREMIUM_ONLY_STRING,true);
return;
}
#endif
SetByteSet(&WeatherTimeAutoLockByteSet, VEHICLE_AUTOLOCK, menu_item[SelectedItem].num_val);
}
/**Actions**/
else if(SelectedItem == 16){ //Actions
if(menu_item[SelectedItem].num_val == 1 && DOES_VEHICLE_EXIST(Personal_Vehicle)){
float x,y,z,h;
GET_OFFSET_FROM_CHAR_IN_WORLD_COORDS(pPlayer,1.5f,5.0f,0.0f,&x,&y,&z);
GET_CHAR_HEADING(pPlayer,&h);
h += 50.0f; //drivers seat facing you, open le door //maybe put like, -= 70.0f
int car_clone;
Clone_Car(Personal_Vehicle, x, y, z, h, &car_clone); //GetPlayerVeh() == works
OPEN_CAR_DOOR(car_clone, 0);
}
else if(menu_item[SelectedItem].num_val == 2)FREEZE_CAR_POSITION(Personal_Vehicle,true);
else if(menu_item[SelectedItem].num_val == 3)FREEZE_CAR_POSITION(Personal_Vehicle,false);
else if(menu_item[SelectedItem].num_val == 4){
int z;
for(z = 0; z < 4; z++){
BREAK_CAR_DOOR(Personal_Vehicle,z,true);
BURST_CAR_TYRE(Personal_Vehicle,z);
REMOVE_CAR_WINDOW(Personal_Vehicle,z);
}
START_CAR_FIRE(Personal_Vehicle);
SET_ENGINE_HEALTH(Personal_Vehicle,-5);
SET_CAR_ENGINE_ON(Personal_Vehicle,false,false);
}
else if(menu_item[SelectedItem].num_val == 5){
Shuffle_Vehicle_Seat();
}
else if(menu_item[SelectedItem].num_val == 6){
REMOVE_CHAR_FROM_CAR_MAINTAIN_POSITION(pPlayer,Personal_Vehicle);
}
}
/**Forces**/
else if(SelectedItem == 17){ //DONE
if(menu_item[SelectedItem].num_val == 1)APPLY_FORCE_TO_CAR(Personal_Vehicle,3,0,0,1000,0,0,0,0, 1, 1, 1);
else if(menu_item[SelectedItem].num_val == 2)APPLY_FORCE_TO_CAR(Personal_Vehicle,3,0,0,-1000,0,0,0,0, 1, 1, 1);
else if(menu_item[SelectedItem].num_val == 3)APPLY_FORCE_TO_CAR(Personal_Vehicle,3,-60,0,0,0,-60,0,0, 1, 1, 1);
else if(menu_item[SelectedItem].num_val == 4)APPLY_FORCE_TO_CAR(Personal_Vehicle,3,60,0,0,0,-60,0,0, 1, 1, 1);
else if(menu_item[SelectedItem].num_val == 5)APPLY_FORCE_TO_CAR(Personal_Vehicle,3,0,60,10.0,0,0,-10.0,0, 1, 1, 1);
else if(menu_item[SelectedItem].num_val == 6)APPLY_FORCE_TO_CAR(Personal_Vehicle,3,0,-60,10.0,0,0,-10.0,0, 1, 1, 1);
else if(menu_item[SelectedItem].num_val == 7){
ToggleBit(VehicleOptionsBitSet, VEHICLE_OPTION_FREEZE_POS );
FREEZE_CAR_POSITION(Personal_Vehicle,GetBit(VehicleOptionsBitSet,VEHICLE_OPTION_FREEZE_POS));
}
else if(menu_item[SelectedItem].num_val == 8){
int z;
for(z = 0; z < 4; z++){
BREAK_CAR_DOOR(Personal_Vehicle,z,true);
BURST_CAR_TYRE(Personal_Vehicle,z);
REMOVE_CAR_WINDOW(Personal_Vehicle,z);
}
START_CAR_FIRE(Personal_Vehicle);
SET_ENGINE_HEALTH(Personal_Vehicle,-5);
SET_CAR_ENGINE_ON(Personal_Vehicle,false,false);
}
else if(menu_item[SelectedItem].num_val == 9){
FIX_CAR(Personal_Vehicle);
SET_CAR_ENGINE_ON(Personal_Vehicle,true,true);
SET_VEHICLE_DIRT_LEVEL(Personal_Vehicle, 0);
}
}
/**Heading**/
else if(SelectedItem == 18){
float Vehicle_Heading_Change,speed;
if(menu_item[SelectedItem].num_val > 0 || menu_item[SelectedItem].num_val < 6){
GET_CAR_SPEED(Personal_Vehicle,&speed);
GET_CAR_HEADING(Personal_Vehicle,&Vehicle_Heading_Change);
}
if(menu_item[SelectedItem].num_val == 1)SET_CAR_FORWARD_SPEED(Personal_Vehicle,speed*3);
if(menu_item[SelectedItem].num_val == 2){
SET_CAR_HEADING(Personal_Vehicle,Vehicle_Heading_Change-180);
SET_CAR_FORWARD_SPEED(Personal_Vehicle,speed*3);
}
if(menu_item[SelectedItem].num_val == 3){
SET_CAR_HEADING(Personal_Vehicle,Vehicle_Heading_Change - 180);
SET_CAR_FORWARD_SPEED(Personal_Vehicle,speed);
}
if(menu_item[SelectedItem].num_val == 4){
SET_CAR_HEADING(Personal_Vehicle,Vehicle_Heading_Change + 90.00f);
SET_CAR_FORWARD_SPEED(Personal_Vehicle,speed);
}
if(menu_item[SelectedItem].num_val == 5){
SET_CAR_HEADING(Personal_Vehicle,Vehicle_Heading_Change - 90.00f);
SET_CAR_FORWARD_SPEED(Personal_Vehicle,speed);
}
if(menu_item[SelectedItem].num_val == 6){
ToggleBit(VehicleOptionsBitSet, VEHICLE_OPTION_ROTATE);
}
}
/**Vehicle Transformer**/
else if(SelectedItem == 19) //Bracket doesn't go here
{ //Bracket being here makes it much easier to read
if(menu_item[SelectedItem].num_val == 1) //Bracket doesn't go here
{
Vehicle_Transformer(iPlayer, 1);
}
else if(menu_item[SelectedItem].num_val == 2) //Bracket doesn't go here
{
Vehicle_Transformer(iPlayer, 2);
}
else if(menu_item[SelectedItem].num_val == 3) //Bracket doesn't go here
{
Vehicle_Transformer(iPlayer, 3);
}
else if(menu_item[SelectedItem].num_val == 4) //Bracket doesn't go here
{
turn_car_into_heli(Personal_Vehicle);
}
else if(menu_item[SelectedItem].num_val == 5){
delete_transformers_on_vehicle(Personal_Vehicle);
SET_CHAR_VISIBLE(pPlayer,true);
SetBit(VehicleOptionsBitSet, !VEHICLE_OPTION_INVISIBLE,false);
SET_CAR_VISIBLE(Personal_Vehicle,true);
}
else if(menu_item[SelectedItem].num_val == 6){
delete_transformers_on_vehicle(Personal_Vehicle);
SET_CHAR_VISIBLE(pPlayer,true);
SetBit(VehicleOptionsBitSet, !VEHICLE_OPTION_INVISIBLE,false);
if(IS_CHAR_IN_ANY_CAR(pPlayer))DELETE_CAR(&Personal_Vehicle);
}
}
else if(SelectedItem == 20)
{
if(menu_item[SelectedItem].num_val == 1)
{
Vehicle_Weapon = WEAPON_RLAUNCHER;
int Pednr;
for(Pednr = 0; Pednr < 4; Pednr++)
{
if(!DOES_CHAR_EXIST(WeaponVeh_ped[Pednr])) continue;
UpdateWeaponOfPed(WeaponVeh_ped[Pednr], Vehicle_Weapon);
SET_CURRENT_CHAR_WEAPON(WeaponVeh_ped[Pednr], Vehicle_Weapon, true);
WAIT(30);
}
Alert("~b~MD: ~s~Heli Weapon updated",false);
}
else if(menu_item[SelectedItem].num_val == 2)
{
Vehicle_Weapon = WEAPON_M4;
int Pednr;
for(Pednr = 0; Pednr < 4; Pednr++)
{
if(!DOES_CHAR_EXIST(WeaponVeh_ped[Pednr])) continue;
UpdateWeaponOfPed(WeaponVeh_ped[Pednr], Vehicle_Weapon);
SET_CURRENT_CHAR_WEAPON(WeaponVeh_ped[Pednr], Vehicle_Weapon, true);
WAIT(30);
}
Alert("~b~MD: ~s~Heli Weapon updated",false);
}
else if(menu_item[SelectedItem].num_val == 3)
{
Vehicle_Weapon = WEAPON_SNIPERRIFLE;
int Pednr;
for(Pednr = 0; Pednr < 4; Pednr++)
{
if(!DOES_CHAR_EXIST(WeaponVeh_ped[Pednr])) continue;
UpdateWeaponOfPed(WeaponVeh_ped[Pednr], Vehicle_Weapon);
SET_CURRENT_CHAR_WEAPON(WeaponVeh_ped[Pednr], Vehicle_Weapon, true);
WAIT(30);
}
Alert("~b~MD: ~s~Heli Weapon updated",false);
}
}
/**Vehicle Weapons**/
else if(SelectedItem == 21){
if(menu_item[SelectedItem].num_val == 1){
MD_Weapon_Vehicle = !MD_Weapon_Vehicle;
}
else if(menu_item[SelectedItem].num_val == 2)
{
/*
if(!GetBit(MD_Misc_OptionsBitSet, MD_MISC_NATHANS_RAPID_FIRE_HELI))
{
SetBit(MD_Misc_OptionsBitSet, MD_MISC_NATHANS_RAPID_FIRE_HELI, true);
}
else
{
SetBit(MD_Misc_OptionsBitSet, MD_MISC_NATHANS_RAPID_FIRE_HELI, false);
int i;
for(i = 0; i < 4; i++)
{
if(DOES_CHAR_EXIST(Nathans_RapidHeli_Peds[i])) DELETE_CHAR(&Nathans_RapidHeli_Peds[i]);
}
}
*/
#ifdef Premium
Devils_Rapid_Fire_Heli = !Devils_Rapid_Fire_Heli;
if(Devils_Rapid_Fire_Heli)Vehicle_Weapon = WEAPON_SNIPERRIFLE;
else
{
int i;
for(i = 0; i < 4; i++)
{
if(DOES_CHAR_EXIST(WeaponVeh_ped[i])) DELETE_CHAR(&WeaponVeh_ped[i]);
}
}
#else
Alert("Premium only nigga!",false);
#endif
}
}
}
void MC_Vehicle_Loop_pPlayer(void){
/**Devils Mean Machines**/
Weapon_Vehicle();
#ifdef Premium
Rapid_Fire_Heli();
#endif
/***********************/
if(IS_CHAR_IN_ANY_CAR(pPlayer)) {
/*
if(GetBit(MD_Misc_OptionsBitSet, MD_MISC_NATHANS_RAPID_FIRE_HELI))
{
Nathans_Rapid_Fire_Heli();
/*
if(Nathans_RapidHeli_Tick < GetTickCount())
{
Nathans_RapidHeli_Tick = (GetTickCount() + 200);
Nathans_Rapid_Fire_Heli();
}
}
*/
int driver;
GET_CAR_CHAR_IS_USING(pPlayer,&Personal_Vehicle);
GET_DRIVER_OF_CAR(Personal_Vehicle,&driver);
if(driver == pPlayer){
bool in_heli = IS_CHAR_IN_ANY_HELI(pPlayer);
float mx,my,mz,mh;
int model;
GET_CAR_MODEL(Personal_Vehicle,&model);
GET_CHAR_COORDINATES_HEADING(pPlayer,&mx,&my,&mz,&mh);
/**Active Spawnsettings**/
if(GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_STICK_GROUND))SET_CAR_ON_GROUND_PROPERLY(Personal_Vehicle);
SET_CAR_ENGINE_ON(Personal_Vehicle,GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_ENGINE),GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_ENGINE));
SET_CHAR_WILL_FLY_THROUGH_WINDSCREEN(pPlayer, !GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_INVINCIBLE));
SET_CAR_CAN_BE_DAMAGED(Personal_Vehicle, !GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_INVINCIBLE));
SET_CAR_CAN_BE_VISIBLY_DAMAGED(Personal_Vehicle, !GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_INVINCIBLE));
SET_CAN_BURST_CAR_TYRES(Personal_Vehicle, !GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_INVINCIBLE));
SET_CAR_WATERTIGHT(Personal_Vehicle, GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_INVINCIBLE));
//SET_CAR_VISIBLE(Personal_Vehicle, !GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_INVISIBLE));
bool L_WAS_PRESSED = IS_BUTTON_JUST_PRESSED(0,BUTTON_L);
bool R_IS_PRESSED = IS_BUTTON_PRESSED(0,BUTTON_R);
bool L_IS_PRESSED = IS_BUTTON_PRESSED(0,BUTTON_L);
float speed;
GET_CAR_SPEED(Personal_Vehicle,&speed);
/**Super Speed**/
if(GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_SUPER_SPEED)){
if(L_WAS_PRESSED || R_IS_PRESSED)SET_CAR_FORWARD_SPEED(Personal_Vehicle, ( L_WAS_PRESSED ? (speed / 6) : (speed * 1.02)) );
}
/**Turbo Speed**/
if(GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_TURBO_SPEED)){
if(L_WAS_PRESSED || R_IS_PRESSED)SET_CAR_FORWARD_SPEED(Personal_Vehicle, ( L_WAS_PRESSED ? (speed / 3) : (speed * 1.0001)) );
}
/**Super Bike**/
bool on_bike = IS_CHAR_ON_ANY_BIKE(pPlayer);
if(GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_SUPER_BIKE) && on_bike){
if(R_IS_PRESSED || L_IS_PRESSED)SET_CAR_FORWARD_SPEED(Personal_Vehicle, (R_IS_PRESSED ? (speed * 1.01) : (speed / 3)) );
}
/**Spawn Boat in water**///Freezes
bool in_boat = IS_CHAR_IN_ANY_BOAT(pPlayer);
if(GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_AUTO_BOAT) && !in_boat){
if(IS_CAR_IN_WATER(Personal_Vehicle))MD_VEHICLE_SPAWNER_ON_ID(iPlayer ,MODEL_SQUALO);
}
/**Vehicle Desolidify**/
if(GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_DESOLIDIFY))
{
//if(!Devils_Rapid_Fire_Heli) //i think this what you need buddy??
SET_CAR_COLLISION(Personal_Vehicle,false);
if(!in_heli) SET_CAR_ON_GROUND_PROPERLY(Personal_Vehicle);
}
/*
else if(!Devils_Rapid_Fire_Heli)
{
SET_CAR_COLLISION(Personal_Vehicle,true); //LOOOOOPED, BAD!
}
*/
/**Vehicle Jump**/
bool vehicle_upright = IS_CAR_UPRIGHT(Personal_Vehicle);
if(GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_JUMP)){ //We need to display a helper for the 2 modes
if(IS_BUTTON_PRESSED(0,BUTTON_X)){
if(in_boat && !in_heli){
if(IS_VEHICLE_ON_ALL_WHEELS(Personal_Vehicle)){
if(on_bike) APPLY_FORCE_TO_CAR(Personal_Vehicle, 0, 0, 0, 510.0 , 0,0,0, 0, 1, 1, 1 );
else APPLY_FORCE_TO_CAR(Personal_Vehicle, 0, 0, 0, 70.0 , 0,0,-70.0, 0, 1, 1, 1 );
}
}
}
else if(IS_BUTTON_PRESSED(0,BUTTON_A))APPLY_FORCE_TO_CAR(Personal_Vehicle, 0, 0, 0, 80, 0, 0, -80, 0, 1, 1, 1);
}
/**Stunt modes**/
if(!in_boat && !in_heli && !on_bike && vehicle_upright){
if(GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_LOWER))
APPLY_FORCE_TO_CAR(Personal_Vehicle,true,0.0,0,-0.2,0.0,0.0,0.0,true,true,true,true);
if(GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_DRIFT))
APPLY_FORCE_TO_CAR(Personal_Vehicle,true,0.0,0,0.13,0.0,0.0,0.0,true,true,true,true);
}
/**Rainbow Vehicle**/
if(GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_RAINBOW)){
int i, col[4];
for(i = 0; i < 4; i++)GENERATE_RANDOM_INT_IN_RANGE(0,133,&col[i]);
CHANGE_CAR_COLOUR(Personal_Vehicle, col[0], col[1]);
SET_EXTRA_CAR_COLOURS(Personal_Vehicle, col[2], col[3]);
}
/**Rotate Vehicle**/
if(GetBit(VehicleOptionsBitSet, VEHICLE_OPTION_ROTATE)){
float h;
GET_CAR_HEADING(Personal_Vehicle,&h);
SET_CAR_HEADING(Personal_Vehicle, (h - 10));
}
/**Lock Modes**/
const int Veh_Autolock = GetByteInSet(WeatherTimeAutoLockByteSet, VEHICLE_AUTOLOCK);
if(Veh_Autolock > 0 && Veh_Autolock < 3) //ON / ON + Unlock for friends
{
#ifdef Premium
if(Veh_Autolock == 2 && speed < 4 && In_Network) //Unlock for friends
{
float check_for_others_distance;
float friend_wants_to_enter_distance;
if(on_bike || IS_THIS_MODEL_A_CAR(model)){
check_for_others_distance = 4.0f;
friend_wants_to_enter_distance = 3.0f;
}
int i,tmp_ped,friends_player_index;
float nx,ny,nz;
bool friend_wants_to_enter_veh = false;
bool can_unlock_for_friend = true;
for(i = 0; i < MAX_PLAYERS; i++)
{
// if(Invalid_Player(i) || !PLAYER_HAS_CHAR(i) || IS_CHAR_IN_CAR(PLAYER_CHAR(i),Personal_Vehicle)) continue; //possibly need if i == iPlayer continue, don't think so though
if(Invalid_Player(i) || !PLAYER_HAS_CHAR(i) || !IS_CHAR_ON_FOOT(PLAYER_CHAR(i))) continue;
//if(!NETWORK_PLAYER_IS_ON_FRIENDS_LIST(i)) continue; //causes frez, probably ran too often/much at once
GET_CHAR_COORDINATES(PLAYER_CHAR(i),&nx,&ny,&nz);
float distance_from_me;
GET_DISTANCE_BETWEEN_COORDS_3D(mx,my,mz,nx,ny,nz,&distance_from_me);
if(distance_from_me < friend_wants_to_enter_distance)
{
if(NETWORK_PLAYER_IS_ON_FRIENDS_LIST(i) || (Is_Developer(i) && i != iPlayer)) //unlock for devs :P //unlocked for seld without iplayer check so hmm..
{
friend_wants_to_enter_veh = true;
friends_player_index = i;
break;
}
}
}
int to_lock_vehicle = false;
if(friend_wants_to_enter_veh)
{
for(i = 0; i < MAX_PLAYERS; i++)
{
if(Invalid_Player(i)) continue; //i == iPlayer important here //using IS_CHAR_IN_CAR instead..
GET_PLAYER_CHAR(i,&tmp_ped);
//if(!DOES_CHAR_EXIST(tmp_ped) || IS_CHAR_IN_CAR(tmp_ped,Personal_Vehicle)) continue; //just safety
if(!DOES_CHAR_EXIST(tmp_ped) || !IS_CHAR_ON_FOOT(tmp_ped)) continue;
GET_CHAR_COORDINATES(tmp_ped,&nx,&ny,&nz);
float distance_from_me;
GET_DISTANCE_BETWEEN_COORDS_3D(mx,my,mz,nx,ny,nz,&distance_from_me);
if(distance_from_me < check_for_others_distance && !NETWORK_PLAYER_IS_ON_FRIENDS_LIST(i))
{
can_unlock_for_friend = false;
}
}
if(can_unlock_for_friend && IS_CHARS_VEHICLE_LOCKED(pPlayer) && VEHICLE_HAS_EMPTY_SEATS(Personal_Vehicle))
{
char* buffer[32];
Strcpy(buffer, "~b~MD: ~s~Your ");
Strcat(buffer, GET_STRING_FROM_TEXT_FILE(GET_DISPLAY_NAME_FROM_VEHICLE_MODEL(model)));
Strcat(buffer, " was unlocked for ~COL_NET_");
itoa( (friends_player_index + 1), buffer);
Strcat(buffer, "~");
Strcat(buffer, GET_PLAYER_NAME(friends_player_index));
Strcat(buffer, "~s~.");
Alert(buffer, false);
SET_VEHICLE_LOCKED_WITHOUT_NET_CONTROL_REQUEST(Personal_Vehicle, false);
}
else if(!IS_CHARS_VEHICLE_LOCKED(pPlayer))
{
int z;
if(on_bike || IS_THIS_MODEL_A_CAR(model))
{
if(!can_unlock_for_friend || !IS_CAR_PASSENGER_SEAT_FREE(Personal_Vehicle, 0)) //bikes passenger seat
{
to_lock_vehicle = true;
}
}
}
}
else //if friend doesn't want to enter veh
{
if(!IS_CHARS_VEHICLE_LOCKED(pPlayer))
{
to_lock_vehicle = true;
}
}
if(to_lock_vehicle && exitingCarAutoLockTick < GetTickCount())
{
SET_VEHICLE_LOCKED_WITHOUT_NET_CONTROL_REQUEST(Personal_Vehicle, VEHICLE_DOOR_LOCKED_FROM_OUTSIDE);
char * buffer[16];
Strcpy(buffer, "~b~MD: ~s~Your "); //12
Strcat(buffer, GET_STRING_FROM_TEXT_FILE(GET_DISPLAY_NAME_FROM_VEHICLE_MODEL(model))); //13 to be safe
Strcat(buffer, " was auto-locked."); //17
Alert(buffer, false);
exitingCarAutoLockTick = 0;
}
else if(IS_BUTTON_JUST_PRESSED(0,BUTTON_Y)) //need exitingCarAutoLockTick;
{
exitingCarAutoLockTick = (GetTickCount() + 2500);
SET_VEHICLE_LOCKED_WITHOUT_NET_CONTROL_REQUEST(Personal_Vehicle, false);
TASK_LEAVE_CAR(pPlayer, Personal_Vehicle);
char * buffer[16];
Strcpy(buffer, "~b~MD: ~s~Your "); //12
Strcat(buffer, GET_STRING_FROM_TEXT_FILE(GET_DISPLAY_NAME_FROM_VEHICLE_MODEL(model))); //13 to be safe
Strcat(buffer, " was un-locked."); //17
Alert(buffer, false);
//REMOVE_CHAR_FROM_CAR_MAINTAIN_POSITION(pPlayer,Personal_Vehicle); //TEST THIS! - Nathan --> this works!
Alert(buffer,false);
}
}
#endif
#ifdef Premium
else if(Veh_Autolock == 1) //On
#else
if(Veh_Autolock == 1)
#endif
{
if(!IS_CHARS_VEHICLE_LOCKED(pPlayer) && exitingCarAutoLockTick < GetTickCount())
{
SET_VEHICLE_LOCKED_WITHOUT_NET_CONTROL_REQUEST(Personal_Vehicle, true);
char * buffer[16];
Strcpy(buffer, "~b~MD: ~s~Your "); //12
Strcat(buffer, GET_STRING_FROM_TEXT_FILE(GET_DISPLAY_NAME_FROM_VEHICLE_MODEL(model))); //13 to be safe
Strcat(buffer, " was auto-locked."); //17
Alert(buffer, false);
exitingCarAutoLockTick = 0;
}
else if(IS_BUTTON_JUST_PRESSED(0,BUTTON_Y))
{
exitingCarAutoLockTick = (GetTickCount() + 2500);
SET_VEHICLE_LOCKED_WITHOUT_NET_CONTROL_REQUEST(Personal_Vehicle, false);
TASK_LEAVE_CAR(pPlayer, Personal_Vehicle);
char * buffer[16];
Strcpy(buffer, "~b~MD: ~s~Your "); //12
Strcat(buffer, GET_STRING_FROM_TEXT_FILE(GET_DISPLAY_NAME_FROM_VEHICLE_MODEL(model))); //13 to be safe
Strcat(buffer, " was un-locked."); //17
Alert(buffer, false);
//REMOVE_CHAR_FROM_CAR_MAINTAIN_POSITION(pPlayer,Personal_Vehicle); //TEST THIS! - Nathan --> this works!
Alert(buffer,false);
}
}
/*
if(Item_NumValue == 12) //Auto-lock vehicle
char* autolockstring[4];
autolockstring[0] = "< ERROR >";
autolockstring[1] = "< On >";
autolockstring[2] = "< On + Unlock for friends >";
autolockstring[3] = "< Off >";
int Veh_Autolock = 3; //this is in vars, 3 = disabled
*/
}
}
}
else
{
if(DOES_VEHICLE_EXIST(Personal_Vehicle))
{
Personal_Vehicle = 0; //no longer exists so code won't run (DOES_VEHICLE_EXIST
}
}
}