/** * @ MD Trident * @ MD Series: Version 13, January 2017 //#ifdef Premium IS USED HERE! * @ Copyright (C) 2017 IIV NATHAN VII / DEVILSDESIGN */ //#ifdef Premium IS USED HERE! ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Created by IIV NATHAN VII // IF ISSUES ARISE because of button priorities or something (shouldn't do) LET ME KNOW! (Nathan) I should be able to sort it! //Controls currently at line: 205! //COPY_ANIMATIONS(Ped ped, Ped pednext, float speed); //Put ped in water and copy anims.. SwimWalk? //#include //#include //#include //#include //#include //PUT THESE FUNCTIONS IN SHARED! /* void Shuffle_Vehicle_Seat(void) //WORKS ON BIKES TOO! { int tmp_veh; if(!IS_CHAR_IN_ANY_CAR(pPlayer)) return; GET_CAR_CHAR_IS_USING(pPlayer,&tmp_veh); if(IS_CHAR_ON_ANY_BIKE(pPlayer)) { int driver; GET_DRIVER_OF_CAR(tmp_veh,&driver); if(!DOES_CHAR_EXIST(driver)) WARP_CHAR_INTO_CAR(pPlayer,tmp_veh); else if(driver == pPlayer && IS_CAR_PASSENGER_SEAT_FREE(tmp_veh,0)) WARP_CHAR_INTO_CAR_AS_PASSENGER(pPlayer,tmp_veh,0); } TASK_SHUFFLE_TO_NEXT_CAR_SEAT(pPlayer,tmp_veh); } void Clone_Car( int cveh, float x, float y, float z, float h, int *car_clone) { int model; if(!DOES_VEHICLE_EXIST(cveh)) return; int colour1,colour2,colourEXT1,colourEXT2; int health; float dirt_level; GET_CAR_MODEL(cveh,&model); GET_CAR_COLOURS(cveh, &colour1, &colour2); GET_EXTRA_CAR_COLOURS(cveh, &colourEXT1, &colourEXT2); GET_CAR_HEALTH(cveh, &health); GET_VEHICLE_DIRT_LEVEL(cveh, &dirt_level); bool siren = IS_CAR_SIREN_ON(cveh); //////////////// CREATE_CAR(model,x,y,z,&cveh,true); SET_VEHICLE_ALPHA(cveh,0); //should make vehicle transparent and appear slowly... SET_CAR_HEADING(cveh,h); SET_CAR_ON_GROUND_PROPERLY(cveh); SET_CAR_HEALTH(cveh,health); CHANGE_CAR_COLOUR(cveh,colour1,colour2); SET_EXTRA_CAR_COLOURS(cveh,colourEXT1,colourEXT2); SET_VEHICLE_DIRT_LEVEL(cveh,dirt_level); //can adjust dirt level and health based on vehicle helper being on.. SWITCH_CAR_SIREN(cveh,siren); //If Vehicle helper looped (we can do this on tick delay!) //SET_CAR_CAN_BE_DAMAGED(cveh,!vehicle_helper); //SET_CAR_CAN_BE_VISIBLY_DAMAGED(cveh,!vehicle_helper); //if doesn't work use SET_CAR_PROOFS(cveh,bool bulletproof, bool fireproof, bool explosionproof, bool colissionproof, bool meleeproof); car_clone = cveh; } */ #ifdef Premium //This is for the enum and loop voids enum eKeyboardAntiPauseActions{ ACTION_COMPLETE_AND_DISABLED = 0, ACTION_NETWORK_SPY_PLAYER = 1, ACTION_NETWORK_MUTE_PLAYER = 2, ACTION_NETWORK_KICK_PLAYER = 3, ACTION_NETWORK_VIEW_PLAYER_PROFILE = 4, }; void VerifyKeyboardSelectedNetworkIndex(void) { register int i; if(Player_Display_Selection(KeyboardSelectedPlayerIndex)) //Skips developers :P { for(i = 0; i < MAX_PLAYERS; i++) { if(Player_Display_Selection(i)) continue; KeyboardSelectedPlayerIndex = i; return; } } } void MC_Keyboard_Network_Anti_Wait_Loop(void) { if(KeyboardAntiWaitAction == ACTION_COMPLETE_AND_DISABLED) return; VerifyKeyboardSelectedNetworkIndex(); if(IS_GAME_KEYBOARD_KEY_JUST_PRESSED(KEY_ESC)) { KeyboardAntiWaitAction = ACTION_COMPLETE_AND_DISABLED; CLEAR_PRINTS(); return; } else if(IS_GAME_KEYBOARD_KEY_JUST_PRESSED(KEY_RIGHT_ARROW)) { KeyboardSelectedPlayerIndex++; if(Player_Display_Selection(KeyboardSelectedPlayerIndex)) { register int i; for(i = KeyboardSelectedPlayerIndex; i < MAX_PLAYERS; i++) { if(Player_Display_Selection(i)) continue; KeyboardSelectedPlayerIndex = i; break; } if(Player_Display_Selection(KeyboardSelectedPlayerIndex)) //unable to increase { VerifyKeyboardSelectedNetworkIndex(); //will re-scan } } } else if(IS_GAME_KEYBOARD_KEY_JUST_PRESSED(KEY_LEFT_ARROW)) { KeyboardSelectedPlayerIndex--; if(Player_Display_Selection(KeyboardSelectedPlayerIndex)) { register int i; for(i = KeyboardSelectedPlayerIndex; i > -1; i--) //MAY NEED CHANGING TO 0, not sure, think this is correct! - Nathan { if(Player_Display_Selection(i)) continue; KeyboardSelectedPlayerIndex = i; break; } if(Player_Display_Selection(KeyboardSelectedPlayerIndex)) { VerifyKeyboardSelectedNetworkIndex(); //will re-scan } } } char * buffer[32]; Strcpy(buffer, "~b~MD: ~PAD_LEFT~ "); //27 PLAYER_NAME_WITH_COLOUR(KeyboardSelectedPlayerIndex, &buffer); //WORKS! //45 Strcat(buffer, "~s~ ~PAD_RIGHT~~n~"); //63 if(KeyboardAntiWaitAction == ACTION_NETWORK_SPY_PLAYER) { Strcat(buffer, keyboard_close_on_network_selection ? "Spy = ENTER" : "Spy = ENTER, Exit = ESC"); if(IS_GAME_KEYBOARD_KEY_JUST_PRESSED(KEY_ENTER)) { if(Is_Whitelisted(KeyboardSelectedPlayerIndex)) { PLAY_AUDIO_EVENT("FRONTEND_MENU_MP_UNREADY"); } else { if(PLAYER_HAS_CHAR(KeyboardSelectedPlayerIndex)) { int tmp_ped; GET_PLAYER_CHAR(KeyboardSelectedPlayerIndex,&tmp_ped); //Spectate_Char = tmp_ped; //SpectatePlayerIndex = KeyboardSelectedPlayerIndex; SetByteSet(&SpectateAndAttachByteSet, SPECTATE_PLAYER_INDEX, KeyboardSelectedPlayerIndex); //MD_Spectate_Player(tmp_ped); pretty sure the loop will trigger this if(keyboard_close_on_network_selection) { char * nigger[32]; Strcpy(nigger, "~b~MD: ~s~Spectating: "); //31 PLAYER_NAME_WITH_COLOUR(KeyboardSelectedPlayerIndex, &nigger); //WORKS! = 40 Strcat(nigger, "~s~.~n~Hold ~PAD_LB~ & Press ~PAD_RB~ to disable."); //74 Alert(nigger, false); KeyboardAntiWaitAction = ACTION_COMPLETE_AND_DISABLED; return; } } } } } else if(KeyboardAntiWaitAction == ACTION_NETWORK_MUTE_PLAYER) { Strcat(buffer, NETWORK_IS_PLAYER_MUTED_BY_ME(KeyboardSelectedPlayerIndex) ? "UnMute" : "Mute"); Strcat(buffer, keyboard_close_on_network_selection ? " = ENTER" : " = ENTER, Exit = ESC"); if(IS_GAME_KEYBOARD_KEY_JUST_PRESSED(KEY_ENTER)) { if(Is_Whitelisted(KeyboardSelectedPlayerIndex)) { NETWORK_SET_PLAYER_MUTED(KeyboardSelectedPlayerIndex,false); PLAY_AUDIO_EVENT("FRONTEND_MENU_MP_UNREADY"); } else { NETWORK_SET_PLAYER_MUTED(KeyboardSelectedPlayerIndex, !NETWORK_IS_PLAYER_MUTED_BY_ME(KeyboardSelectedPlayerIndex)); if(keyboard_close_on_network_selection) { KeyboardAntiWaitAction = ACTION_COMPLETE_AND_DISABLED; return; } } } } else if(KeyboardAntiWaitAction == ACTION_NETWORK_KICK_PLAYER) { Strcat(buffer, keyboard_close_on_network_selection ? "Kick = ENTER" : "Kick = ENTER, Exit = ESC"); if(IS_GAME_KEYBOARD_KEY_JUST_PRESSED(KEY_ENTER)) { if(Is_Whitelisted(KeyboardSelectedPlayerIndex)) { PLAY_AUDIO_EVENT("FRONTEND_MENU_MP_UNREADY"); } else { NETWORK_KICK_PLAYER(KeyboardSelectedPlayerIndex); if(keyboard_close_on_network_selection) { KeyboardAntiWaitAction = ACTION_COMPLETE_AND_DISABLED; return; } } } } else if(KeyboardAntiWaitAction == ACTION_NETWORK_VIEW_PLAYER_PROFILE) { Strcat(buffer, keyboard_close_on_network_selection ? "Profile = ENTER" : "Profile = ENTER, Exit = ESC"); //gt spoofers, lets allow people to view all profiles (no whitelist) if(IS_GAME_KEYBOARD_KEY_JUST_PRESSED(KEY_ENTER)) { NETWORK_SHOW_PLAYER_PROFILE_UI(KeyboardSelectedPlayerIndex); if(keyboard_close_on_network_selection) { KeyboardAntiWaitAction = ACTION_COMPLETE_AND_DISABLED; return; } } } CLEAR_PRINTS(); ADD_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS(false); PRINT_STRING_WITH_LITERAL_STRING_NOW("STRING", buffer, 300,true); } #endif //bool keyboard_delete_abandoned_vehicles_only = true; //Has to be global! void MC_Keyboard(void) //LOOP THIS ALWAYS! { #ifdef Premium MC_Keyboard_Network_Anti_Wait_Loop(); #endif #ifdef VERSION_PC if(NETWORK_IS_PLAYER_TYPING(iPlayer)) return; #endif /* //Controls //HOLD W: (Weather) //Press: //S for Sunny //T for thunder //D for drizzle //C for cloudy //M for Misty //B for breeze (windy) //E for extra sunny //F for Freeze weather toggle ///// //HOLD T: (Time) //Press: //M for morning //D for day //N for night //E for evening //A for afternoon //C for cycle time //F for freeze time toggle ///// //Hold V: (Vehicle) //Press: //F to flip //S to shuffle seats (also works on bikes) //R to repair //D to delete //C for clone //E to eject yourself //L to toggle door locks //K to kick out passengers (respawns your car) //I to set invincible ///// //Hold D: (Delete) //Press: //P for peds //O for objects //V for vehicles (basically every type of vehicle) //C for cars //M for motorbikes //B for boats //H for helicopters //A for abandoned vehicles only toggle ///// //Hold P: (Player) //Press: //G for god mode toggle //A for auto-aim toggle //I for infinite ammo toggle //W for give weapons //V for Visibility toggle //F for forcefield toggle //N for never wanted toggle //J for super jump toggle //R for super run toggle //K for Kill //D for Detach //E for Explosion (premium only) ///// //Hold N: (Network) (premium only) //Press: //S for Spy (Player selection) //M for mute (Player selection) //K for kick (Player selection) //P for profile //C for Close on player selection toggle //////////////// */ //register int i; int i; //W (weather) if(IS_GAME_KEYBOARD_KEY_PRESSED(KEY_W)) //Weather options { int weathers[8]; weathers[0] = WEATHER_SUNNY; weathers[1] = WEATHER_LIGHTNING; weathers[2] = WEATHER_RAINING; weathers[3] = WEATHER_DRIZZLE; weathers[4] = WEATHER_CLOUDY; weathers[5] = WEATHER_FOGGY; weathers[6] = WEATHER_SUNNY_WINDY; weathers[7] = WEATHER_EXTRA_SUNNY; int keys[9]; keys[0] = KEY_S; //weather sunny keys[1] = KEY_T; //weather thunder keys[2] = KEY_R; //weather raining keys[3] = KEY_D; //weather drizzle keys[4] = KEY_C; //weather cloudy keys[5] = KEY_M; //weather misty (foggy) keys[6] = KEY_B; //weather breeze (windy) keys[7] = KEY_E; //weather extra_sunny keys[8] = KEY_F; //freeze weather char* messages[9]; messages[0] = "sunny."; messages[1] = "thunder."; messages[2] = "raining."; messages[3] = "drizzle."; messages[4] = "cloudy."; messages[5] = "misty/foggy."; messages[6] = "breezy/windy"; messages[7] = "extra sunny"; messages[8] = (GetByteInSet(WeatherTimeAutoLockByteSet, FREEZE_WEATHER) == 50 ? "un-freeze." : "freeze."); for(i = 0; i < 9; i++) { if(!IS_GAME_KEYBOARD_KEY_JUST_PRESSED(keys[i])) continue; if(i >= 0 && i < 8) { MD_SET_WEATHER(weathers[i]); } else if(i == 8) { if(GetByteInSet(WeatherTimeAutoLockByteSet, FREEZE_WEATHER) == 50) { int weatha; GET_CURRENT_WEATHER(&weatha); SetByteSet(&WeatherTimeAutoLockByteSet, FREEZE_WEATHER, weatha); } else { SetByteSet(&WeatherTimeAutoLockByteSet, FREEZE_WEATHER, 50); } } Alert_Two("~b~MD: ~s~Weather command accepted",messages[i],false); break; //If using freeze weather set freeze weather here to weathers[i] } //Can make admin commands to force time and weather! } else if(IS_GAME_KEYBOARD_KEY_PRESSED(KEY_T)) //Time options //this is host only unless you enable freeze time! (could implement admin commands to force weather/time also) { //time int keys[7]; keys[0] = KEY_M; //time morning keys[1] = KEY_D; //time day keys[2] = KEY_N; //time night keys[3] = KEY_E; //time evening keys[4] = KEY_A; //afternoon keys[5] = KEY_F; //freeze time keys[6] = KEY_C; //Cycle time int times[5]; times[0] = 9; //9AM (morning) times[1] = 12; //12 //day times[2] = 24; //2400, midnight times[3] = 18; //6PM //evening times[4] = 15; //3PM Afternoon char* messages[7]; messages[0] = "morning."; messages[1] = "day."; messages[2] = "midnight."; messages[3] = "evening."; messages[4] = "afternoon."; messages[5] = (GetByteInSet(WeatherTimeAutoLockByteSet, FREEZE_TIME_HOUR) == 25 ? "un-freeze." : "freeze."); //Pretty sure these should be flipped as it's before process! messages[6] = (GetBit(MD_Misc_OptionsBitSet, MD_MISC_TIME_CYCLE) ? "time cycle off." : "time cycle on."); //flipped! for(i = 0; i < 7; i++) { if(!IS_GAME_KEYBOARD_KEY_JUST_PRESSED(keys[i])) continue; if( i < 5 ) { SET_TIME_OF_DAY(times[i],00); if(GetByteInSet(WeatherTimeAutoLockByteSet, FREEZE_TIME_HOUR) != 25) { SetByteSet(&WeatherTimeAutoLockByteSet, FREEZE_TIME_HOUR, times[i]); } } else if(i == 5) { if(GetByteInSet(WeatherTimeAutoLockByteSet, FREEZE_TIME_HOUR) == 25) { int houa, minuta; GET_TIME_OF_DAY(&houa,&minuta); SetByteSet(&WeatherTimeAutoLockByteSet, FREEZE_TIME_HOUR, houa); SetByteSet(&WeatherTimeAutoLockByteSet, FREEZE_TIME_MINUTE, minuta); } else { SetByteSet(&WeatherTimeAutoLockByteSet, FREEZE_TIME_HOUR, 25); SetByteSet(&WeatherTimeAutoLockByteSet, FREEZE_TIME_MINUTE, 0); } } else if(i == 6) { ToggleBit(MD_Misc_OptionsBitSet, MD_MISC_TIME_CYCLE); } Alert_Two("~b~MD: ~s~Time command accepted",messages[i],false); break; } } else if(IS_GAME_KEYBOARD_KEY_PRESSED(KEY_V)) //Vehicle options { int tmp_veh,nvid,driver; if(IS_CHAR_IN_ANY_CAR(pPlayer)) { GET_CAR_CHAR_IS_USING(pPlayer,&tmp_veh); GET_DRIVER_OF_CAR(tmp_veh,&driver); GET_NETWORK_ID_FROM_VEHICLE(tmp_veh,&nvid); int keys[9]; keys[0] = KEY_F; //Flip vehicle keys[1] = KEY_S; //shuffle seats keys[2] = KEY_R; //repair vehicle keys[3] = KEY_C; //Clone Vehicle //use KEY_C (clone) and KEY_D for Delete keys[4] = KEY_E; //Eject from vehicle keys[5] = KEY_L; //Lock vehicle keys[6] = KEY_K; //kick out passengers keys[7] = KEY_D; //Delete vehicle keys[8] = KEY_I; //Invincibility char* second_string = ""; for(i = 0; i < 8; i++) { if(!IS_GAME_KEYBOARD_KEY_JUST_PRESSED(keys[i])) continue; if( (i == 0 || i == 2 || i == 5 || i == 8 || i == 6 || i == 7 ) && (driver != pPlayer)) //works always and avoids fcar protection net id glitch { if(!network_control(nvid)) continue; } float x,y,z,h; GET_CHAR_COORDINATES(pPlayer,&x,&y,&z); GET_CHAR_HEADING(pPlayer,&h); if(i == 0) //KEY_F (flip) { SET_CAR_ON_GROUND_PROPERLY(tmp_veh); second_string = "flip vehicle."; } else if(i == 1) //KEY_S (shuffle seats) { Shuffle_Vehicle_Seat(); second_string = "shuffle seats."; } else if(i == 2) //KEY_R //repair { FIX_CAR(tmp_veh); SET_VEHICLE_DIRT_LEVEL(tmp_veh,0.0); second_string = "repair vehicle."; } else if(i == 3) //KEY_C //clone vehicle { int rand,tmp; GET_CAR_HEADING(tmp_veh,&h); GENERATE_RANDOM_INT_IN_RANGE(0,1,&rand); GET_OFFSET_FROM_CAR_IN_WORLD_COORDS(tmp_veh,(rand == 1 ? +3 : -3),0,0,&x,&y,&z); Clone_Car(tmp_veh,x,y,z,h,&tmp); OPEN_CAR_DOOR(tmp,(rand == 1 ? 0 : 1)); //if spawned on right, open drivers door, if spawned on left, open passenger door second_string = "clone vehicle."; } else if(i == 4) //KEY_E //Eject from vehicle { REMOVE_CHAR_FROM_CAR_MAINTAIN_POSITION(pPlayer,tmp_veh); //TEST THIS! - Nathan --> this works! second_string = "eject from vehicle."; } else if(i == 5) //KEY_L //Lock vehicle { int lock; GET_CAR_DOOR_LOCK_STATUS(tmp_veh,&lock); LOCK_CAR_DOORS(tmp_veh, ( (lock == VEHICLE_DOOR_UNLOCKED) ? VEHICLE_DOOR_LOCKED_BOTH_SIDES : VEHICLE_DOOR_UNLOCKED) ); second_string = (lock == VEHICLE_DOOR_UNLOCKED ? "doors locked." : "doors unlocked."); } else if(i == 6) //KEY_K //kick out passengers { #ifdef Premium int tmp; float speed; GET_CAR_SPEED(tmp_veh,&speed); Clone_Car(tmp_veh,x,y,z,h,&tmp); DELETE_CAR(&tmp_veh); WARP_CHAR_INTO_CAR(pPlayer,tmp); SET_CAR_FORWARD_SPEED(tmp,speed); second_string = "eject passengers."; #else Alert(PREMIUM_ONLY_STRING,true); return; #endif } else if(i == 7) //KEY_D //delete vehicle { DELETE_CAR(&tmp_veh); second_string = "delete vehicle."; } else if(i == 8) { SET_CAR_CAN_BE_DAMAGED(tmp_veh,false); SET_CAR_CAN_BE_VISIBLY_DAMAGED(tmp_veh,false); SET_CAN_BURST_CAR_TYRES(tmp_veh,false); SET_CAR_PROOFS(tmp_veh,true,true,true,true,true); second_string = "set invincible."; } Alert_Two("~b~MD: ~s~Vehicle command accepted",second_string,false); break; } } } else if(IS_GAME_KEYBOARD_KEY_PRESSED(KEY_D)) //Delete options { int keys[8]; keys[0] = KEY_P; //Peds keys[1] = KEY_O; //Objects keys[2] = KEY_V; //Vehicles //KEY_A for abandoned mode toggle keys[3] = KEY_C; //Cars keys[4] = KEY_M; //MotorBikes keys[5] = KEY_B; //Boats keys[6] = KEY_H; //Helicopters keys[7] = KEY_A; //Abandoned vehicles only toggle char deletes[7]; deletes[0] = 0; deletes[1] = 1; deletes[2] = (keyboard_delete_abandoned_vehicles_only ? 3 : 2); deletes[3] = (keyboard_delete_abandoned_vehicles_only ? 5 : 4); deletes[4] = (keyboard_delete_abandoned_vehicles_only ? 7 : 6); deletes[5] = (keyboard_delete_abandoned_vehicles_only ? 9 : 8); deletes[6] = (keyboard_delete_abandoned_vehicles_only ? 11 : 10); for(i = 0; i < 8; i++) { if(!IS_GAME_KEYBOARD_KEY_JUST_PRESSED(keys[i])) continue; if(i == 7) { keyboard_delete_abandoned_vehicles_only = !keyboard_delete_abandoned_vehicles_only; Alert_Two("~b~MD: ~s~Keyboard's vehicle delete mode",(keyboard_delete_abandoned_vehicles_only ? "abandoned only." : "all."),false); break; } Universal_Delete(325,deletes[i],true); break; } } else if(IS_GAME_KEYBOARD_KEY_PRESSED(KEY_P)) //Player options { int keys[12]; keys[0] = KEY_G; //God mode toggle keys[1] = KEY_I; //Infinite ammo toggle keys[2] = KEY_W; //Give weapons (must make function give_weapons(ped, episode)) keys[3] = KEY_K; //Kill self keys[4] = KEY_N; //Never wanted keys[5] = KEY_F; //Forcefield keys[6] = KEY_V; //Visibility keys[7] = KEY_J; //Super jump keys[8] = KEY_R; //Super run keys[9] = KEY_A; //Auto-aim keys[10] = KEY_D; //Detach keys[11] = KEY_E; //Explosion (premium only) //keys[] = KEY_P; //Super punch (also known as super powers) char* second_string = ""; for(i = 0; i < 12; i ++) { if(!IS_GAME_KEYBOARD_KEY_JUST_PRESSED(keys[i])) continue; if(i == 0) //God mode toggle { ToggleBit(pPlayerOptionsBitSet, PLAYER_OPTION_GODMODE); second_string = (GetBit(pPlayerOptionsBitSet, PLAYER_OPTION_GODMODE) ? "god mode on." : "god mode off."); } else if(i == 1) { ToggleBit(pPlayerOptionsBitSet, PLAYER_OPTION_INFINITE_AMMO); second_string = (GetBit(pPlayerOptionsBitSet, PLAYER_OPTION_INFINITE_AMMO) ? "infinite ammo on." : "infinite ammo off."); } else if(i == 2) { GIVE_EPISODIC_WEAPONS_TO_CHAR(pPlayer,Episode); second_string = "give weapons."; } else if(i == 3) { SET_CHAR_HEALTH(pPlayer,-1); second_string = "kill."; } else if(i == 4) { ToggleBit(pPlayerOptionsBitSet, PLAYER_OPTION_NEVER_WANTED); second_string = (GetBit(pPlayerOptionsBitSet, PLAYER_OPTION_NEVER_WANTED) ? "never wanted on." : "never wanted off."); } else if(i == 5) { ToggleBit(pPlayerOptionsBitSet, PLAYER_OPTION_FORCE_FIELD); second_string = (GetBit(pPlayerOptionsBitSet, PLAYER_OPTION_FORCE_FIELD) ? "force field on." : "force field off."); } else if(i == 6) { SET_CHAR_VISIBLE(pPlayer,!IS_CHAR_VISIBLE(pPlayer)); second_string = (IS_CHAR_VISIBLE(pPlayer) ? "invisibility off." : "invisibility on."); } else if(i == 7) { ToggleBit(pPlayerOptionsBitSet, PLAYER_OPTION_SUPER_JUMP); second_string = (GetBit(pPlayerOptionsBitSet, PLAYER_OPTION_SUPER_JUMP) ? "super jump on." : "super jump off."); } else if(i == 8) { ToggleBit(pPlayerOptionsBitSet, PLAYER_OPTION_SUPER_RUN); second_string = (GetBit(pPlayerOptionsBitSet, PLAYER_OPTION_SUPER_RUN) ? "super run on." : "super run off."); } else if(i == 9) { ToggleBit(pPlayerOptionsBitSet, PLAYER_OPTION_INFINITE_AMMO); second_string = (GetBit(pPlayerOptionsBitSet, PLAYER_OPTION_INFINITE_AMMO) ? "auto-aim on." : "auto-aim off."); } else if(i == 10) { Detach_pPlayer(); second_string = "detached."; } else if(i == 11) //explosion { #ifdef Premium float x,y,z; GET_CHAR_COORDINATES(pPlayer, &x, &y, &z); ADD_EXPLOSION(x, y, z, EXPLOSION_SHIP_DESTROY, 10.0, true, false, 0.7f); second_string = "explosion."; #else Alert(PREMIUM_ONLY_STRING,true); return; #endif } Alert_Two("~b~MD: ~s~Player command accepted",second_string,false); break; } } else if(IS_GAME_KEYBOARD_KEY_PRESSED(KEY_N)) //Network Options { #ifdef Premium int keys[5]; keys[0] = KEY_S; //Spy on player keys[1] = KEY_M; //Mute player keys[2] = KEY_K; //kick player keys[3] = KEY_C; //Close on network player selection toggle keys[4] = KEY_P; //Open profile of player //no second string needed here as loop handles it.. for(i = 0; i < 5; i++) { if(!IS_GAME_KEYBOARD_KEY_JUST_PRESSED(keys[i])) continue; if(i == 0) { KeyboardAntiWaitAction = ACTION_NETWORK_SPY_PLAYER; return; //YES THIS IS SUPPOSED TO BE HERE! INPUT IS NOW LISTENED FOR BY THE OTHER FUNCTION } else if(i == 1) { KeyboardAntiWaitAction = ACTION_NETWORK_MUTE_PLAYER; return; } else if(i == 2) { if(IS_THIS_MACHINE_THE_SERVER()) { KeyboardAntiWaitAction = ACTION_NETWORK_KICK_PLAYER; return; } else { Alert("~b~MD: ~s~You are not host.",false); } } else if(i == 3) { keyboard_close_on_network_selection = !keyboard_close_on_network_selection; if(KeyboardAntiWaitAction == ACTION_COMPLETE_AND_DISABLED) { Alert( keyboard_close_on_network_selection ? "~b~MD: ~s~Keyboard menu will now close on player selection." : "~b~MD: ~s~Keyboard menu will now stay open on player selection.",false); } } else if(i == 4) { KeyboardAntiWaitAction = ACTION_NETWORK_VIEW_PLAYER_PROFILE; return; } } #else Alert(PREMIUM_ONLY_STRING,true); return; #endif } } /* Invite stuff for future reference (Devil wants invites done through menu I think) - Nathan extern boolean NETWORK_CHECK_INVITE_ARRIVAL(void); extern boolean NETWORK_HAVE_ACCEPTED_INVITE(void); extern boolean NETWORK_IS_INVITEE_ONLINE(void); extern void NETWORK_CLEAR_INVITE_ARRIVAL(void); extern void NETWORK_INVITE_FRIEND(char *friendname, char *ukn);//NETWORK_INVITE_FRIEND(NETWORK_GET_FRIEND_NAME(I), ""); NETWORK_GET_NUM_UNACCEPTED_INVITES(void); extern int NETWORK_GET_UNACCEPTED_INVITE_EPISODE(int invite_id); extern int NETWORK_GET_UNACCEPTED_INVITE_GAME_MODE(int invite_id); */ //GAME MODES v /* enum eGameMode{ GAME_MODE_BOMB_DA_BASE_II = 15, GAME_MODE_CAR_JACK_CITY = 5, GAME_MODE_COPS_AND_CROOKS = 10, GAME_MODE_DEAL_BREAKER = 13, GAME_MODE_DEATHMATCH = 0, GAME_MODE_FREE_MODE = 0x10, GAME_MODE_GTA_RACE = 7, GAME_MODE_HANGMANS_NOOSE = 14, GAME_MODE_MAFIYA_WORK = 2, GAME_MODE_NONE = -1, GAME_MODE_PARTY_MODE = 8, GAME_MODE_RACE = 6, GAME_MODE_TEAM_CAR_JACK_CITY = 4, GAME_MODE_TEAM_DEATHMATCH = 1, GAME_MODE_TEAM_MAFIYA_WORK = 3, GAME_MODE_TURF_WAR = 12, GAME_MODE_UNKNOWN_11 = 11, GAME_MODE_UNKNOWN_9 = 9 }; */ /* INVITE ALL FRIENDS TEST int i; for(i = 0; i < NETWORK_GET_FRIEND_COUNT(); i++) { if(NETWORK_DID_INVITE_FRIEND(NETWORK_GET_FRIEND_NAME(i))) continue; NETWORK_INVITE_FRIEND(NETWORK_GET_FRIEND_NAME(i), ""); print_two(NETWORK_GET_FRIEND_NAME(i),"was sent an invite to the game"); int tick = 0; do { if(!NETWORK_CHECK_INVITE_ARRIVAL(i)) { tick++; //total of 3 seconds (30 times 100ms) WAIT(100); } else { NETWORK_CLEAR_INVITE_ARRIVAL(); print_two("invite was successfully delivered to",NETWORK_GET_FRIEND_NAME(i)); break; } } while(tick < 30); WAIT(10); } */ /* PRINT ALL UNACCEPTED INVITE GAMERTAGS int i; char* episode[3]; episode[0] = "Original"; episode[1] = "TLaD"; episode[2] = "TBoGT"; for(i = 0; i < GET_NUM_UNACCEPTED_INVITES(); i++) { print_two(NETWORK_GET_UNACCEPTED_INVITER_NAME(i),episode[NETWORK_GET_UNACCEPTED_INVITE_EPISODE(i)]); // NETWORK_ACCEPT_INVITE(i); } */ /* extern char *NETWORK_GET_UNACCEPTED_INVITER_NAME(int invite_id); extern int NETWORK_ACCEPT_INVITE(int invite_id); extern boolean NETWORK_DID_INVITE_FRIEND(char *friendname);//NETWORK_GET_FRIEND_NAME(I) extern int NETWORK_ACCEPT_INVITE(int invite_id);//if (COMPARE_STRING( NETWORK_GET_FRIEND_NAME( uParam0 ), NETWORK_GET_UNACCEPTED_INVITER_NAME( Result ) )) return result; //possibly */ /* GAME STUFF NETWORK_FIND_GAME(int GameMode, int ukn0, int ukn1, int ukn2); int i; for(i = 0; i < NETWORK_GET_NUMBER_OF_GAMES(); i++) { if(NETWORK_FIND_GAME_PENDING() || NETWORK_JOIN_GAME_PENDING()) break; //FIND_ will be false a lil while after using NETWORK_FIND_GAME if(!NETWORK_IS_FIND_RESULT_VALID(i) || !NETWORK_IS_FIND_RESULT_UPDATED(i)) continue; //if(match_game_search_settings && NETWORK_RESULTS_MATCHES_SEARCH_CRITERIA(i) if(NETWORK_RESULT_MATCHES_SEARCH_CRITERIA(i)) { } } //if joining a game.. if(NETWORK_JOIN_GAME_SUCCEEDED()) NETWORK_CLEAR_SUMMONS(); /////////////////////////////////// NETWORK_FIND_GAME(int GameMode, int ukn0, int ukn1, int ukn2); if(NETWORK_FIND_GAME_PENDING()) extern boolean NETWORK_JOIN_GAME_PENDING(void); extern boolean NETWORK_JOIN_GAME_SUCCEEDED(void); extern boolean NETWORK_LEAVE_GAME_PENDING(void); extern boolean PLAYER_WANTS_TO_JOIN_NETWORK_GAME(int); //if we replace phone script we can choose to allow player into game yes or no enum eGameMode{ GAME_MODE_BOMB_DA_BASE_II = 15, GAME_MODE_CAR_JACK_CITY = 5, GAME_MODE_COPS_AND_CROOKS = 10, GAME_MODE_DEAL_BREAKER = 13, GAME_MODE_DEATHMATCH = 0, GAME_MODE_FREE_MODE = 0x10, GAME_MODE_GTA_RACE = 7, GAME_MODE_HANGMANS_NOOSE = 14, GAME_MODE_MAFIYA_WORK = 2, GAME_MODE_NONE = -1, GAME_MODE_PARTY_MODE = 8, GAME_MODE_RACE = 6, GAME_MODE_TEAM_CAR_JACK_CITY = 4, GAME_MODE_TEAM_DEATHMATCH = 1, GAME_MODE_TEAM_MAFIYA_WORK = 3, GAME_MODE_TURF_WAR = 12, GAME_MODE_UNKNOWN_11 = 11, GAME_MODE_UNKNOWN_9 = 9 }; */