/*====================================================== MENU.QC Custom TeamFortress v2.3 (c) TeamFortress Software Pty Ltd 29/2/97 (c) William Kerney 4/4/00 (c) Craig Hauser 19/3/00 ======================================================== This file handles all menu functions and displays. ======================================================*/ #include "defs.qh" #include "messages.qh" #include "menu.qh" void(vector where) spawnFOG; void(entity pl, string s1, string s2, string s3, string s4) CenterPrint4; void(entity pl, string s1, string s2, string s3, string s4, string s5, string s6, string s7) CenterPrint7; void(entity targ, entity inflictor, entity attacker, float damage, float T_flags, float T_AttackType) TF_T_Damage; void() W_SetCurrentAmmo; void(entity p) bound_other_ammo; float(float tno) TeamFortress_TeamSet; void(entity p) TeamFortress_SetSkin; float(float tno) TeamGetColor; void() TeamFortress_ChangeClass; void(float type) TeamFortress_DropAmmo; float() TeamFortress_TeamPutPlayerInTeam; float(float tno) TeamFortress_TeamIsCivilian; void(float class) TeamFortress_SpyChangeSkin; void(float teamno) TeamFortress_SpyChangeColor; void(float building) TeamFortress_Build; void(float type) TeamFortress_SpyFeignDeath; void(entity spy) Spy_RemoveDisguise; void() lvl1_sentry_stand; void() lvl2_sentry_stand; void() lvl3_sentry_stand; float (float tno) TeamFortress_TeamGetNoPlayers; float(float myteam) HasFlag; void() PrintMOTD; /* WK void(float menu_no) DisplayMenu; */ // Assorted menus void() Menu_Team; void() Menu_Class; void() Menu_Drop; void() Menu_Intro; void() PlayerObserverMode; // Classhelp void() Menu_ClassHelp; void() Menu_ClassHelp2; void() Menu_StuffClassHelp; void(float inp) Menu_ClassHelp_Input; // Bindings void() Menu_DoBindings; void() Menu_ShowBindings1; void() Menu_ShowBindings2; void() Menu_RepeatHelp; // Spy void() Menu_Spy; void() Menu_Spy_Skin; void() Menu_Spy_Color; void(float inp) Menu_Spy_Input; void(float inp) Menu_Spy_Skin_Input; void(float inp) Menu_Spy_Color_Input; // Engineer void() Menu_Engineer; void() Menu_EngineerFix_Dispenser; void() Menu_EngineerFix_SentryGun; void() Menu_EngineerFix_Tesla; void() Menu_EngineerFix_Tesla2; void() Menu_EngineerFix_Camera; void() Menu_EngineerFix_Sensor; void() Menu_EngineerFix_Teleporter; void() Menu_EngineerFix_FieldGen; void(float inp) Menu_Engineer_Input; void(float inp) Menu_EngineerFix_Dispenser_Input; void(float inp) Menu_EngineerFix_SentryGun_Input; void(float inp) Menu_EngineerFix_Tesla_Input; void(float inp) Menu_EngineerFix_Tesla_Input2; void(float inp) Menu_EngineerFix_Camera_Input; void(float inp) Menu_EngineerFix_Sensor_Input; void(float inp) Menu_EngineerFix_Teleporter_Input; void(float inp) Menu_EngineerFix_FieldGen_Input; // Demons void() Menu_Demon; void(float inp) Menu_Demon_Input; void() kill_my_demon; // Buildings void() Menu_Dispenser; void(float inp) Menu_Dispenser_Input; void(entity pl, string s1) CenterPrint; void(entity pl, string s1, string s2) CenterPrint2; float(entity obj, entity builder) CheckArea; // WK - Custom Class void() DropFromCustomClassGen; //Extern void() PrintMoney; void(float cost,float type) BuyWeapon; void(float cost,float type) BuyCuTF; void(float cost,float type) BuyItem; void(float cost, float type) BuyJob; /*void(float cost,float type) BuyGren1; void(float cost,float type) BuyGren2;*/ void(float in) PrintRefund; void(float in) PrintNotEnoughMoney; void() Menu_PrimaryWeapon; void(float inp) Menu_PrimaryWeapon_Input; void() Menu_SecondaryWeapon; void(float inp) Menu_SecondaryWeapon_Input; //- Ofn - void() Menu_MiscWeapon; void(float inp) Menu_MiscWeapon_Input; void() Menu_Crusader; void(float inp) Menu_Crusader_Input; void() Menu_Legs; void(float inp) Menu_Legs_Input; void() Menu_Health; void(float inp) Menu_Health_Input; void() Menu_Armor; void(float inp) Menu_Armor_Input; void() Menu_Special; void(float inp) Menu_Special_Input; void() Menu_Special2; void(float inp) Menu_Special2_Input; void() Menu_Gren1; void(float inp) Menu_Gren1_Input; void() Menu_Gren2; void(float inp) Menu_Gren2_Input; void() Menu_Engineering; void(float inp) Menu_Engineering_Input; void() Menu_Profession; void(float inp) Menu_Profession_Input; void() Menu_Profession2; void(float inp) Menu_Profession2_Input; void() Menu_Proficiency; void(float inp) Menu_Proficiency_Input; void() Menu_Option; void(float inp) Menu_Option_Input; //WK Needed for rotate float(float v) anglemod; //WK Needed to det sentries et al. void(entity inflictor, entity attacker, float damage, entity ignore) T_RadiusDamage; //WK Needed to make a bastard void(entity bastard,float threshold) createBastard; //CY Tinker void() DoTinker; //WW Needed for the Dismantling void(entity targ, entity attacker) ClientObituary; // WK -------------- //- OfN - Warlock menu (now in warlock.qc) --// void(float inp) Menu_Demon_Input; // void() Menu_Demon; // //-------------------------------------------// //- OfN - Army menu (now in army.qc) --------// void(float inp) Menu_Army_Input; // void() Menu_Army; // //-------------------------------------------// //- OfN - Hack menu (now in haxxx.qc) -------// void(float inp) Menu_EnemyHax_Inp; // void() Menu_Enemy_Hax; // void(float inp) Menu_FriendHax_Inp; // void() Menu_Friend_Hax; // //-------------------------------------------// float() CheckEnemyDismantle; void() SBBuildSensor; void() Tesla_Lose_Glow; entity(entity OldTesla) TeslaClone; float(entity theplayer, float grenslot) GetMaxGrens; void (float cost, float type) BuyGren; #ifdef FIELD_FORCEMODE void(float value) SetFieldForcedStatus; // player function (self = player) cuts disabled time also float() GetFieldForcedStatus; // player #endif //------------------------------------------// void() ResetMenu = { if (self.StatusBarSize == 0) CenterPrint(self, "\n"); else self.StatusRefreshTime = time + 0.1; self.menu_count = MENU_REFRESH_RATE; self.current_menu = MENU_DEFAULT; }; void() Player_Menu = { // loop function if (self.menu_count > MENU_REFRESH_RATE) { self.menu_count = 0; } else { self.menu_count = self.menu_count + 1; return; } // determine which menu to display // WK - Check to see if the custom class menu is overriding us if ((self.done_custom & CUSTOM_BUILDING) && !(self.done_custom & CUSTOM_OVERRIDE) && self.playerclass == PC_CUSTOM) { self.current_menu = MENU_PRIMARY_WEAPON; self.done_custom = self.done_custom | CUSTOM_OVERRIDE; } //Don't flash status bars if (self.current_menu >= MENU_PRIMARY_WEAPON && self.current_menu <= MENU_OPTION) self.StatusRefreshTime = time + 1.5; //- OfN - Checks for destroyed buildings - NEEDED? /*if (self.current_menu >= MENU_ENGINEER_FIX_DISPENSER && self.current_menu <= MENU_ENGINEER_FIX_FIELDGEN && self.building == world) { ResetMenu(); return; }*/ if (self.current_menu == MENU_INTRO) { Menu_Intro(); self.current_menu = MENU_DEFAULT; } else if (self.current_menu == MENU_CLASSHELP) { Menu_ClassHelp(); if (self.menu_displaytime > 8) { Menu_StuffClassHelp(); self.current_menu = MENU_DEFAULT; } else self.menu_displaytime = self.menu_displaytime + 1; } else if (self.current_menu == MENU_CLASSHELP2) { Menu_ClassHelp2(); if (self.menu_displaytime > 5) { Menu_StuffClassHelp(); self.current_menu = MENU_DEFAULT; } else self.menu_displaytime = self.menu_displaytime + 1; } else if (self.current_menu == MENU_SHOWBINDS1) { Menu_ShowBindings1(); if (self.menu_displaytime > 8) { self.current_menu = MENU_DEFAULT; } else self.menu_displaytime = self.menu_displaytime + 1; } else if (self.current_menu == MENU_SHOWBINDS2) { Menu_ShowBindings2(); if (self.menu_displaytime > 8) { self.current_menu = MENU_DEFAULT; } else self.menu_displaytime = self.menu_displaytime + 1; } else if (self.current_menu == MENU_DROP) { Menu_Drop(); } else if (self.current_menu == MENU_SPY) { Menu_Spy(); } else if (self.current_menu == MENU_SPY_SKIN) { Menu_Spy_Skin(); } else if (self.current_menu == MENU_SPY_COLOR) { Menu_Spy_Color(); } else if (self.current_menu == MENU_ENGINEER) { Menu_Engineer(); } else if (self.current_menu == MENU_ENGINEER_FIX_DISPENSER) { Menu_EngineerFix_Dispenser(); } else if (self.current_menu == MENU_ENGINEER_FIX_SENTRYGUN) { Menu_EngineerFix_SentryGun(); } else if (self.current_menu == MENU_ENGINEER_FIX_TESLA) { Menu_EngineerFix_Tesla(); } else if (self.current_menu == MENU_ENGINEER_FIX_TESLA2) { Menu_EngineerFix_Tesla2(); } else if (self.current_menu == MENU_ENGINEER_FIX_CAMERA) { Menu_EngineerFix_Camera(); } else if (self.current_menu == MENU_ENGINEER_FIX_SENSOR) { Menu_EngineerFix_Sensor(); } else if (self.current_menu == MENU_ENGINEER_FIX_TELEPORTER) { Menu_EngineerFix_Teleporter(); } else if (self.current_menu == MENU_ENGINEER_FIX_FIELDGEN) { Menu_EngineerFix_FieldGen(); } else if (self.current_menu == MENU_DISPENSER) { Menu_Dispenser(); } else if (self.current_menu == MENU_REPEATHELP) { Menu_RepeatHelp(); self.current_menu = MENU_DEFAULT; } else if (self.current_menu == MENU_PICKBINDS) { Menu_DoBindings(); } else if (self.current_menu == MENU_DEMON) { Menu_Demon(); } else if (self.current_menu == MENU_ARMY) //- OfN { Menu_Army(); } else if (self.current_menu == MENU_E_HACK) //- OfN { Menu_Enemy_Hax(); } else if (self.current_menu == MENU_F_HACK) //- OfN { Menu_Friend_Hax(); } else if (self.current_menu == MENU_CRUSADER) { Menu_Crusader(); } //WK ------------------ else if (self.current_menu == MENU_PRIMARY_WEAPON) { Menu_PrimaryWeapon(); } else if (self.current_menu == MENU_SECONDARY_WEAPON) { Menu_SecondaryWeapon(); } else if (self.current_menu == MENU_MISC_WEAPON) { Menu_MiscWeapon(); } else if (self.current_menu == MENU_LEGS) { Menu_Legs(); } else if (self.current_menu == MENU_HEALTH) { Menu_Health(); } else if (self.current_menu == MENU_ARMOR) { Menu_Armor(); } else if (self.current_menu == MENU_SPECIAL) { Menu_Special(); } else if (self.current_menu == MENU_SPECIAL2) { Menu_Special2(); } else if (self.current_menu == MENU_GREN1) { Menu_Gren1(); } else if (self.current_menu == MENU_GREN2) { Menu_Gren2(); } else if (self.current_menu == MENU_ENGINEERING) { Menu_Engineering(); } else if (self.current_menu == MENU_PROFESSION) { Menu_Profession(); } else if (self.current_menu == MENU_PROFESSION2) { Menu_Profession2(); } else if (self.current_menu == MENU_PROFICIENCY) { Menu_Proficiency(); } else if (self.current_menu == MENU_OPTION) { Menu_Option(); } //WK ---------------- else if (self.team_no == 0 && teamplay && (self.lives != 0)) { if (self.motd >= MOTD_FINISHED) { self.current_menu = MENU_TEAM; Menu_Team(); } } //WK Default to custom class gen - OfN - nope! else if (self.playerclass == PC_UNDEFINED && (self.lives != 0)) { //- OfN - stock_mode applies if (stock_mode < 2) { self.current_menu = MENU_CLASS;//-was commented Menu_Class();//-was commented } else { self.impulse = PC_CUSTOM + TF_CHANGEPC; //-wasnt commented TeamFortress_ChangeClass();//-wasnt commented } } else self.current_menu = 0; }; //WK What the hell is this for? /* void(float menu_no) DisplayMenu = { self.current_menu = menu_no; if (menu_no == MENU_TEAM) { Menu_Team(); } else if (menu_no == MENU_CLASS) { Menu_Class(); } }; */ void(float inp) Menu_Team_Input; void() Menu_Team = { if ((toggleflags & TFLAG_AUTOTEAM) && teamplay) { // assign player a team if (TeamFortress_TeamPutPlayerInTeam()) return; } // The Detection entity may have specified a Team Menu String if (team_menu_string != string_null) { CenterPrint(self, team_menu_string); return; } if (CTF_Map == TRUE) CenterPrint(self, " \n\n.. Blue Team \n.. Red Team \n\n\n\n.. Bind my keys for me!\n\nFor full details on this patch:\nhttp://www.telefragged.com/teamfortress/\n"); else if (number_of_teams == 1) CenterPrint(self, " \n\n.. Team One \n"); else if (number_of_teams == 2) CenterPrint(self, " \n\n.. Team One \n.. Team Two \n \n \n\n.. \n"); else if (number_of_teams == 3) CenterPrint(self, " \n\n.. Team One \n.. Team Two \n.. Team Three\n \n\n.. \n"); else // if (number_of_teams == 4) CenterPrint(self, " \n\n.. Team One \n.. Team Two \n.. Team Three\n.. Team Four \n\n.. \n"); }; void(float inp) Menu_Team_Input = { //WK Remove starting observer gravity. It might come right back. self.gravity = 1; if (inp == 5) // auto team TeamFortress_TeamPutPlayerInTeam(); else if (inp <= number_of_teams && inp > 0) TeamFortress_TeamSet(inp); else if (number_of_teams == 0 && inp <= TM_MAX_NO) TeamFortress_TeamSet(inp); else //- OfN { //ResetMenu(); self.impulse = 0; return; } /*else if (inp == 7) self.current_menu = MENU_PICKBINDS; else if (inp == 8) PlayerObserverMode();*/ if (custom_mode!=2) sprint(self, PRINT_MEDIUM, "Press for a custom player class\n"); ResetMenu(); self.impulse = 0; }; void() Menu_Class = { local entity AD; AD = find(world, classname, "info_tfdetect"); if (AD) { if (self.team_no == 1) { if (AD.noise1 != string_null) { CenterPrint(self, AD.noise1); return; } } else if (self.team_no == 2) { if (AD.noise2 != string_null) { CenterPrint(self, AD.noise2); return; } } else if (self.team_no == 3) { if (AD.noise3 != string_null) { CenterPrint(self, AD.noise3); return; } } else if (self.team_no == 4) { if (AD.noise4 != string_null) { CenterPrint(self, AD.noise4); return; } } } if (custom_mode!=2) { if (TeamFortress_TeamIsCivilian(self.team_no)) CenterPrint(self, "Your team can only be Civilians.\n"); else if (spy_off == TRUE) CenterPrint(self, " \n\n.. Scout \n.. Sniper \n.. Soldier \n.. Demoman \n.. Medic \n.. Hvwep \n.. Pyro \n.. Engineer\n\n.. ! \n"); else CenterPrint(self, " \n\n.. Scout \n.. Sniper \n.. Soldier \n.. Demoman \n.. Medic \n.. Hvwep \n.. Pyro \n.. Spy \n.. Engineer\n\n.. ! \n"); } else { if (TeamFortress_TeamIsCivilian(self.team_no)) CenterPrint(self, "Your team can only be Civilians.\n"); else if (spy_off == TRUE) CenterPrint(self, " \n\n.. Scout \n.. Sniper \n.. Soldier \n.. Demoman \n.. Medic \n.. Hvwep \n.. Pyro \n.. Engineer\n"); else CenterPrint(self, " \n\n.. Scout \n.. Sniper \n.. Soldier \n.. Demoman \n.. Medic \n.. Hvwep \n.. Pyro \n.. Spy \n.. Engineer\n"); } }; void(float inp) Menu_Class_Input = { if (inp > 10 || inp < 1) return; if (inp==10 && custom_mode==2) { self.impulse = 0; return; } self.impulse = inp + TF_CHANGEPC; if (inp == 10) //We picked custom, chnage it from random self.impulse = PC_CUSTOM + TF_CHANGEPC; //WK Default to Custom class. TODO: Make this a serverside option - OfN - done! // self.impulse = PC_CUSTOM + TF_CHANGEPC; TeamFortress_ChangeClass(); ResetMenu(); if ( DISPLAY_CLASS_HELP ) self.current_menu = MENU_CLASSHELP; else self.current_menu = MENU_DEFAULT; self.menu_displaytime = 0; self.impulse = 0; }; void () Menu_Drop = { if (self.weapons_carried & WEAP_SPANNER) CenterPrint(self, " : \n\n.. Shells \n.. Nails \n.. Rockets \n.. Cells \n\n.. \n\n"); else CenterPrint(self, ": \n\n.. Shells \n.. Nails \n.. Rockets \n.. Cells \n\n.. \n\n"); }; void () Menu_RepeatHelp = { CenterPrint(self, "Press to see this help again\n"); }; void(float inp) Menu_Drop_Input = { if ((inp > 0) && (inp < 5)) { TeamFortress_DropAmmo(inp); } if ((inp > 0) && (inp < 6)) ResetMenu(); self.impulse = 0; }; void(float inp) Menu_DoBindings_Input = {/*- unusefull local string st; if (inp < 4) { self.impulse = 0; if (inp == 1) { // Flag info stuffcmd(self, "bind q \"impulse 23\"\n"); // Hook stuffcmd(self, "bind e \"impulse 22\"\n"); // Grenade 1 stuffcmd(self, "bind r \"+gren1\"\n"); // Grenade 2 stuffcmd(self, "bind f \"+gren2\"\n"); // Detonate Pipebombs stuffcmd(self, "bind v \"detpipe\"\n"); // Drop ammo stuffcmd(self, "bind c \"dropammo\"\n"); // Scan stuffcmd(self, "bind x \"scan50\"\n"); // Showclasses stuffcmd(self, "bind g \"showclasses\"\n"); // Inventory stuffcmd(self, "bind z \"inv\"\n"); self.menu_count = MENU_REFRESH_RATE; self.current_menu = MENU_SHOWBINDS1; self.menu_displaytime = 0; return; } else if (inp == 2) { // Flag info stuffcmd(self, "bind s \"impulse 23\"\n"); // Hook stuffcmd(self, "bind x \"impulse 22\"\n"); // Grenade 1 stuffcmd(self, "bind d \"+gren1\"\n"); // Grenade 2 stuffcmd(self, "bind c \"+gren2\"\n"); // Detonate Pipebombs stuffcmd(self, "bind f \"detpipe\"\n"); // Drop ammo stuffcmd(self, "bind v \"dropammo\"\n"); // Scan stuffcmd(self, "bind b \"scan50\"\n"); // Showclasses stuffcmd(self, "bind g \"showclasses\"\n"); // Inventory stuffcmd(self, "bind n \"inv\"\n"); self.menu_count = MENU_REFRESH_RATE; self.current_menu = MENU_SHOWBINDS2; self.menu_displaytime = 0; return; } ResetMenu(); }*///- save space }; void(float inp) Menu_Input = { if (self.current_menu == MENU_TEAM) Menu_Team_Input(inp); else if (self.current_menu == MENU_CLASS) Menu_Class_Input(inp); else if (self.current_menu == MENU_DROP) Menu_Drop_Input(inp); else if (self.current_menu == MENU_SPY) Menu_Spy_Input(inp); else if (self.current_menu == MENU_SPY_SKIN) Menu_Spy_Skin_Input(inp); else if (self.current_menu == MENU_SPY_COLOR) Menu_Spy_Color_Input(inp); else if (self.current_menu == MENU_ENGINEER) Menu_Engineer_Input(inp); else if (self.current_menu == MENU_ENGINEER_FIX_DISPENSER) Menu_EngineerFix_Dispenser_Input(inp); else if (self.current_menu == MENU_ENGINEER_FIX_TESLA) Menu_EngineerFix_Tesla_Input(inp); else if (self.current_menu == MENU_ENGINEER_FIX_TESLA2) Menu_EngineerFix_Tesla_Input2(inp); else if (self.current_menu == MENU_ENGINEER_FIX_SENTRYGUN) Menu_EngineerFix_SentryGun_Input(inp); else if (self.current_menu == MENU_ENGINEER_FIX_CAMERA) Menu_EngineerFix_Camera_Input(inp); else if (self.current_menu == MENU_ENGINEER_FIX_SENSOR) Menu_EngineerFix_Sensor_Input(inp); else if (self.current_menu == MENU_ENGINEER_FIX_TELEPORTER) Menu_EngineerFix_Teleporter_Input(inp); else if (self.current_menu == MENU_ENGINEER_FIX_FIELDGEN) Menu_EngineerFix_FieldGen_Input(inp); else if (self.current_menu == MENU_DISPENSER) Menu_Dispenser_Input(inp); else if (self.current_menu == MENU_CLASSHELP) Menu_ClassHelp_Input(inp); else if (self.current_menu == MENU_PICKBINDS) Menu_DoBindings_Input(inp); else if (self.current_menu == MENU_DEMON) Menu_Demon_Input(inp); else if (self.current_menu == MENU_ARMY) Menu_Army_Input(inp); else if (self.current_menu == MENU_E_HACK) Menu_EnemyHax_Inp(inp); else if (self.current_menu == MENU_F_HACK) Menu_FriendHax_Inp(inp); else if (self.current_menu == MENU_CRUSADER) Menu_Crusader_Input(inp); else if (self.current_menu == MENU_PRIMARY_WEAPON) //WK -- Menu_PrimaryWeapon_Input(inp); else if (self.current_menu == MENU_SECONDARY_WEAPON) Menu_SecondaryWeapon_Input(inp); else if (self.current_menu == MENU_MISC_WEAPON) Menu_MiscWeapon_Input(inp); else if (self.current_menu == MENU_LEGS) Menu_Legs_Input(inp); else if (self.current_menu == MENU_HEALTH) Menu_Health_Input(inp); else if (self.current_menu == MENU_ARMOR) Menu_Armor_Input(inp); else if (self.current_menu == MENU_SPECIAL) Menu_Special_Input(inp); else if (self.current_menu == MENU_SPECIAL2) Menu_Special2_Input(inp); else if (self.current_menu == MENU_GREN1) Menu_Gren1_Input(inp); else if (self.current_menu == MENU_GREN2) Menu_Gren2_Input(inp); else if (self.current_menu == MENU_ENGINEERING) Menu_Engineering_Input(inp); else if (self.current_menu == MENU_PROFESSION) Menu_Profession_Input(inp); else if (self.current_menu == MENU_PROFESSION2) Menu_Profession2_Input(inp); else if (self.current_menu == MENU_PROFICIENCY) Menu_Proficiency_Input(inp); else if (self.current_menu == MENU_OPTION) Menu_Option_Input(inp); //WK -- }; void() Menu_Intro = { PrintMOTD (); }; void() Menu_ClassHelp = { if (self.menu_displaytime < 5) { if (self.playerclass == PC_SCOUT) CenterPrint(self, " Details: \n\n: \n2.. Shotgun \n4.. Nailgun \n\nPress for alias help\n"); else if (self.playerclass == PC_SNIPER) CenterPrint(self, " Details: \n\n: \n2.. Sniper Rifle/Auto Rifle \n4.. Nailgun \n\nPress for alias help\n"); else if (self.playerclass == PC_SOLDIER) CenterPrint(self, " Details: \n\n: \n2.. Shotgun \n3.. Super Shotgun \n7.. Rocket Launcher \n\nPress for alias help\n"); else if (self.playerclass == PC_DEMOMAN) CenterPrint(self, " Details: \n\n: \n2.. Shotgun \n6.. Grenade/Pipebomb Launcher\n \n\nPress for alias help\n"); else if (self.playerclass == PC_MEDIC) CenterPrint(self, " Details: \n\n: \n1.. Medikit/BioWeapon \n2.. Shotgun \n3.. Super Shotgun \n5.. Super Nailgun \n\nPress for alias help\n"); else if (self.playerclass == PC_HVYWEAP) CenterPrint(self, " Details: \n\n: \n2.. Shotgun \n3.. Super Shotgun \n7.. Assault Cannon \n\nPress for alias help\n"); else if (self.playerclass == PC_PYRO) CenterPrint(self, " Details: \n\n: \n2.. Shotgun \n6.. Flamethrower \n7.. Incendiary Cannon \n\nPress for alias help\n"); else if (self.playerclass == PC_SPY) CenterPrint(self, " Details: \n\n: \n2.. Tranquiliser Gun \n3.. Super Shotgun \n4.. Nailgun \n\nPress for alias help\n"); else if (self.playerclass == PC_ENGINEER) CenterPrint(self, " Details: \n\n: \n1.. Spanner \n2.. RailGun \n3.. Super Shotgun \n\nPress for alias help\n"); } else { if (self.playerclass == PC_SCOUT) CenterPrint(self, ": \nFlash Grenade \nConcussion Grenade \n\n : \nScanner: scan10,scan50,scan250\nHolograph: holo \n\n\nPress for alias help\n"); else if (self.playerclass == PC_SNIPER) CenterPrint(self, ": \nHand Grenade \nFlare \n\n : \nautozoom : Toggle Rifle Autozooming\n\n\nPress for alias help\n"); else if (self.playerclass == PC_SOLDIER) CenterPrint(self, ": \nHand Grenade \nNail Grenade \n\n : \nNone\n\n\nPress for alias help\n"); else if (self.playerclass == PC_DEMOMAN) CenterPrint(self, ": \nHand Grenade \nMirv Grenade \n\n : \nThe Detpack : det5,det20,det50\nDetonate Pipebombs : detpipe \n\n\nPress for alias help\n"); else if (self.playerclass == PC_MEDIC) CenterPrint(self, ": \nHand Grenade \nConcussion Grenade \n\n : \nNone\n\n\nPress for alias help\n"); else if (self.playerclass == PC_HVYWEAP) CenterPrint(self, ": \nHand Grenade \nMirv Grenade \n\n : \nNone\n\n\nPress for alias help\n"); else if (self.playerclass == PC_PYRO) CenterPrint(self, ": \nHand Grenade \nNapalm Grenade \n\n : \nNone\n\n\nPress for alias help\n"); else if (self.playerclass == PC_SPY) CenterPrint(self, ": \nHand Grenade \nHallucinogen Grenade\n\n : \nGo Undercover : disguise\nStart feigning: feign\n\n\nPress for alias help\n"); else if (self.playerclass == PC_ENGINEER) CenterPrint(self, ": \nHand Grenade \nEMP Grenade \n\n : \nStart Building : build \n\n\nPress for alias help\n"); /* WK Stop GRENADES - Build your own class from appearing else if (self.playerclass == PC_CUSTOM) CenterPrint(self, ": \nBuild your own class!\n\n"); */ } }; void() Menu_StuffClassHelp = { /* if (self.playerclass == PC_SCOUT) { sprint(self, PRINT_HIGH, " Details:\n:\n 2.. Shotgun\n 4.. Nailgun\n"); sprint(self, PRINT_HIGH, ":\n Concussion Grenade\n Flare\n :\n"); sprint(self, PRINT_HIGH, "Scanner: scan10,scan30,scan100\nHolograph: holo\n\n\n"); } else if (self.playerclass == PC_SNIPER) { sprint (self, PRINT_HIGH, " Details:\n\n:\n 2.. Sniper Rifle/Auto Rifle\n"); sprint (self, PRINT_HIGH, "4.. Nailgun\n:\n Hand Grenade\n\n\n :\n"); sprint (self, PRINT_HIGH, " autozoom : Toggle Rifle Autozooming\n\n\n"); } else if (self.playerclass == PC_SOLDIER) { sprint (self, PRINT_HIGH, " Details:\n\n:\n 2.. Shotgun\n 3.. Super Shotgun\n"); sprint (self, PRINT_HIGH, " 7.. Rocket Launcher\n:\n Hand Grenade\n Nail Grenade\n"); sprint (self, PRINT_HIGH, " :\n None\n\n\n"); } else if (self.playerclass == PC_DEMOMAN) { sprint (self, PRINT_HIGH, " Details:\n\n:\n 2.. Shotgun\n 6.. Grenade/Pipebomb Launcher\n"); sprint (self, PRINT_HIGH, ":\n Hand Grenade\n Mirv Grenade\n"); sprint (self, PRINT_HIGH, " :\n The Detpack : det5,det20,det50\n Detonate Pipebombs : detpipe\n\n\n"); } else if (self.playerclass == PC_MEDIC) { sprint (self, PRINT_HIGH, " Details:\n\n:\n 1.. Medikit/BioWeapon\n 2.. Shotgun\n 3.. Super Shotgun\n"); sprint (self, PRINT_HIGH, " 5.. Super Nailgun\n:\n Hand Grenade\n Concussion Grenade\n"); sprint (self, PRINT_HIGH, " :\n None\n\n\n"); } else if (self.playerclass == PC_HVYWEAP) { sprint (self, PRINT_HIGH, " Details:\n\n:\n 2.. Shotgun\n 3.. Super Shotgun\n"); sprint (self, PRINT_HIGH, " 7.. Assault Cannon\n:\n Hand Grenade\n"); sprint (self, PRINT_HIGH, " Mirv Grenade\n :\n None\n\n\n"); } else if (self.playerclass == PC_PYRO) { sprint (self, PRINT_HIGH, " Details:\n\n:\n 2.. Shotgun\n 6.. Flamethrower\n 7.. Incendiary Cannon\n"); sprint (self, PRINT_HIGH, ":\n Hand Grenade\n Napalm Grenade\n"); sprint (self, PRINT_HIGH, " :\n None\n\n\n"); } else if (self.playerclass == PC_SPY) { sprint (self, PRINT_HIGH, " Details:\n\n:\n 2.. Tranquiliser Gun\n 3.. Super Shotgun\n 4.. Nailgun\n"); sprint (self, PRINT_HIGH, ":\n Hand Grenade\n Hallucinogenic Grenade\n"); sprint (self, PRINT_HIGH, " :\n Go Undercover : disguise\n Start feigning: feign\n\n\n"); } else if (self.playerclass == PC_ENGINEER) { sprint (self, PRINT_HIGH, " Details:\n\n:\n 1.. Spanner\n 2.. RailGun\n 3.. Super Shotgun\n"); sprint (self, PRINT_HIGH, ":\n Hand Grenade\n EMP Grenade\n"); sprint (self, PRINT_HIGH, " :\n Start Building : build\n\n\n"); } */ }; void() Menu_ClassHelp2 = { CenterPrint(self, ": \n\ninv : Show inventory \n+gren1 : Throw grenade 1\n+gren2 : Throw Grenade 2\nreload : Force a reload \ndropammo : drop some ammo \nskill : use job ability\ntaunt1 : taunts(also 2,3,4)\n"); }; // \nskill : use job ability void(float inp) Menu_ClassHelp_Input = { if (self.playerclass == PC_UNDEFINED) return; //CH changed inp from 8 to 9, lgun uses 8 if (inp == 9) { Menu_ClassHelp2(); self.menu_count = MENU_REFRESH_RATE; self.current_menu = MENU_CLASSHELP2; self.menu_displaytime = 0; self.impulse = 0; } // Otherwise, the impulse is passed on }; void() Menu_DoBindings = { //CenterPrint(self, ".. Use keys: E R F V C Q X G Z\n.. Use keys: S X D C F V B G N\n.. Don't make bindings \n"); }; void() Menu_ShowBindings1 = { //CenterPrint(self, ".. Flaginfo \n.. Hook \n.. Throw Gren 1 \n.. Throw Gren 2 \n.. Det. Pipebombs\n.. Drop ammo \n.. Use Scanner \n.. Showclasses \n.. inventory \n"); }; void() Menu_ShowBindings2 = { //CenterPrint(self, ".. Flaginfo \n.. Hook \n.. Throw Gren 1 \n.. Throw Gren 2 \n.. Det. Pipebombs\n.. Drop ammo \n.. Use Scanner \n.. Showclasses \n.. inventory \n"); }; //============================================================================ // SPY menus for the Skin and Color changing ability void() Menu_Spy = { if (self.is_feigning) { if (self.undercover_team != 0 && self.undercover_skin != 0) CenterPrint(self, ": \n\n.. Change Skin \n.. Change Color \n.. Stop Feigning \n.. Reset Skin and Color \n\n.. \n\n"); else if (self.undercover_team != 0) CenterPrint(self, ": \n\n.. Change Skin \n.. Change Color \n.. Stop Feigning \n.. Reset Color \n\n.. \n\n"); else if (self.undercover_skin != 0) CenterPrint(self, ": \n\n.. Change Skin \n.. Change Color \n.. Stop Feigning \n.. Reset Skin \n\n.. \n\n"); else CenterPrint(self, ": \n\n.. Change Skin \n.. Change Color \n.. Stop Feigning \n\n.. \n\n"); } else { if (self.undercover_team != 0 && self.undercover_skin != 0) CenterPrint(self, ": \n\n.. Change Skin \n.. Change Color \n.. Start Feigning \n.. Reset Skin and Color \n\n.. \n\n"); else if (self.undercover_team != 0) CenterPrint(self, ": \n\n.. Change Skin \n.. Change Color \n.. Start Feigning \n.. Reset Color \n\n.. \n\n"); else if (self.undercover_skin != 0) CenterPrint(self, ": \n\n.. Change Skin \n.. Change Color \n.. Start Feigning \n.. Reset Skin \n\n.. \n\n"); else CenterPrint(self, ": \n\n.. Change Skin \n.. Change Color \n.. Start Feigning \n\n.. \n\n"); } }; void(float inp) Menu_Spy_Input = { local float tc; local string st; if (inp == 1 || inp == 2) { if (self.effects & (EF_DIMLIGHT | EF_BRIGHTLIGHT)) { sprint(self, PRINT_HIGH, "You can't go undercover while glowing.\n"); ResetMenu(); self.impulse = 0; return; } if (self.is_unabletospy == 1) { sprint(self, PRINT_HIGH, "You can't go undercover right now.\n"); ResetMenu(); self.impulse = 0; return; } } if (inp == 1) { Menu_Spy_Skin(); self.menu_count = MENU_REFRESH_RATE; self.current_menu = MENU_SPY_SKIN; self.menu_displaytime = 0; self.impulse = 0; } else if (inp == 2) { Menu_Spy_Color(); self.menu_count = MENU_REFRESH_RATE; self.current_menu = MENU_SPY_COLOR; self.menu_displaytime = 0; self.impulse = 0; } else if (inp == 3) { TeamFortress_SpyFeignDeath(1); //CH Normal feign ResetMenu(); self.impulse = 0; } else if (inp == 4) { Spy_RemoveDisguise(self); ResetMenu(); self.impulse = 0; } else if (inp == 5 && (self.undercover_team != 0 || self.undercover_skin != 0)) { ResetMenu(); self.impulse = 0; } // Otherwise, the impulse is passed on }; void() Menu_Spy_Skin = { CenterPrint(self, " :\n\n.. Scout \n.. Sniper \n.. Soldier \n.. Demoman \n.. Medic \n.. Hvwep \n.. Pyro \n.. Spy \n.. Engineer\n\n"); }; void(float inp) Menu_Spy_Skin_Input = { if (inp < 10 && inp > 0) { TeamFortress_SpyChangeSkin(inp); ResetMenu(); self.impulse = 0; } // Otherwise, the impulse is passed on }; void() Menu_Spy_Color = { if (number_of_teams == 0) { sprint(self, PRINT_HIGH, "No Color changing allowed in deathmatch.\n"); ResetMenu(); self.impulse = 0; return; } if (number_of_teams == 1) CenterPrint(self, " :\n\n.. Team One \n\n"); else if (number_of_teams == 2) CenterPrint(self, " :\n\n.. Team One \n.. Team Two \n\n"); else if (number_of_teams == 3) CenterPrint(self, " :\n\n.. Team One \n.. Team Two \n.. Team Three\n\n"); else // if (number_of_teams == 4) CenterPrint(self, " :\n\n.. Team One \n.. Team Two \n.. Team Three\n.. Team Four \n\n"); }; void(float inp) Menu_Spy_Color_Input = { if (inp >= 1 && inp <= number_of_teams) { TeamFortress_SpyChangeColor(inp); ResetMenu(); self.impulse = 0; } // Otherwise, the impulse is passed on }; //============================================================================ // ENGINEER menus for the building ability //WK Rewritten for better extensibility and less lines of code void() Menu_Engineer = { //Set up empty menu local string line1; local string line2; local string line3; local string line4; local string line5; local string line6; local string line7; //Check line for Dispenser if (self.has_dispenser == TRUE) line1 = ": \n\n Destroy Dispenser \n"; else if (self.ammo_cells >= BUILD_COST_DISPENSER && (self.cutf_items & CUTF_DISPENSER))//SB line1 = ": \n\n.. Build Dispenser \n"; else line1 = ": \n\n \n"; if (self.has_sentry == TRUE) line2 = " Destroy Sentry Gun \n"; else if (self.ammo_cells >= BUILD_COST_SENTRYGUN && self.cutf_items & CUTF_SENTRYGUN) line2 = ".. Build Sentry Gun \n"; else line2 = " \n"; if (self.has_tesla == TRUE) line3 = " Destroy Tesla Sentry \n"; else if (self.ammo_cells >= BUILD_COST_TESLA && self.tf_items & NIT_TESLA) line3 = ".. Build Tesla Sentry \n"; else line3 = " \n"; if (self.has_camera == TRUE) line4 = " Destroy Security Camera \n"; //CH impulse 4 for both else if (self.ammo_cells >= BUILD_COST_CAMERA && self.tf_items & NIT_SECURITY_CAMERA) line4 = ".. Launch Security Camera \n"; else line4 = " \n"; if (self.has_teleporter != 0) //CH messy, yes { if (self.has_teleporter == 1 && self.ammo_cells >= BUILD_COST_TELEPORTER) line5 = ".. Build a Teleporter Pad \n Destroy a Teleporter Pad \n"; //ofn the number is 5 else if (self.has_teleporter == 1 && self.ammo_cells < BUILD_COST_TELEPORTER) line5 = " Destroy a Teleporter Pad \n"; // 6 if (self.has_teleporter == 2) line5 = " Destroy Both Teleporter Pads \n"; // 6 } else if (self.ammo_cells >= BUILD_COST_TELEPORTER && self.tf_items & NIT_TELEPORTER) line5 = ".. Build a Teleporter Pad \n"; else line5 = " \n"; if (self.has_sensor==TRUE) { line6 = " Destroy Motion Sensor \n"; } else if (self.ammo_cells >= BUILD_COST_SENSOR && self.cutf_items & CUTF_SENSOR) { line6 = ".. Deploy Motion Sensor \n"; } else { line6 = " \n"; } if (self.has_fieldgen != 0) //CH messy, yes { if (self.has_fieldgen == 1 && self.ammo_cells >= BUILD_COST_FIELDGEN) line7 = ".. Build a Field Generator \n Destroy a Field Generator \n\n.. \n"; //ofn the number is 5 else if (self.has_fieldgen == 1 && self.ammo_cells < BUILD_COST_FIELDGEN) line7 = " Destroy a Field Generator \n\n.. \n"; // 6 #ifdef FIELD_FORCEMODE if (self.has_fieldgen >= 2) { if (GetFieldForcedStatus()) line7 = ".. Force field: \n Destroy Both Field Generators \n\n.. \n"; else line7 = ".. Force field: \n Destroy Both Field Generators \n\n.. \n"; } #else if (self.has_fieldgen >= 2) line7 = " Destroy Both Field Generators \n\n.. \n"; // 6 #endif } else if (self.ammo_cells >= BUILD_COST_FIELDGEN && self.cutf_items & CUTF_FIELDGEN) line7 = ".. Build a Field Generator \n\n.. \n"; else line7 = " \n.. \n"; //Finally, we output the menu... CenterPrint7(self,line1,line2,line3,line4,line5,line6,line7); }; void(float inp) Menu_Engineer_Input = { local entity te; if (inp == 1 && self.ammo_cells >= BUILD_COST_DISPENSER && self.has_dispenser == FALSE) { if (!self.has_dispenser) TeamFortress_Build(BUILD_DISPENSER); ResetMenu(); self.impulse = 0; } else if (inp == 2 && self.ammo_cells >= BUILD_COST_SENTRYGUN && self.has_sentry == FALSE) { if (HasFlag(self.team_no) == FALSE) { CenterPrint(self, "No building until your team has the flag!\n"); return; } TeamFortress_Build(BUILD_SENTRYGUN); ResetMenu(); self.impulse = 0; } else if (inp == 3 && self.ammo_cells >= BUILD_COST_TESLA && self.has_tesla == FALSE) { if (HasFlag(self.team_no) == FALSE) { CenterPrint(self, "No building until your team has the flag!\n"); return; } TeamFortress_Build(BUILD_TESLA); ResetMenu(); self.impulse = 0; } else if (inp == 4) { if (!self.has_camera) TeamFortress_Build(BUILD_SECURITY_CAMERA); else { if (self.option < time) Find_And_Dmg("building_camera", self, 1); else { self.impulse = 0; return; } } ResetMenu(); self.impulse = 0; } //CH uses 5 and 6 else if (inp == 5 && (self.has_teleporter == 0 || self.has_teleporter == 1) && self.ammo_cells >= BUILD_COST_TELEPORTER) //ch if have one out, can build { if (HasFlag(self.team_no) == FALSE) { CenterPrint(self, "No building until your team has the flag!\n"); return; } if (self.has_teleporter == 1) { local float r; te = find(world, classname, "building_teleporter"); while (te) { if (te.real_owner == self) { r = vlen(te.origin - self.origin); if (r > TELEPORTER_RANGE && !(te.num_mines & IMPROVED_FOUR)) { sprint(self, PRINT_HIGH, "Other Teleporter is too far away\n"); } else { TeamFortress_Build(BUILD_TELEPORTER); ResetMenu(); self.impulse = 0; } } te = find(te, classname, "building_teleporter"); } } else { TeamFortress_Build(BUILD_TELEPORTER); ResetMenu(); self.impulse = 0; } } else if (inp == 6 && (self.has_teleporter == 1 || self.has_teleporter == 2)) //ch if have one out. can destroy { Find_And_Dmg("building_teleporter", self, 1); ResetMenu(); self.impulse = 0; } else if (inp == 7 && (self.ammo_cells >= BUILD_COST_SENSOR || self.has_sensor) && self.cutf_items & CUTF_SENSOR) { SBBuildSensor(); ResetMenu(); self.impulse = 0; } //CH uses 5 and 6 else if (inp == 8) //ch if have one out, can build { if ((self.has_fieldgen == 0 || self.has_fieldgen == 1) && self.ammo_cells >= BUILD_COST_FIELDGEN) { if (HasFlag(self.team_no) == FALSE) { CenterPrint(self, "No building until your team has the flag!\n"); return; } // find if there are other generators too close, if this is our first generator only - nope if (infokey(world, "fieldtest") != "1") { local float r, mindist; mindist = 3000; te = find(world, classname, "building_fieldgen"); while (te) { if (te.real_owner != self) { r = vlen(te.origin - self.origin); if (r < mindist) mindist = r; } te = find(te, classname, "building_fieldgen"); } if (mindist < FIELDGEN_HACKEDRANGE) // * 2 { sprint(self, PRINT_HIGH, "There are interferences with other field generators here!\n"); } else { TeamFortress_Build(BUILD_FIELDGEN); ResetMenu(); self.impulse = 0; } } else { TeamFortress_Build(BUILD_FIELDGEN); ResetMenu(); self.impulse = 0; } } #ifdef FIELD_FORCEMODE else if (self.has_fieldgen > 1) { if (GetFieldForcedStatus()) { SetFieldForcedStatus(FALSE); sprint(self,PRINT_HIGH,"You set the force field to Intelligent Mode\n"); } else { SetFieldForcedStatus(TRUE); sprint(self,PRINT_HIGH,"You set the force field to Closed Mode\n"); } ResetMenu(); self.impulse = 0; } #endif } else if (inp == 9 && (self.has_fieldgen >= 1)) //ch if have one out. can destroy { Find_And_Dmg("building_fieldgen", self, 1); self.has_fieldgen = 0; // FIXME: shouldnt be needed ResetMenu(); self.impulse = 0; } //-----------------------------------------------------------------// else if (inp == 1 && self.has_dispenser == TRUE) { Find_And_Dmg("building_dispenser", self, 1); ResetMenu(); self.impulse = 0; } else if (inp == 2 && self.has_sentry == TRUE) { Find_And_Dmg("building_sentrygun", self, 1); ResetMenu(); self.impulse = 0; } else if (inp == 3 && self.has_tesla == TRUE) { te = find(world, classname, "building_tesla"); while (te) { if (te.real_owner == self) { if (te.tf_items & NIT_SECURITY_CAMERA) { sprint(self, PRINT_HIGH, "Can't detonate a rogue tesla. Sorry, it's not that easy.\n"); ResetMenu(); self.impulse = 0; return; } } te = find(te, classname, "building_tesla"); } Find_And_Dmg("building_tesla", self, 1); ResetMenu(); self.impulse = 0; } else if (inp == 10) //CH was 4 { ResetMenu(); self.impulse = 0; } // Otherwise, the impulse is passed on }; //CH to reduce code. void(entity person, string build) Add_Building_Teamkill = { local string st; local float threshold; threshold = 0; bprint (PRINT_HIGH, person.netname); bprint (PRINT_HIGH, " has dismantled a friendly "); bprint (PRINT_HIGH, build); bprint (PRINT_HIGH, "!\n"); st = infokey(world, "curse"); if (st != string_null) threshold = stof(st); person.ff_count = person.ff_count + 2; //Increase their bastard rating //Increase the engineers bastard rating so they //can't block everyone. person.building.real_owner.ff_count = person.building.real_owner.ff_count + 0.5; if (threshold >= 1) { if (person.ff_count >= threshold) createBastard(person,threshold); if (person.building.real_owner.ff_count >= threshold) createBastard(person.building.real_owner,threshold); if ((person.ff_count == threshold - 2) || (person.ff_count == threshold - 1.5) || (person.ff_count == threshold - 1) || (person.ff_count == threshold - 0.5)) { sprint (person, PRINT_MEDIUM, "One more dismantling and you will be cursed.\n"); } } }; //============================================================================ // ENGINEER menus for fixing buildings void() Menu_EngineerFix_Dispenser = { CenterPrint(self, ": \n\n.. Put Ammo into Dispenser \n.. Put Armor into Dispenser \n.. Repair Dispenser \n.. Dismantle Dispenser \n\n.. \n\n"); }; void(float inp) Menu_EngineerFix_Dispenser_Input = { local float metalcost; local float am; if (self.classname != "player" || self.building == world) return; local float iI; // is Improved? iI=1; if (self.building.num_mines & IMPROVED_ONE) iI=2; if (inp == 1) { // shells am = (DROP_SHELLS * 2); if (am > self.ammo_shells) am = self.ammo_shells; if (am > (BUILD_DISPENSER_MAX_SHELLS*iI - self.building.ammo_shells)) am = BUILD_DISPENSER_MAX_SHELLS*iI - self.building.ammo_shells; self.ammo_shells = self.ammo_shells - am; self.building.ammo_shells = self.building.ammo_shells + am; // nails am = (DROP_NAILS * 2); if (am > self.ammo_nails) am = self.ammo_nails; if (am > (BUILD_DISPENSER_MAX_NAILS*iI - self.building.ammo_nails)) am = BUILD_DISPENSER_MAX_NAILS*iI - self.building.ammo_nails; self.ammo_nails = self.ammo_nails - am; self.building.ammo_nails = self.building.ammo_nails + am; // rockets am = (DROP_ROCKETS * 2); if (am > self.ammo_rockets) am = self.ammo_rockets; if (am > (BUILD_DISPENSER_MAX_ROCKETS*iI - self.building.ammo_rockets)) am = BUILD_DISPENSER_MAX_ROCKETS*iI - self.building.ammo_rockets; self.ammo_rockets = self.ammo_rockets - am; self.building.ammo_rockets = self.building.ammo_rockets + am; // cells am = (DROP_CELLS * 2); if (am > self.ammo_cells) am = self.ammo_cells; if (am > (BUILD_DISPENSER_MAX_CELLS*iI - self.building.ammo_cells)) am = BUILD_DISPENSER_MAX_CELLS*iI - self.building.ammo_cells; self.ammo_cells = self.ammo_cells - am; self.building.ammo_cells = self.building.ammo_cells + am; } else if (inp == 2) { // armor am = (DROP_ARMOR * 2); if (am > self.armorvalue) am = self.armorvalue; if (am > (BUILD_DISPENSER_MAX_ARMOR*iI - self.building.armorvalue)) am = BUILD_DISPENSER_MAX_ARMOR*iI - self.building.armorvalue; self.armorvalue = self.armorvalue - am; self.building.armorvalue = self.building.armorvalue + am; } else if (inp == 3) { local string f1; metalcost = (self.building.max_health - self.building.health) / 5; if (metalcost > self.ammo_cells) metalcost = self.ammo_cells; self.ammo_cells = self.ammo_cells - metalcost; self.building.health = self.building.health + (metalcost * 5); } else if (inp == 4) { if (CheckEnemyDismantle()==FALSE) {ResetMenu(); self.impulse=0; return;} sprint (self, PRINT_HIGH, "You dismantle the Dispenser.\n"); self.ammo_cells = self.ammo_cells + (BUILD_COST_DISPENSER / 2.0); /////////////////////////// if (Teammate(self.building.real_owner.team_no,self.team_no) && teamplay != 0 && self.building.real_owner != self) { //Boot em if they dismantle too many Add_Building_Teamkill (self, "dispenser"); } self.building.health=0; // - OfN aborts hacks on it self.building.real_owner.has_dispenser = FALSE; dremove(self.building); } if (inp >= 1 && inp <= 5) { ResetMenu(); self.impulse = 0; self.building = world; bound_other_ammo(self); if (self.armorvalue == 0) { self.armortype = 0; // lost all armor self.armorclass = 0; // lost special armor self.items = self.items - (self.items & (IT_ARMOR1 | IT_ARMOR2 | IT_ARMOR3)); } W_SetCurrentAmmo(); } // Otherwise, the impulse is passed on }; void() Menu_EngineerFix_SentryGun = { if (self.building.weapon < 3 && self.ammo_cells >= BUILD_COST_SENTRYGUN) { if (!(self.tf_items & NIT_TURRET)) // TODO: Action --> OfteN's sentry gun CenterPrint(self, ": \n\n.. Put Ammo into Sentry Gun \n.. Upgrade Sentry Gun \n.. Repair Sentry Gun \n\n.. \n\n.. Dismantle Sentry Gun \n.. Rotate Clockwise \n.. Rotate Counter-Clockwise \n"); else CenterPrint(self, ": \n\n.. Put Ammo into Sentry Gun \n.. Upgrade Sentry Gun \n.. Repair Sentry Gun \n\n.. \n\n.. Dismantle Sentry Gun \n.. Rotate Clockwise \n.. Rotate Counter-Clockwise \n.. Create Turret \n"); } else { if (!(self.tf_items & NIT_TURRET)) CenterPrint(self, ": \n\n.. Put Ammo into Sentry Gun \n.. Repair Sentry Gun \n\n.. \n\n.. Dismantle Sentry Gun \n.. Rotate Clockwise \n.. Rotate Counter-Clockwise \n"); else CenterPrint(self, ": \n\n.. Put Ammo into Sentry Gun \n.. Repair Sentry Gun \n\n.. \n\n.. Dismantle Sentry Gun \n.. Rotate Clockwise \n.. Rotate Counter-Clockwise \n.. Create Turret \n"); } }; void(float inp) Menu_EngineerFix_SentryGun_Input = { local float am, metalcost; local string st; if (self.classname != "player" || self.building == world) return; if (inp == 1) { // shells am = (DROP_SHELLS * 2); if (am > self.ammo_shells) am = self.ammo_shells; if (am > (self.building.maxammo_shells - self.building.ammo_shells)) am = (self.building.maxammo_shells - self.building.ammo_shells); self.ammo_shells = self.ammo_shells - am; self.building.ammo_shells = self.building.ammo_shells + am; // If it's level 3, put some rockets in too if (self.building.weapon == 3) { am = (DROP_ROCKETS * 2); if (am > self.ammo_rockets) am = self.ammo_rockets; if (am > (self.building.maxammo_rockets - self.building.ammo_rockets)) am = (self.building.maxammo_rockets - self.building.ammo_rockets); self.ammo_rockets = self.ammo_rockets - am; self.building.ammo_rockets = self.building.ammo_rockets + am; } } else if (self.building.weapon < 3 && inp == 2 && self.ammo_cells >= BUILD_COST_SENTRYGUN) { self.ammo_cells = self.ammo_cells - BUILD_COST_SENTRYGUN; self.building.weapon = self.building.weapon + 1; local float HPfactor,AMMOfactor; if (self.building.num_mines & IMPROVED_THREE) HPfactor=2; else HPfactor=1; if (self.building.num_mines & IMPROVED_ONE) AMMOfactor=2; else AMMOfactor=1; // more health //self.building.max_health = self.building.max_health * 1.2; //self.building.health = self.building.max_health; // more ammo capability //self.building.maxammo_shells = self.building.maxammo_shells * 1.2; // Change the skin and frames if (self.building.weapon == 2) { sound (self.building, CHAN_ITEM, "weapons/turrset.wav", 1, ATTN_NORM); self.building.think = lvl2_sentry_stand; //self.building.skin = 1; self.building.max_health = 180 * HPfactor; self.building.maxammo_shells = 120 * AMMOfactor; } else // if (self.building.weapon == 3) { sound (self.building, CHAN_ITEM, "weapons/turrset.wav", 1, ATTN_NORM); self.building.think = lvl3_sentry_stand; //self.building.skin = 2; self.building.max_health = 220 * HPfactor; self.building.maxammo_shells = 144 * AMMOfactor; } self.building.health = self.building.max_health; sprint(self, PRINT_HIGH, "You upgrade the Sentry Gun to level "); st = ftos(self.building.weapon); sprint(self, PRINT_HIGH, st); sprint(self, PRINT_HIGH, "\n"); } else if (inp == 3) { metalcost = (self.building.max_health - self.building.health) / 5; if (metalcost > self.ammo_cells) metalcost = self.ammo_cells; self.ammo_cells = self.ammo_cells - metalcost; self.building.health = self.building.health + (metalcost * 5); } else if (inp == 5) { if (CheckEnemyDismantle()==FALSE) return; sprint(self, PRINT_HIGH, "You dismantle the Sentry Gun.\n"); //CH give .5 of build cost====give 25*level self.ammo_cells = self.ammo_cells + (BUILD_COST_SENTRYGUN / 2.0) + (self.building.weapon * 25); if (Teammate(self.building.real_owner.team_no,self.team_no) && teamplay != 0 && self.building.real_owner != self) { //Boot em if they dismantle too many Add_Building_Teamkill (self, "sentry gun"); } self.building.real_owner.has_sentry = FALSE; dremove(self.building.trigger_field); self.building.health=0; // - OfN aborts hacks on it dremove(self.building); } else if (inp == 6) //WK { sprint(self, PRINT_HIGH, "You rotate it clockwise 45 degrees\n"); self.building.angles_y = anglemod(self.building.angles_y - 45); self.building.angles_y = ((ceil(self.building.angles_y / 10)) * 10); //CH set last int to 0 self.building.waitmin = anglemod(self.building.angles_y - 50); self.building.waitmax = anglemod(self.building.angles_y + 50); self.building.heat = 0; } else if (inp == 7) //WK { sprint(self, PRINT_HIGH, "You rotate it counter-clockwise 45 degrees\n"); self.building.angles_y = anglemod(self.building.angles_y + 45); self.building.angles_y = ((ceil(self.building.angles_y / 10)) * 10); //CH set last int to 0 self.building.waitmin = anglemod(self.building.angles_y - 50); self.building.waitmax = anglemod(self.building.angles_y + 50); self.building.heat = 1; } //Detachable sentry! else if (inp == 8) { if (self.building.tf_items & NIT_TURRET) { sprint(self, PRINT_HIGH, "Gun is already deployed\n"); } else if (!(self.tf_items & NIT_TURRET)) { sprint(self, PRINT_HIGH, "You need to purchase the turret upgrade\n"); } else if (self.ammo_cells < BUILD_COST_TURRET) { sprint(self, PRINT_HIGH, "Creating a turret costs BUILD_COST_TURRET metal\n"); } else { self.building.origin_z = self.building.origin_z + 15; //Elevate for the check //Make sure the launch area is clear if (CheckArea(self.building,self) == FALSE) { sprint(self, PRINT_HIGH, "You need a clear area to launch\n"); self.building.origin_z = self.building.origin_z - 15; //Set back down } else { self.building.origin_z = self.building.origin_z + 25; //Finish liftoff sprint(self, PRINT_HIGH, "You launch the sentrygun\n"); self.ammo_cells = self.ammo_cells - BUILD_COST_TURRET; self.building.angles_z = 180; setmodel(self.building.trigger_field,string_null); self.building.trigger_field.solid = SOLID_NOT; self.building.flags = self.building.flags - (self.building.flags & FL_ONGROUND); self.building.movetype = MOVETYPE_FLY; self.building.velocity_z = 200; setsize (self.building, '-16 -16 -40', '16 16 -10'); //WK -40, -10 self.building.tf_items = self.building.tf_items | NIT_TURRET; } } } if (inp >= 1 && inp <= 8) { ResetMenu(); self.impulse = 0; bound_other_ammo(self); if (self.armorvalue == 0) { self.armortype = 0; // lost all armor self.armorclass = 0; // lost special armor self.items = self.items - (self.items & (IT_ARMOR1 | IT_ARMOR2 | IT_ARMOR3)); } W_SetCurrentAmmo(); } }; void() Menu_EngineerFix_Sensor = { CenterPrint(self, ": \n\n.. Repair Sensor \n\n.. \n\n.. Dismantle \n"); }; void(float inp) Menu_EngineerFix_Sensor_Input = { //*ch local float am, metalcost; local string st; if (self.classname != "player" || self.building == world) return; if (inp == 1) { metalcost = (self.building.max_health - self.building.health) / 10; if (metalcost > self.ammo_cells) metalcost = self.ammo_cells; self.ammo_cells = self.ammo_cells - metalcost; self.building.health = self.building.health + (metalcost * 10); } else if (inp == 3) { if (CheckEnemyDismantle() == FALSE) return; //- OfN - ICE avoids enemy dismantle (see often.qc) sprint(self, PRINT_HIGH, "You dismantle the Motion Sensor.\n"); //CH will give you half of cost + max of 20 self.ammo_cells = self.ammo_cells + (BUILD_COST_SENSOR * 0.5) + floor(self.building.health / 40); self.building.real_owner.has_sensor = FALSE; if (Teammate(self.building.real_owner.team_no,self.team_no) && teamplay != 0 && self.building.real_owner != self) { //Boot em if they dismantle too many Add_Building_Teamkill (self, "motion sensor"); } self.building.health=0; // - OfN aborts hacks on it dremove(self.building); } if (inp >= 1 && inp <= 3) { ResetMenu(); self.impulse = 0; bound_other_ammo(self); if (self.armorvalue == 0) { self.armortype = 0; // lost all armor self.armorclass = 0; // lost special armor self.items = self.items - (self.items & (IT_ARMOR1 | IT_ARMOR2 | IT_ARMOR3)); } W_SetCurrentAmmo(); } }; void() Menu_EngineerFix_Camera = { CenterPrint(self, ": \n\n.. Repair Camera \n\n.. \n\n.. Dismantle \n"); }; void(float inp) Menu_EngineerFix_Camera_Input = { //*ch local float am, metalcost; local string st; if (self.classname != "player" || self.building == world) return; if (inp == 1) { metalcost = (self.building.max_health - self.building.health) / 10; if (metalcost > self.ammo_cells) metalcost = self.ammo_cells; self.ammo_cells = self.ammo_cells - metalcost; self.building.health = self.building.health + (metalcost * 10); } else if (inp == 3) { if (CheckEnemyDismantle() == FALSE) return; //- OfN - ICE avoids enemy dismantle (see often.qc) sprint(self, PRINT_HIGH, "You dismantle the Security Camera.\n"); //CH will give you half of cost + max of 20 self.ammo_cells = self.ammo_cells + (BUILD_COST_CAMERA * 0.5) + floor(self.building.health / 40); self.building.real_owner.has_camera = FALSE; if (Teammate(self.building.real_owner.team_no,self.team_no) && teamplay != 0 && self.building.real_owner != self) { //Boot em if they dismantle too many Add_Building_Teamkill (self, "security camera"); } self.building.health=0; // - OfN aborts hacks on it dremove(self.building); } if (inp >= 1 && inp <= 3) { ResetMenu(); self.impulse = 0; bound_other_ammo(self); if (self.armorvalue == 0) { self.armortype = 0; // lost all armor self.armorclass = 0; // lost special armor self.items = self.items - (self.items & (IT_ARMOR1 | IT_ARMOR2 | IT_ARMOR3)); } W_SetCurrentAmmo(); } }; void() Menu_EngineerFix_Teleporter = { CenterPrint(self, ": \n\n.. Repair Teleporter \n.. Recharge Teleporter\n\n.. \n\n.. Dismantle \n"); }; void(float inp) Menu_EngineerFix_Teleporter_Input = { //*ch local float am, metalcost; local string st; if (self.classname != "player" || self.building == world) return; if (inp == 1) { metalcost = (self.building.max_health - self.building.health) / 5; if (metalcost > self.ammo_cells) metalcost = ceil(self.ammo_cells); self.ammo_cells = self.ammo_cells - metalcost; self.building.health = self.building.health + (metalcost * 5); } else if (inp == 2) { metalcost = (self.building.maxammo_cells - self.building.ammo_cells); if (metalcost > self.ammo_cells) metalcost = ceil(self.ammo_cells); self.ammo_cells = self.ammo_cells - metalcost; self.building.ammo_cells = self.building.ammo_cells + metalcost; if (self.building.ammo_cells > self.building.maxammo_cells) self.building.ammo_cells = self.building.maxammo_cells; } else if (inp == 4) { if (CheckEnemyDismantle() == FALSE) return; //- OfN - ICE avoids enemy dismantle (see often.qc) sprint(self, PRINT_HIGH, "You dismantle the Teleporter Pad.\n"); //CH will give you half of cost + max of 20 self.ammo_cells = self.ammo_cells + (BUILD_COST_TELEPORTER * 0.5) + floor(self.building.health / 15); self.building.real_owner.has_teleporter = (self.building.real_owner.has_teleporter - 1); if (Teammate(self.building.real_owner.team_no,self.team_no) && teamplay != 0 && self.building.real_owner != self) { //Boot em if they dismantle too many Add_Building_Teamkill (self, "teleporter"); } self.building.health=0; // - OfN aborts hacks on it dremove(self.building); } if (inp >= 1 && inp <= 4) { ResetMenu(); self.impulse = 0; bound_other_ammo(self); if (self.armorvalue == 0) { self.armortype = 0; // lost all armor self.armorclass = 0; // lost special armor self.items = self.items - (self.items & (IT_ARMOR1 | IT_ARMOR2 | IT_ARMOR3)); } W_SetCurrentAmmo(); } }; //========================================================================= // field generator void() Menu_EngineerFix_FieldGen = { CenterPrint(self, ": \n\n.. Repair Field Generator \n.. Recharge Field Generator\n\n.. \n\n.. Dismantle \n"); }; void(float inp) Menu_EngineerFix_FieldGen_Input = { local float am, metalcost; local string st; if (self.classname != "player" || self.building == world) return; if (inp == 1) { metalcost = (self.building.max_health - self.building.health) / 5; if (metalcost > self.ammo_cells) metalcost = ceil(self.ammo_cells); self.ammo_cells = self.ammo_cells - metalcost; self.building.health = self.building.health + (metalcost * 5); } else if (inp == 2) { metalcost = (self.building.maxammo_cells - self.building.ammo_cells); if (metalcost > self.ammo_cells) metalcost = ceil(self.ammo_cells); self.ammo_cells = self.ammo_cells - metalcost; self.building.ammo_cells = self.building.ammo_cells + metalcost; if (self.building.ammo_cells > self.building.maxammo_cells) self.building.ammo_cells = self.building.maxammo_cells; } else if (inp == 4) { if (CheckEnemyDismantle() == FALSE) return; //- OfN - ICE avoids enemy dismantle (see often.qc) sprint(self, PRINT_HIGH, "You dismantle the Field Generator.\n"); //CH will give you half of cost + max of 20 self.ammo_cells = self.ammo_cells + (BUILD_COST_FIELDGEN * 0.5) + floor(self.building.health / 15); self.building.real_owner.has_fieldgen = (self.building.real_owner.has_fieldgen - 1); if (Teammate(self.building.real_owner.team_no,self.team_no) && teamplay != 0 && self.building.real_owner != self) { //Boot em if they dismantle too many Add_Building_Teamkill (self, "field generator"); } self.building.health=0; // - OfN aborts hacks on it dremove(self.building); } if (inp >= 1 && inp <= 4) { ResetMenu(); self.impulse = 0; bound_other_ammo(self); if (self.armorvalue == 0) { self.armortype = 0; // lost all armor self.armorclass = 0; // lost special armor self.items = self.items - (self.items & (IT_ARMOR1 | IT_ARMOR2 | IT_ARMOR3)); } W_SetCurrentAmmo(); } }; //CH string(float num) Return_Colored_Num = { if (num == 0) return ""; else if (num == 1) return ""; else if (num == 2) return ""; else if (num == 3) return ""; else if (num == 4) return ""; else if (num == 5) return ""; else if (num == 6) return ""; else if (num == 7) return ""; else if (num == 8) return ""; else if (num == 9) return ""; else return ""; //Should never happen // OfN - It does when a tesla is in upgrade for frags }; //Upgrades tesla, type 1=volt 2=amps 3=health 4=spy 5=kevlar 6=blast 7=turret 8=improve 9=cloak //menu 0=normal 1=misc float(float ups, entity person, entity sent, float type, float menu) Check_Tesla_Ups = { local float upgrades; if (menu == 1) upgrades = sent.has_tesla; //misc else upgrades = sent.has_sentry; //normal if (ups > upgrades) {//not enough upgrades sprint(person,PRINT_HIGH,"You do not have enough upgrades to improve the tesla\n"); return FALSE; } if (type == 4 || type == 5) { //Spy detector and frag to upgrade if (person.ammo_cells < (ups / 2) * UPGRADE) {//not enough cells sprint(person,PRINT_HIGH,"You need more cells to upgrade the tesla\n"); return FALSE; } } else { if (person.ammo_cells < ups * UPGRADE) {//not enough cells sprint(person,PRINT_HIGH,"You need more cells to upgrade the tesla\n"); return FALSE; } } if (type ==1) { if (sent.ammo_shells >= 3) { sprint(self,PRINT_HIGH,"You can only upgrade voltage 3 times\n"); return FALSE; } else { self.ammo_cells = self.ammo_cells - (ups * UPGRADE); sent.has_sentry = sent.has_sentry - ups; return TRUE; } } if (type ==2) { if (sent.ammo_nails >= 3) { sprint(person,PRINT_HIGH,"You can only upgrade amperage 3 times\n"); return FALSE; } else { self.ammo_cells = self.ammo_cells - (ups * UPGRADE); sent.has_sentry = sent.has_sentry - ups; return TRUE; } } if (type ==3) { if (sent.ammo_rockets >= 3) { sprint(person,PRINT_HIGH,"You can only upgrade the capacitor 3 times\n"); return FALSE; } else { self.ammo_cells = self.ammo_cells - (ups * UPGRADE); sent.has_sentry = sent.has_sentry - ups; return TRUE; } } if (type ==4) { if (sent.tf_items & NIT_AUTOID) { sprint(person,PRINT_HIGH,"You already built a spy detector\n"); return FALSE; } else { self.ammo_cells = self.ammo_cells - (ups * UPGRADE); sent.has_sentry = sent.has_sentry - ups; return TRUE; } } if (type ==5) { if (sent.tf_items & NIT_TELEPORTER) { sprint(person,PRINT_HIGH,"You already have the upgrade\n"); return FALSE; } else { self.ammo_cells = self.ammo_cells - (ups * UPGRADE); sent.has_sentry = sent.has_sentry - ups; return TRUE; } } if (type ==6) { if (sent.tf_items & NIT_KEVLAR) { sprint(person,PRINT_HIGH,"The Tesla already has Kevlar Armor\n"); return FALSE; } else { self.ammo_cells = self.ammo_cells - (ups * UPGRADE); sent.has_tesla = sent.has_tesla - ups; return TRUE; } } if (type ==7) { if (sent.tf_items & NIT_BLAST) { sprint(person,PRINT_HIGH,"The Tesla already has Blast Armor\n"); return FALSE; } else { self.ammo_cells = self.ammo_cells - (ups * UPGRADE); sent.has_tesla = sent.has_tesla - ups; return TRUE; } } if (type ==8) { if (sent.tf_items & NIT_ASBESTOS) { sprint(person,PRINT_HIGH,"The Tesla already has Asbestos Armor\n"); return FALSE; } else { self.ammo_cells = self.ammo_cells - (ups * UPGRADE); sent.has_tesla = sent.has_tesla - ups; return TRUE; } } if (type ==9) { if (sent.tf_items & NIT_TURRET) { sprint(person,PRINT_HIGH,"The Tesla is already a turret!\n"); return FALSE; } else { self.ammo_cells = self.ammo_cells - (ups * UPGRADE); sent.has_tesla = sent.has_tesla - ups; return TRUE; } } if (type ==10) { if (sent.tf_items & NIT_SCANNER) { sprint(person,PRINT_HIGH,"The Tesla already has an improved targeter\n"); return FALSE; } else { self.ammo_cells = self.ammo_cells - (ups * UPGRADE); sent.has_tesla = sent.has_tesla - ups; return TRUE; } } if (type ==11) { //sprint(person,PRINT_HIGH,"Not implemented yet!\n"); // return FALSE; if (sent.tf_items & NIT_TESLA_CLOAKING) { sprint(person,PRINT_HIGH,"The Tesla already has a cloaking device\n"); return FALSE; } else { self.ammo_cells = self.ammo_cells - (ups * UPGRADE); sent.has_tesla = sent.has_tesla - ups; return TRUE; } } return FALSE; //Should not happen }; //Cause its used 2x void() Menu_EngineerRepair_Tesla = { local float cost; local float maxcells; if (self.building.health < self.building.max_health) //CH allow repair with limited cells { cost = (self.building.max_health - self.building.health) / 2; if (cost > self.ammo_cells) cost = self.ammo_cells; self.ammo_cells = self.ammo_cells - cost; self.building.health = self.building.health + (cost * 2); if (self.building.health >= self.building.max_health) self.building.health = self.building.max_health; } maxcells = self.building.maxammo_cells; cost = maxcells - self.building.ammo_cells; if (cost > self.ammo_cells) cost = self.ammo_cells; self.ammo_cells = self.ammo_cells - cost; self.building.ammo_cells = self.building.ammo_cells + cost; if (self.building.ammo_cells >= maxcells) self.building.ammo_cells = maxcells; }; void() Menu_EngineerDismantle_Tesla = { if (!self.building) return; if (self.building.tf_items & NIT_SECURITY_CAMERA) { sprint(self, PRINT_HIGH, "You can't dismantle it. It's not that easy!\n"); return; } if (CheckEnemyDismantle() == FALSE) return; sprint(self, PRINT_HIGH, "You dismantle the Tesla Gun.\n"); //CH give .5 of ammount of build====give 25*health level (0-3)====give .5 of cells self.ammo_cells = self.ammo_cells + (BUILD_COST_TESLA / 2.0) + (self.building.ammo_rockets * 25) + (self.building.ammo_cells / 2); self.building.real_owner.has_tesla = FALSE; if (Teammate(self.building.real_owner.team_no,self.team_no) && teamplay != 0 && self.building.real_owner != self) { //Boot em if they dismantle too many Add_Building_Teamkill (self, "tesla"); } dremove(self.building); }; //CH does random and picks what upgrade to give void(entity sent, entity who) Tesla_Add_Rand_Upgrade = { local float num; num = random(); if (num <= 0.8) //give them a normal upgrade { sprint(who,PRINT_HIGH,"The tesla got a normal upgrade!\n"); sent.has_sentry = sent.has_sentry + 1; } else { sprint(who,PRINT_HIGH,"The tesla got a misc upgrade!\n"); sent.has_tesla = sent.has_tesla + 1; } }; void() Menu_EngineerFix_Tesla = { local string l1,l2; l1 = Return_Colored_Num(self.building.has_sentry); l2 = ".. Upgrade Voltage 1u\n.. Upgrade Amperage 1u\n.. Upgrade Power Supply 1u\n.. Add Spy Detector 4u\n.. Upgrades from frags 3u\n.. Tinker \n.. Repair and Recharge \n.. Dismantle \n.. \n\n.. Misc Upgrades \n"; CenterPrint4(self, "Tesla : ",l1, " Upgrades Left\n\n Normal Tesla Upgrades \n\n" ,l2); }; void(float inp) Menu_EngineerFix_Tesla_Input = { local string temp; local float cost = 0; local float maxcells; if (self.classname != "player" || self.building == world) return; if (inp <= 10 && inp >= 1) { if (self.building.real_owner != self && (inp < 7 || inp == 10) ) { sprint(self,PRINT_HIGH,"Sorry, only the owner can do that\n"); return; } if (inp == 1) { //Upgrade volt if (Check_Tesla_Ups(1, self, self.building, 1, 0)) { self.building.ammo_shells = self.building.ammo_shells + 1; self.building.waitmin = (self.building.ammo_shells + 2) * (self.building.ammo_nails + 2); //Ammo consumption } } if (inp == 2) { //Upgrade amperage if (Check_Tesla_Ups(1, self, self.building, 2, 0)) { self.building.ammo_nails = self.building.ammo_nails + 1; self.building.waitmin = (self.building.ammo_shells + 2) * (self.building.ammo_nails + 2); //Ammo consumption } } if (inp == 3) { //Upgrade power supply if (Check_Tesla_Ups(1, self, self.building, 3, 0)) { local float HPfactor,num,AMMOfactor; if (self.building.num_mines & IMPROVED_THREE) HPfactor=2; else HPfactor=1; if (self.building.num_mines & IMPROVED_ONE) AMMOfactor=2; else AMMOfactor=1; num=self.building.health/self.building.max_health; self.building.ammo_rockets = self.building.ammo_rockets + 1; //Upgrade them //- OfN - teslas start with 150 hp if (self.building.ammo_rockets == 1) { //self.building.max_health = self.building.max_health + 75; // 225 self.building.max_health = 225*HPfactor; //self.building.health = self.building.health + 75; self.building.maxammo_cells = (MAXCELLS0 + ADDCELLS1) * AMMOfactor; self.building.ammo_cells = self.building.maxammo_cells; } else if (self.building.ammo_rockets == 2) { //self.building.max_health = self.building.max_health + 100;// 325 self.building.max_health = 325*HPfactor;// 325 //self.building.health = self.building.health + 100; //self.building.maxammo_cells = self.building.maxammo_cells + ADDCELLS2; //Add self.building.maxammo_cells = (MAXCELLS0 + ADDCELLS1 + ADDCELLS2)*AMMOfactor; self.building.ammo_cells = self.building.maxammo_cells; } else if (self.building.ammo_rockets == 3) { //self.building.max_health = self.building.max_health + 75; // 400 self.building.max_health = 400*HPfactor; // 400 //self.building.health = self.building.health + 75; self.building.maxammo_cells = (MAXCELLS0 + ADDCELLS1 + ADDCELLS2 + ADDCELLS3)*AMMOfactor; //Add self.building.ammo_cells = self.building.maxammo_cells; } self.building.health=self.building.max_health*num; } } if (inp == 4) { //Spy Detector if (Check_Tesla_Ups(4, self, self.building, 4, 0)) { self.building.tf_items = self.building.tf_items | NIT_AUTOID; } } if (inp == 5) { //CH Get frags for upgrades if (Check_Tesla_Ups(3, self, self.building, 5, 0)) { self.building.tf_items = self.building.tf_items | NIT_TELEPORTER; } } if (inp == 6){ // Tinker by Cyt0 Remade by CH to fit with new code if (self.building.tf_items & NIT_TELEPORTER) //- ofn - workaround to solve the HP/cells increase by tinker combined with the hack { sprint(self,PRINT_HIGH,"You can't tinker a tesla in upgrade from frags mode!\n"); } else { DoTinker(); } } if (inp == 7) { //Repair and Rearm Menu_EngineerRepair_Tesla(); } if (inp == 8) { Menu_EngineerDismantle_Tesla(); } // if (inp == 9) { // } if (inp == 10) { self.impulse = 0; Menu_EngineerFix_Tesla2(); self.current_menu = MENU_ENGINEER_FIX_TESLA2; } if (inp >= 1 && inp <= 9) { ResetMenu(); self.impulse = 0; if (self.ammo_cells < 0) self.ammo_cells = 0; bound_other_ammo(self); if (self.armorvalue == 0) { self.armortype = 0; // lost all armor self.armorclass = 0; // lost special armor self.items = self.items - (self.items & (IT_ARMOR1 | IT_ARMOR2 | IT_ARMOR3)); } W_SetCurrentAmmo(); } } }; void() Menu_EngineerFix_Tesla2 = { local string l1,l2; l1 = Return_Colored_Num(self.building.has_tesla); //l2 = ".. Cloaking Tesla 2u"; l2 = ".. Kevlar Armor 1u\n.. Blast Armor 1u\n.. Asbestos Armor 1u\n.. Make TeslaTurret(tm) 1u\n.. Improved Targeting System 1u\n.. Cloaking Device 1u\n.. Repair and Recharge \n.. Dismantle \n.. \n\n.. Normal Upgrades\n"; //l2 = ".. Kevlar Armor 1u\n.. Blast Armor 1u\n.. Asbestos Armor 1u\n.. Make TeslaTurret(tm) 1u\n.. Improved Targeting System 1u\n\n.. Repair and Recharge \n.. Dismantle \n.. \n\n.. Normal Upgrades\n"; CenterPrint4(self, "Tesla : ",l1, " Upgrades Left\n\n Misc Tesla Upgrades \n\n" ,l2); }; void(float inp) Menu_EngineerFix_Tesla_Input2 = { local string temp; local float cost = 0; local float maxcells; if (self.classname != "player" || self.building == world) return; if (inp <= 10 && inp >= 1) { if (inp == 1) { //Kevlar if (Check_Tesla_Ups(1, self, self.building, 6, 1)) { self.building.tf_items = self.building.tf_items | NIT_KEVLAR; self.building.armorclass = self.building.armorclass | AT_SAVESHOT; } } if (inp == 2) { //Blast if (Check_Tesla_Ups(1, self, self.building, 7, 1)) { self.building.tf_items = self.building.tf_items | NIT_BLAST; self.building.armorclass = self.building.armorclass | AT_SAVEEXPLOSION; } } if (inp == 3) { //Blast if (Check_Tesla_Ups(1, self, self.building, 8, 1)) { self.building.tf_items = self.building.tf_items | NIT_ASBESTOS; self.building.armorclass = self.building.armorclass | AT_SAVEFIRE; } } if (inp == 4) { //Tesla Turret(tm) if (Check_Tesla_Ups(1, self, self.building, 9, 1)) { if (self.building.tf_items & NIT_TURRET) { sprint(self, PRINT_HIGH, "Gun is already deployed\n"); } else { self.building.origin_z = self.building.origin_z + 15; // +15//Elevate for the check //Make sure the launch area is clear if (FALSE) { //if (CheckArea(self.building,self) == FALSE) { sprint(self, PRINT_HIGH, "You need a clear area to launch\n"); self.building.origin_z = self.building.origin_z - 15; //-15//Set back down } else { //self.building.origin_z = self.building.origin_z + 25; //+ 25 //Finish liftoff self.building.origin_z = self.building.origin_z - 25; //often fixes tesla not touchin ceiling//+ 25 //Finish liftoff sprint(self, PRINT_HIGH, "You turretize the tesla\n"); if (self.building.job == 1 && self.building.tf_items & NIT_TESLA_CLOAKING) { local entity TSelf, OSelfB; OSelfB=self.building; TSelf=TeslaClone(OSelfB); dremove(OSelfB); self.building=TSelf; // NEEDED? teslaclone should have updated this pointer anyway.. spawnFOG(self.building.origin); sound (self.building, CHAN_MISC, "misc/r_tele4.wav", 1, ATTN_NORM); } self.building.angles_z = 180; self.building.flags = self.building.flags - (self.building.flags & FL_ONGROUND); self.building.movetype = MOVETYPE_FLY; self.building.velocity_z = 200; setsize (self.building, '-16 -16 10', '16 16 40');//35');//'-16 -16 -40', '16 16 -10'); //WK -40, -10 self.building.tf_items = self.building.tf_items | NIT_TURRET; self.building.is_haxxxoring=1; //flag determines if flying and it's used for cloaking teslas, set to 0 when landed } } } } if (inp == 5) { //Improved Targeter if (Check_Tesla_Ups(1, self, self.building, 10, 1)) { self.building.tf_items = self.building.tf_items | NIT_SCANNER; } } //CH its commented out here and in the centerprint - OfN nomore! if (inp == 6) { //Cloaking tesla if (Check_Tesla_Ups(1, self, self.building, 11, 1)) { self.building.tf_items = self.building.tf_items | NIT_TESLA_CLOAKING; if (self.building.job == 1) { local entity oself; oself=self; self=self.building; self.job=3; //- OfN - this flag indicates it must skip condition on lose_glow Tesla_Lose_Glow(); self=oself; } } } if (inp == 7) { //Repair and Rearm Menu_EngineerRepair_Tesla(); } if (inp == 8) { Menu_EngineerDismantle_Tesla(); } // if (inp == 9) { // } if (inp == 10) { self.impulse = 0; Menu_EngineerFix_Tesla(); self.current_menu = MENU_ENGINEER_FIX_TESLA; } if (inp >= 1 && inp <= 9) { ResetMenu(); self.impulse = 0; if (self.ammo_cells < 0) self.ammo_cells = 0; bound_other_ammo(self); if (self.armorvalue == 0) { self.armortype = 0; // lost all armor self.armorclass = 0; // lost special armor self.items = self.items - (self.items & (IT_ARMOR1 | IT_ARMOR2 | IT_ARMOR3)); } W_SetCurrentAmmo(); } } }; //============================================================================ // Menu for using buildings void() Menu_Dispenser = { CenterPrint(self, " : \n\n.. Withdraw some ammo \n.. Withdraw some Armor \n\n.. \n\n"); }; void(float inp) Menu_Dispenser_Input = { if (self.classname != "player" || self.building == world) return; local float am, empty; empty = FALSE; if (inp == 1) { if (self.building.ammo_shells == 0 && self.building.ammo_nails == 0 && self.building.ammo_rockets == 0 && self.building.ammo_cells == 0) { empty = TRUE; } else { // shells am = self.maxammo_shells - self.ammo_shells; if (am > self.building.ammo_shells) am = self.building.ammo_shells; self.building.ammo_shells = self.building.ammo_shells - am; self.ammo_shells = self.ammo_shells + am; // nails am = self.maxammo_nails - self.ammo_nails; if (am > self.building.ammo_nails) am = self.building.ammo_nails; self.building.ammo_nails = self.building.ammo_nails - am; self.ammo_nails = self.ammo_nails + am; // rockets am = self.maxammo_rockets - self.ammo_rockets; if (am > self.building.ammo_rockets) am = self.building.ammo_rockets; self.building.ammo_rockets = self.building.ammo_rockets - am; self.ammo_rockets = self.ammo_rockets + am; // cells am = self.maxammo_cells - self.ammo_cells; if (am > self.building.ammo_cells) am = self.building.ammo_cells; self.building.ammo_cells = self.building.ammo_cells - am; self.ammo_cells = self.ammo_cells + am; // SB gren1s local float grenammo; /*if (self.tf_items & NIT_AMMO_BANDOLIER) grenammo = 5; else grenammo = 4;*/ grenammo = GetMaxGrens(self,1); am = grenammo - self.no_grenades_1; if (am*15 > self.building.ammo_rockets) am = floor(self.building.ammo_rockets / 15); self.building.ammo_rockets = self.building.ammo_rockets - am * 15; self.no_grenades_1 = self.no_grenades_1 + am; // SB gren2s grenammo = GetMaxGrens(self,2); am = grenammo - self.no_grenades_2; if (am*15 > self.ammo_rockets) am = floor(self.ammo_rockets / 15); self.building.ammo_rockets = self.building.ammo_rockets - am * 15; self.no_grenades_2 = self.no_grenades_2 + am; } } else if (inp == 2) { if (self.building.is_malfunctioning & SCREWUP_FOUR) { sprint(self,PRINT_HIGH,"Trapped dispenser, have a nice day!\n"); TF_T_Damage(self.building, self.building, self.building, 500, 0, TF_TD_OTHER); return; } if (self.building.armorvalue == 0) { empty = TRUE; } else { // armor am = self.maxarmor - self.armorvalue; if (am > self.building.armorvalue) am = self.building.armorvalue; if (self.armortype == 0) { self.armortype = self.armor_allowed; //self.items = self.items | IT_ARMOR1; W_SetCurrentAmmo(); } self.building.armorvalue = self.building.armorvalue - am; self.armorvalue = self.armorvalue + am; } } if (inp >= 1 && inp <= 3) { if (empty) sprint(self, PRINT_HIGH, "The dispenser is empty.\n"); ResetMenu(); self.impulse = 0; self.building = world; self.building_wait = time + 0.5; bound_other_ammo(self); if (self.armorvalue == 0) { self.armortype = 0; // lost all armor self.armorclass = 0; // lost special armor self.items = self.items - (self.items & (IT_ARMOR1 | IT_ARMOR2 | IT_ARMOR3)); } W_SetCurrentAmmo(); } // Otherwise, the impulse is passed on }; //---------------------------------------------------------------------- // Rod May kk@rod.net // mstr and mstr2 and eqstr only exist to cut down on a crap load of code. // string(float v,float m1,float m2,string s1,string s2,string s3,string s4) mstr = { // return string for matching masks (m1 and m2) on value v. // neither match: s1, first only: s2, second only: s3, both: s4 if ((v & m1) && (v & m2)) return s4; if (v & m1) return s2; if (v & m2) return s3; return s1; }; string(float v1,float v2,float m1,float m2,string s1,string s2,string s3,string s4) mstr2 = { // same func as above but with a value for each mask. // return string for matching mask m1 on value v1, and m2 on v2. if ((v1 & m1) && (v2 & m2)) return s4; if (v1 & m1) return s2; if (v2 & m2) return s3; return s1; }; string(float v,float v1,float v2,string s1,string s2,string s3) eqstr = { // return string based on v equals values v1 OR v2 // neither equal: s1, first only: s2, second only: s3 if (v == v1) return s2; if (v == v2) return s3; return s1; }; //---------------------------------------------------------------------- //---------------------------------------------------------------------- //---------------------------------------------------------------------- //---------------------------------------------------------------------- //---------------------------------------------------------------------- //---------------------------------------------------------------------- //WK ===================================================================== // Prints Menu of Primary Weapons Available // ===================================================================== void() Menu_PrimaryWeapon = { local string temp; temp = ftos(self.money); local string msg_custom; local string msg_upgrade; local string l1,l2,l3,l4; l1 = mstr(self.weapons_carried, WEAP_SNIPER_RIFLE, WEAP_ASSAULT_CANNON, " .. Sniper Rifle 4000\n .. Assault Cannon 3000\n", "* .. Sniper Rifle 4000\n .. Assault Cannon 3000\n", " .. Sniper Rifle 4000\n* .. Assault Cannon 3000\n", "* .. Sniper Rifle 4000\n* .. Assault Cannon 3000\n"); l2 = mstr(self.weapons_carried, WEAP_ROCKET_LAUNCHER, WEAP_INCENDIARY, " .. Rocket Launcher 3000\n .. Pyro Toys 3000\n", "* .. Rocket Launcher 3000\n .. Pyro Toys 3000\n", " .. Rocket Launcher 3000\n* .. Pyro Toys 3000\n", "* .. Rocket Launcher 3000\n* .. Pyro Toys 3000\n"); l3 = mstr(self.weapons_carried, WEAP_GRENADE_LAUNCHER, WEAP_LIGHTNING, " .. Grenade Set 2200\n .. Lightning Gun 2200\n", "* .. Grenade Set 2200\n .. Lightning Gun 2200\n", " .. Grenade Set 2200\n* .. Lightning Gun 2200\n", "* .. Grenade Set 2200\n* .. Lightning Gun 2200\n"); l4 = " .. Light Assault 1800\n.. \n.. \n.. ! \n"; if (self.weapons_carried & WEAP_LIGHT_ASSAULT) l4 = "* .. Light Assault 1800\n.. \n.. \n.. ! \n"; if (self.done_custom & CUSTOM_SELLING) msg_custom = " dollars left\n\n*CURRENTLY SELLING FRAGS*\nTyping again will waste your cash\n"; else msg_custom = " dollars left\n\nUse the command to start over\nUse the command to sell frags\n"; centerprint(self, " Csoie \n Primary Weapons \n\n",l1,l2,l3,l4,temp,msg_custom); }; // void(float inp) Menu_PrimaryWeapon_Input = { local string st; st = infokey(world, "no_spam"); if (inp <= 10 && inp >= 1) { //Snipe #undef PRICE #define PRICE 4000 if (inp == 1) if (self.weapons_carried & WEAP_SNIPER_RIFLE) //Already have it { PrintRefund(PRICE); self.weapons_carried = self.weapons_carried - WEAP_SNIPER_RIFLE; self.weapons_carried = self.weapons_carried - WEAP_AUTO_RIFLE; self.maxammo_shells = self.maxammo_shells - 75; } else if (self.money >= PRICE) { self.money = self.money - PRICE; self.weapons_carried = self.weapons_carried | WEAP_SNIPER_RIFLE | WEAP_AUTO_RIFLE; self.maxammo_shells = self.maxammo_shells + 75; PrintMoney(); } else PrintNotEnoughMoney(PRICE); if (inp == 2) { if (st == "on") //If admin disable it { sprint(self,PRINT_HIGH,"The admin has disabled spam devices on this map.\n"); return; } BuyWeapon(3000,WEAP_ASSAULT_CANNON); } if (inp == 3) { BuyWeapon(3000,WEAP_ROCKET_LAUNCHER); } //IC #undef PRICE #define PRICE 3000 if (inp == 4) { if (self.weapons_carried & WEAP_INCENDIARY) //Already have it { //Clean up asbestos armor if (!(self.tf_items & NIT_ASBESTOS)) self.money = self.money - 750; //Sync this with asbestos self.tf_items = self.tf_items - (self.tf_items & NIT_ASBESTOS); PrintRefund(PRICE); self.weapons_carried = self.weapons_carried - WEAP_INCENDIARY; self.weapons_carried = self.weapons_carried - WEAP_FLAMETHROWER; self.maxammo_cells = self.maxammo_cells - 200; self.maxammo_rockets = self.maxammo_rockets - 60; } else if (self.money >= PRICE) { self.money = self.money - PRICE; self.weapons_carried = self.weapons_carried | WEAP_INCENDIARY | WEAP_FLAMETHROWER; //Give em asbestos armor, and a refund if they have it if (self.tf_items & NIT_ASBESTOS) self.money = self.money + 750; //Sync this with asbestos price self.tf_items = self.tf_items | NIT_ASBESTOS; self.maxammo_cells = self.maxammo_cells + 200; self.maxammo_rockets = self.maxammo_rockets + 60; PrintMoney(); } else PrintNotEnoughMoney(PRICE); //} } if (inp == 5) { BuyWeapon(2200,WEAP_GRENADE_LAUNCHER); } if (inp == 6) { BuyWeapon(2200,WEAP_LIGHTNING); } if (inp == 7) { BuyWeapon(1800,WEAP_LIGHT_ASSAULT); } // if (inp == 8) { // centerprint(self, "No previous menu\n"); // } if (inp == 9) { Menu_SecondaryWeapon(); self.current_menu = MENU_SECONDARY_WEAPON; } if (inp == 10) { DropFromCustomClassGen(); } self.impulse = 0; } // Otherwise, the impulse is passed on // SB to where, nobody knows }; // ==================================================================== // Prints Menu of Secondary Weapons Available // ==================================================================== void() Menu_SecondaryWeapon = { local string temp; temp = ftos(self.money); local string l1,l2,l3,l4; /*l1 = mstr2(self.weapons_carried,self.cutf_items, WEAP_DAEDALUS, CUTF_KNIFE, " .. Impulse Rifle 1400\n .. Knife 650\n", "* .. Impulse Rifle 1400\n .. Knife 650\n", " .. Impulse Rifle 1400\n* .. Knife 650\n", "* .. Impulse Rifle 1400\n* .. Knife 650\n");*/ l1 = mstr2(self.weapons_carried,self.cutf_items, WEAP_SNG, CUTF_KNIFE, " .. Super Nailgun 800\n .. Knife 650\n", "* .. Super Nailgun 800\n .. Knife 650\n", " .. Super Nailgun 800\n* .. Knife 650\n", "* .. Super Nailgun 800\n* .. Knife 650\n"); l2 = mstr(self.weapons_carried, WEAP_SUPER_SHOTGUN, WEAP_LASER, " .. Double Barrel 575\n .. Rail Gun 500\n", "* .. Double Barrel 575\n .. Rail Gun 500\n", " .. Double Barrel 575\n* .. Rail Gun 500\n", "* .. Double Barrel 575\n* .. Rail Gun 500\n"); l3 = mstr(self.weapons_carried, WEAP_NAILGUN, WEAP_TRANQ, " .. Nail Gun 400\n .. Tranquilizer 300\n", "* .. Nail Gun 400\n .. Tranquilizer 300\n", " .. Nail Gun 400\n* .. Tranquilizer 300\n", "* .. Nail Gun 400\n* .. Tranquilizer 300\n"); l4 = " .. Single Barrel 50\n.. \n.. \n.. ! \n"; if (self.weapons_carried & WEAP_SHOTGUN) l4 = "* .. Single Barrel 50\n.. \n.. \n.. ! \n"; centerprint(self, " Csoie \n Secondary Weapons \n\n",l1,l2,l3,l4,temp," dollars left\n"); }; // void(float inp) Menu_SecondaryWeapon_Input = { if (inp <= 10 && inp >= 1) { if (inp == 1) { //BuyWeapon(1400, WEAP_DAEDALUS); BuyWeapon(800,WEAP_SNG); //self.maxammo_ } //Knife #undef PRICE #define PRICE 650 if (inp == 2) { if (self.cutf_items & CUTF_KNIFE) //Already have it { //Clean up knife-less warlocks (sync this with Custom.qc) if (self.job & JOB_WARLOCK) { // OfN Fix getting extra money with demon lore sprint(self, PRINT_HIGH, "You will need this knife being a warlock!\n"); self.impulse=0; return; } PrintRefund(PRICE); self.cutf_items = self.cutf_items - CUTF_KNIFE; } else if (self.money >= PRICE) { self.money = self.money - PRICE; self.cutf_items = self.cutf_items | CUTF_KNIFE; PrintMoney(); } else PrintNotEnoughMoney(PRICE); } if (inp == 3) { BuyWeapon(575,WEAP_SUPER_SHOTGUN); } if (inp == 4) { BuyWeapon(500,WEAP_LASER); } if (inp == 5) { BuyWeapon(400,WEAP_NAILGUN); } if (inp == 6) { BuyWeapon(300,WEAP_TRANQ); } if (inp == 7) { BuyWeapon(50,WEAP_SHOTGUN); } if (inp == 8) { Menu_PrimaryWeapon(); self.current_menu = MENU_PRIMARY_WEAPON; } if (inp == 9) { Menu_MiscWeapon(); self.current_menu = MENU_MISC_WEAPON; } if (inp == 10) { DropFromCustomClassGen(); } self.impulse = 0; } }; // ==================================================================== // Prints Menu of Secondary Weapons Available // ==================================================================== void() Menu_MiscWeapon = { local string temp; temp = ftos(self.money); local string l1,l2,l3,l4; l1 = mstr(self.weapons_carried, WEAP_MAUSER, WEAP_AIRF, " .. Mauser 2400\n .. Air-Fist 1600\n", "* .. Mauser 2400\n .. Air-Fist 1600\n", " .. Mauser 2400\n* .. Air-Fist 1600\n", "* .. Mauser 2400\n* .. Air-Fist 1600\n"); l2 = mstr2(self.weapons_carried, self.weapons_carried, WEAP_DAEDALUS, WEAP_LASERCANNON, " .. Impulse Rifle 1500\n .. Laser Cannon 1200\n", "* .. Impulse Rifle 1500\n .. Laser Cannon 1200\n", " .. Impulse Rifle 1500\n* .. Laser Cannon 1200\n", "* .. Impulse Rifle 1500\n* .. Laser Cannon 1200\n"); l3="\n\n"; l4="\n.. \n.. \n.. ! \n"; /*l3 = mstr(self.weapons_carried, WEAP_LASER, WEAP_NAILGUN, " .. Railgun 500\n .. Nailgun 800\n", "* .. Railgun 500\n .. Nailgun 800\n", " .. Railgun 500\n* .. Nailgun 800\n", "* .. Railgun 500\n* .. Nailgun 800\n"); l2 = " .. Impulse Rifle 1500\n\n\n\n\n.. \n.. \n.. ! \n"; if (self.weapons_carried & WEAP_DAEDALUS) l2 = "* .. Impulse Rifle 1500\n\n\n\n\n.. \n.. \n.. ! \n";*/ centerprint(self, " Csoie \n MiscExtra Weapons \n\n",l1,l2,l3,l4,temp," dollars left\n"); }; // void(float inp) Menu_MiscWeapon_Input = { if (inp <= 10 && inp >= 1) { if (inp == 1) { BuyWeapon(2400, WEAP_MAUSER); //sprint(self, PRINT_HIGH, "Unfortunately all stocks of this item have been requisitioned to increase the glory of the Queen. God save the Queen!\n"); } if (inp == 2) { BuyWeapon(1600,WEAP_AIRF); //sprint(self, PRINT_HIGH, "Unfortunately all stocks of this item have been requisitioned to increase the glory of the Queen. God save the Queen!\n"); } if (inp == 3) { BuyWeapon(1500,WEAP_DAEDALUS); } if (inp == 4) { if (no_laser) { sprint(self,PRINT_HIGH,"Laser cannon is disabled, sorry.\n"); self.impulse = 0; return; } BuyWeapon(1200,WEAP_LASERCANNON); }/* if (inp == 5) { BuyWeapon(500,WEAP_LASER); } if (inp == 6) { BuyWeapon(800,WEAP_NAILGUN); } if (inp == 7) { BuyWeapon(300,WEAP_TRANQ); }*/ if (inp == 8) { Menu_SecondaryWeapon(); self.current_menu = MENU_SECONDARY_WEAPON; } if (inp == 9) { Menu_Legs(); self.current_menu = MENU_LEGS; } if (inp == 10) { DropFromCustomClassGen(); } self.impulse = 0; } }; // ============================= // Prints Menu of Legs for Sale // ============================= void() Menu_Legs = { local string temp; temp = ftos(self.money); local string l1,l2,l3,l4; l1 = " .. Cheetah 9000\n .. Cougar 6000\n"; l2 = " .. White Rhino 3250\n .. Scrub Jay 2500\n"; l3 = " .. KGB Officer 1250\n .. Black Mamba 500\n"; l4 = " .. ImperialPenguin 0\n.. \n.. \n.. ! \n"; /* 650 9000 420 6000 330 3250 310 2500 290 1250 270 500 250 0 */ if (self.custom_speed == 650 ) l1 = "* .. Cheetah 9000\n .. Cougar 6000\n"; else if (self.custom_speed == 420 ) l1 = " .. Cheetah 9000\n* .. Cougar 6000\n"; else if (self.custom_speed == 330 ) l2 = "* .. White Rhino 3250\n .. Scrub Jay 2500\n"; else if (self.custom_speed == 310 ) l2 = " .. White Rhino 3250\n* .. Scrub Jay 2500\n"; else if (self.custom_speed == 290) l3 = "* .. KGB Officer 1250\n .. Black Mamba 500\n"; else if (self.custom_speed == 270) l3 = " .. KGB Officer 1250\n* .. Black Mamba 500\n"; else l4 = "* .. ImperialPenguin 0\n.. \n.. \n.. ! \n"; centerprint(self, " Csoie \n Leg Enhancements \n\n", l1,l2,l3,l4, temp," dollars left\n"); }; // void(float inp) Menu_Legs_Input = { //First, prevent them from getting high speed while upgraded if (inp < 3 && self.done_custom & CUSTOM_SELLING) { sprint(self,PRINT_HIGH,"The upgraded CustomTF soldier is a fighting machine. He doesn't have access to fast legs\n"); self.impulse = 0; return; } //Second, sell off our current legs if (inp < 8) { if (self.custom_speed == 650) { PrintRefund(9000); self.custom_speed = 250; if (self.impulse == 1) {self.impulse = 0; return;} } else if (self.custom_speed == 420) { PrintRefund(6000); self.custom_speed = 250; if (self.impulse == 2) {self.impulse = 0; return;} } else if (self.custom_speed == 330) { PrintRefund(3250); self.custom_speed = 250; if (self.impulse == 3) {self.impulse = 0; return;} } else if (self.custom_speed == 310) { PrintRefund(2500); self.custom_speed = 250; if (self.impulse == 4) {self.impulse = 0; return;} } else if (self.custom_speed == 290) { PrintRefund(1250); self.custom_speed = 250; if (self.impulse == 5) {self.impulse = 0; return;} } else if (self.custom_speed == 270) { PrintRefund(500); self.custom_speed = 250; if (self.impulse == 6) {self.impulse = 0; return;} } } #undef PRICE #define PRICE 9000 if (inp == 1) { if (self.money >= PRICE) { self.money = self.money - PRICE; self.custom_speed = 650; PrintMoney(); } else PrintNotEnoughMoney(PRICE); } #undef PRICE #define PRICE 6000 if (inp == 2) { if (self.money >= PRICE) { self.money = self.money - PRICE; self.custom_speed = 420; PrintMoney(); } else PrintNotEnoughMoney(PRICE); } #undef PRICE #define PRICE 3250 if (inp == 3) { if (self.money >= PRICE) { self.money = self.money - PRICE; self.custom_speed = 330; PrintMoney(); } else PrintNotEnoughMoney(PRICE); } #undef PRICE #define PRICE 2500 if (inp == 4) { if (self.money >= PRICE) { self.money = self.money - PRICE; self.custom_speed = 310; PrintMoney(); } else PrintNotEnoughMoney(PRICE); } #undef PRICE #define PRICE 1250 if (inp == 5) { if (self.money >= PRICE) { self.money = self.money - PRICE; self.custom_speed = 290; PrintMoney(); } else PrintNotEnoughMoney(PRICE); } #undef PRICE #define PRICE 500 if (inp == 6) { if (self.money >= PRICE) { self.money = self.money - PRICE; self.custom_speed = 270; PrintMoney(); } else PrintNotEnoughMoney(PRICE); } #undef PRICE #define PRICE 0 if (inp == 7) { if (self.money >= PRICE) { self.money = self.money - PRICE; self.custom_speed = 250; PrintMoney(); } else PrintNotEnoughMoney(PRICE); } if (inp == 8) { Menu_MiscWeapon(); self.current_menu = MENU_MISC_WEAPON; } if (inp == 9) { Menu_Health(); self.current_menu = MENU_HEALTH; } if (inp == 10) { DropFromCustomClassGen(); } self.impulse = 0; }; // ========================================== // Prints Menu of Armor and Health Available // ========================================== void() Menu_Health = { local string temp; temp = ftos(self.money); local string l1,l2,l3,l4; l1 = eqstr(self.maxarmor, 75, 100, " .. 75 Green armor 200\n .. 100 Yellow 700\n", "* .. 75 Green armor 200\n .. 100 Yellow 700\n", " .. 75 Green armor 200\n* .. 100 Yellow 700\n"); l2 = eqstr(self.maxarmor, 150, 200, " .. 150 Red 1400\n .. 200 Red 2200\n", "* .. 150 Red 1400\n .. 200 Red 2200\n", " .. 150 Red 1400\n* .. 200 Red 2200\n"); l3 = " .. 300 Red 3600\n"; if (self.maxarmor == 300 ) l3 = "* .. 300 Red 3600\n"; l4 = " .. +50 Health 1000\n .. +5 Health 100\n.. \n.. \n.. ! \n"; centerprint(self, " Csoie \n Armor and Health \n\n", l1,l2,l3,l4, temp," dollars left\n"); }; void(float inp) Menu_Health_Input = { //Fix multiple armor buy bug //WW: Modded to allow to sell armor back if (inp >= 1 && inp <= 5 && self.maxarmor > 0) { if (self.maxarmor == 75) { if (inp == 1) { inp = 0; PrintRefund(200); } else self.money = self.money + 200; } else if (self.maxarmor == 100) { if (inp == 2) { inp = 0; PrintRefund(700); } else self.money = self.money + 700; } else if (self.maxarmor == 150) { if (inp == 3) { inp = 0; PrintRefund(1400); } else self.money = self.money + 1400; } else if (self.maxarmor == 200) { if (inp == 4) { inp = 0; PrintRefund(2200); } else self.money = self.money + 2200; } else if (self.maxarmor == 300) { if (inp == 5) { inp = 0; PrintRefund(3600); } else self.money = self.money + 3600; } self.armor_allowed = self.armorvalue = self.maxarmor = 0; } #undef PRICE #define PRICE 200 if (inp == 1) { if (self.money >= PRICE) { self.money = self.money - PRICE; self.maxarmor = 75; self.armorvalue = self.maxarmor; self.armortype = 0.3; // Green self.armor_allowed = 0.3; //Green max PrintMoney(); } else PrintNotEnoughMoney(PRICE); } #undef PRICE #define PRICE 700 if (inp == 2) { if (self.money >= PRICE) { self.money = self.money - PRICE; self.maxarmor = 100; self.armorvalue = self.maxarmor; self.armortype = 0.6; // Yellow self.armor_allowed = 0.6; //Yellow max PrintMoney(); } else PrintNotEnoughMoney(PRICE); } #undef PRICE #define PRICE 1400 if (inp == 3) { if (self.money >= PRICE) { self.money = self.money - PRICE; self.maxarmor = 150; self.armorvalue = self.maxarmor; self.armortype = 0.8; //Red armor self.armor_allowed = 0.8; //Max PrintMoney(); } else PrintNotEnoughMoney(PRICE); } #undef PRICE #define PRICE 2200 if (inp == 4) { if (self.money >= PRICE) { self.money = self.money - PRICE; self.maxarmor = 200; self.armorvalue = self.maxarmor; self.armortype = 0.8; //Red armor self.armor_allowed = 0.8; //Red max PrintMoney(); } else PrintNotEnoughMoney(PRICE); } #undef PRICE #define PRICE 3600 if (inp == 5) { if (self.money >= PRICE) { self.money = self.money - PRICE; self.maxarmor = 300; self.armorvalue = self.maxarmor; self.armortype = 0.8; //Red armor (used to be 0.9) self.armor_allowed = 0.8; //Red max PrintMoney(); W_SetCurrentAmmo (); } else PrintNotEnoughMoney(PRICE); } #undef PRICE #define PRICE 1000 if (inp == 6) { if (self.money >= PRICE) { self.money = self.money - PRICE; self.max_health = self.max_health + 50; self.health = self.max_health; PrintMoney(); } else { // WW: Modded to allow to sell health back // Buying #6 with <#7 money resets hp if (self.money < 100) { self.money = self.money + ((self.max_health - 50) / 5) * 100; self.max_health = 50; self.health = self.max_health; PrintMoney(); } else PrintNotEnoughMoney(PRICE); } } #undef PRICE #define PRICE 100 if (inp == 7) { if (self.money >= PRICE) { self.money = self.money - PRICE; self.max_health = self.max_health + 5; self.health = self.max_health; PrintMoney(); } else PrintNotEnoughMoney(PRICE); } if (inp == 8) { Menu_Legs(); self.current_menu = MENU_LEGS; } if (inp == 9) { Menu_Armor(); self.current_menu = MENU_ARMOR; } if (inp == 10) { DropFromCustomClassGen(); } self.impulse = 0; }; // ========================================== // Prints Menu of Special Armor and Ammo // ========================================== void() Menu_Armor = { local string temp; temp = ftos(self.money); local string l1,l2,l3,l4; l1 = mstr(self.tf_items, NIT_CERAMIC, NIT_GEL, " .. Ceramic Armor 575\n .. Impact Armor 625\n", "* .. Ceramic Armor 575\n .. Impact Armor 625\n", " .. Ceramic Armor 575\n* .. Impact Armor 625\n", "* .. Ceramic Armor 575\n* .. Impact Armor 625\n"); l2 = mstr(self.tf_items, NIT_ASBESTOS, NIT_KEVLAR, " .. Asbestos Armor 750\n .. Kevlar Armor 1200\n", "* .. Asbestos Armor 750\n .. Kevlar Armor 1200\n", " .. Asbestos Armor 750\n* .. Kevlar Armor 1200\n", "* .. Asbestos Armor 750\n* .. Kevlar Armor 1200\n"); l3 = mstr(self.tf_items, NIT_BLAST, NIT_AMMO_BACKPACK, " .. Blast Armor 1500\n .. Ammo Backpack 300\n", "* .. Blast Armor 1500\n .. Ammo Backpack 300\n", " .. Blast Armor 1500\n* .. Ammo Backpack 300\n", "* .. Blast Armor 1500\n* .. Ammo Backpack 300\n"); l4 = " .. Ammo Bandolier 200\n.. \n.. \n.. ! \n"; if (self.tf_items & NIT_AMMO_BANDOLIER) l4 = "* .. Ammo Bandolier 200\n.. \n.. \n.. ! \n"; centerprint(self, " Csoie \n Special ArmorAmmo \n\n", l1,l2,l3,l4, temp," dollars left\n"); }; void(float inp) Menu_Armor_Input = { if (inp == 1) { BuyItem(575,NIT_CERAMIC); } if (inp == 2) { BuyItem(625, NIT_GEL); } if (inp == 3) { BuyItem(750,NIT_ASBESTOS); } if (inp == 4) { BuyItem(1200,NIT_KEVLAR); } if (inp == 5) { BuyItem(1500,NIT_BLAST); } if (inp == 6) { BuyItem(300,NIT_AMMO_BACKPACK); } if (inp == 7) { BuyItem(200,NIT_AMMO_BANDOLIER); } if (inp == 8) { Menu_Health(); self.current_menu = MENU_HEALTH; } if (inp == 9) { Menu_Special(); self.current_menu = MENU_SPECIAL; } if (inp == 10) { DropFromCustomClassGen(); } self.impulse = 0; }; // ================================== // Prints Menu of Specials Available // ================================== void() Menu_Special = { local string temp; temp = ftos(self.money); local string l1,l2,l3,l4; l1 = mstr(self.tf_items, NIT_SCANNER, NIT_AUTOSCANNER, " .. Scanner 650\n .. Auto-Scanner 250\n", "* .. Scanner 650\n .. Auto-Scanner 250\n", " .. Scanner 650\n* .. Auto-Scanner 250\n", "* .. Scanner 650\n* .. Auto-Scanner 250\n"); l2 = mstr2(self.cutf_items, self.weapons_carried, CUTF_DETPACK, WEAP_MEDIKIT, " .. Detpack 800\n .. Medikit 1550\n", "* .. Detpack 800\n .. Medikit 1550\n", " .. Detpack 800\n* .. Medikit 1550\n", "* .. Detpack 800\n* .. Medikit 1550\n"); l3 = mstr2(self.cutf_items, self.tf_items, CUTF_SPY_KIT, NIT_SCUBA, " .. Spy Kit 2000\n .. Scuba Gear 1000\n", "* .. Spy Kit 2000\n .. Scuba Gear 1000\n", " .. Spy Kit 2000\n* .. Scuba Gear 1000\n", "* .. Spy Kit 2000\n* .. Scuba Gear 1000\n"); l4 = " .. Grapple 3000\n.. \n.. \n.. ! \n"; if (self.weapons_carried & WEAP_HOOK) l4 = "* .. Grapple 3000\n.. \n.. \n.. ! \n"; centerprint(self, " Csoie \n Special Items \n\n",l1,l2,l3,l4, temp," dollars left\n"); }; void(float inp) Menu_Special_Input = { local string st2; //Scanner #undef PRICE #define PRICE 650 //st = infokey(world, "no_grapple"); st2 = infokey(world, "no_spam"); if (inp == 1) { if (self.tf_items & NIT_SCANNER) { //Clean up auto-medic (sync this with Custom.qc) if (self.tf_items & NIT_AUTOSCANNER) self.money = self.money + 250; //Sync this with price below self.tf_items = self.tf_items - (self.tf_items & NIT_AUTOSCANNER); PrintRefund(PRICE); self.tf_items = self.tf_items - NIT_SCANNER; self.tf_items_flags = self.tf_items_flags - (self.tf_items & NIT_SCANNER_ENEMY); } else if (self.money >= PRICE) { self.money = self.money - PRICE; self.tf_items = self.tf_items | NIT_SCANNER; self.tf_items_flags = self.tf_items_flags | NIT_SCANNER_ENEMY; PrintMoney(); } else PrintNotEnoughMoney(PRICE); } if (inp == 2) { //Sync this with scanner above BuyItem(250,NIT_AUTOSCANNER); } //Detpack #undef PRICE #define PRICE 800 if (inp == 3) { if (st2 == "on") {//If admin disable it sprint(self,PRINT_HIGH,"The admin has disabled spam devices on this map.\n"); // self.impulse=0; return; } if (self.cutf_items & CUTF_DETPACK) //Already have it { PrintRefund(PRICE); self.cutf_items = self.cutf_items - CUTF_DETPACK; self.maxammo_detpack = self.maxammo_detpack - 1; } else if (self.money >= PRICE) { self.money = self.money - PRICE; self.cutf_items = self.cutf_items | CUTF_DETPACK; self.maxammo_detpack = self.maxammo_detpack + 1; PrintMoney(); } else PrintNotEnoughMoney(PRICE); } #undef PRICE #define PRICE 1550 if (inp == 4) { if (self.weapons_carried & WEAP_MEDIKIT) { PrintRefund(PRICE); self.weapons_carried = self.weapons_carried - WEAP_MEDIKIT; self.maxammo_medikit = self.maxammo_medikit - 80; } else if (self.money >= PRICE) { self.money = self.money - PRICE; self.weapons_carried = self.weapons_carried | WEAP_MEDIKIT; self.maxammo_medikit = self.maxammo_medikit + 80; PrintMoney(); } else PrintNotEnoughMoney(PRICE); } if (inp == 5) { BuyCuTF(2000,CUTF_SPY_KIT); } //Self-Contained Underwater Breathing Apparatus if (inp == 6) { BuyItem(1000,NIT_SCUBA); } if (inp == 7) { if (no_grapple == 1) //If admin disable it { sprint(self,PRINT_HIGH,"The admin has disabled the grapple on this map.\n"); self.impulse = 0; return; } else if (allow_hook) //If map allows it... sprint(self,PRINT_HIGH,"You can't sell your grapple on this map!\n"); else BuyWeapon(3000,WEAP_HOOK); } if (inp == 8) { Menu_Armor(); self.current_menu = MENU_ARMOR; } if (inp == 9) { Menu_Special2(); self.current_menu = MENU_SPECIAL2; } if (inp == 10) { DropFromCustomClassGen(); } self.impulse = 0; }; // ============================================// // Prints Menu of Specials Available // // ============================================// void() Menu_Special2 = { local string temp; temp = ftos(self.money); local string l1,l2,l3,l4; l1 = mstr(self.cutf_items, CUTF_JAMMER, CUTF_CYBERAUG, " .. Scanner Jammer 1000\n .. CyberAug Unit 800\n", "* .. Scanner Jammer 1000\n .. CyberAug Unit 800\n", " .. Scanner Jammer 1000\n* .. CyberAug Unit 800\n", "* .. Scanner Jammer 1000\n* .. CyberAug Unit 800\n"); /* l2 = mstr(self.cutf_items, CUTF_SENSOR, CUTF_HOLO, " .. Motion sensor 450\n .. Holo device 600\n", "* .. Motion sensor 450\n .. Holo device 600\n", " .. Motion sensor 450\n* .. Holo device 600\n", "* .. Motion sensor 450\n* .. Holo device 600\n"); */ l2 = mstr(self.cutf_items, CUTF_SENSOR, CUTF_FIELDGEN, " .. Motion Sensor 450\n .. Field Generator 1600\n", "* .. Motion Sensor 450\n .. Field Generator 1600\n", " .. Motion Sensor 450\n* .. Field Generator 1600\n", "* .. Motion Sensor 450\n* .. Field Generator 1600\n"); l3 = mstr(self.cutf_items, CUTF_FULLARMOUR, CUTF_TOSSABLEDET, " .. Full Armour 250\n .. C4 Tossable Det 1200\n", "* .. Full Armour 250\n .. C4 Tossable Det 1200\n", " .. Full Armour 250\n* .. C4 Tossable Det 1200\n", "* .. Full Armour 250\n* .. C4 Tossable Det 1200\n"); l4 = " .. Dispenser 600\n.. \n.. \n.. ! \n"; if (self.cutf_items & CUTF_DISPENSER) l4 = "* .. Dispenser 600\n.. \n.. \n.. ! \n"; centerprint(self, " Csoie \n More Special Items \n\n",l1,l2,l3,l4, temp," dollars left\n"); }; void(float inp) Menu_Special2_Input = { local string st; st = infokey(world, "no_spam"); if (inp == 1)//SB Jammer BuyCuTF(1000, CUTF_JAMMER); else if (inp == 2)//SB cybernetic augmentation { if (self.cutf_items & CUTF_CYBERAUG) { self.maxammo_medikit = self.maxammo_medikit - 80; self.maxammo_cells = self.maxammo_cells - 80; } else { self.maxammo_medikit = self.maxammo_medikit + 80; self.maxammo_cells = self.maxammo_cells + 80; } BuyCuTF(800,CUTF_CYBERAUG); } else if (inp == 3)//SB motion sensor { BuyCuTF(450,CUTF_SENSOR); } else if (inp == 4)//SB hax0r tool { BuyCuTF(1600,CUTF_FIELDGEN); //BuyCuTF(600,CUTF_HOLO); //sprint(self, PRINT_HIGH, "Activate the holograph with the 'holo' command.\n"); } else if (inp == 5)//SB full armour { BuyCuTF(250,CUTF_FULLARMOUR); } else if (inp == 6)//SB C4 tossable detpack { if (no_c4==1) { sprint(self,PRINT_HIGH,"The C4 is disabled, sorry\n"); self.impulse=0; return; } else { BuyCuTF(1200,CUTF_TOSSABLEDET); sprint(self, PRINT_HIGH, "Type 'throwdet' to throw the detpack.\n"); } } else if (inp == 7) BuyCuTF(600,CUTF_DISPENSER); else if (inp == 8) { Menu_Special(); self.current_menu = MENU_SPECIAL; } else if (inp == 9) { Menu_Gren1(); self.current_menu = MENU_GREN1; } else if (inp == 10) { DropFromCustomClassGen(); } self.impulse = 0; }; //////////////////////////////////////////////////////////////////////// string(float v1, float v2, string s1, string s2, string s3, string s4, string s5, string s6) grenstr = { // Return string based on how values compare to gren1 and gren2 if ((self.tp_grenades_1 != v1 && self.tp_grenades_2 != v1) && (self.tp_grenades_1 != v2 && self.tp_grenades_2 != v2)) return s1; // If we have one gren1 and no gren2s, return s2 if ((self.tp_grenades_1 == v1 || self.tp_grenades_2 == v1) && (self.tp_grenades_1 != v2 && self.tp_grenades_2 != v2) && self.tp_grenades_1 != self.tp_grenades_2) return s2; // If no gren1 and one gren2, return s3 if ((self.tp_grenades_1 != v1 && self.tp_grenades_2 != v1) && (self.tp_grenades_1 == v2 || self.tp_grenades_2 == v2) && self.tp_grenades_1 != self.tp_grenades_2) return s3; // If one of both, return s4... if ((self.tp_grenades_1 == v1 || self.tp_grenades_2 == v1) && (self.tp_grenades_1 == v2 || self.tp_grenades_2 == v2)) return s4; // If two gren1s, return s5 if (self.tp_grenades_1 == v1 && self.tp_grenades_2 == v1) return s5; // If two gren2s, return s6 if (self.tp_grenades_1 == v2 && self.tp_grenades_2 == v2) return s6; return "BUG on grenstr()\n"; }; /* 0 0 1 0 0 1 1 1 2 0 0 2 */ // ==================================== // Prints Menu of Grenade-1s Available // ==================================== void() Menu_Gren1 = { local string temp; temp = ftos(self.money); local string l1,l2,l3,l4; l1 = grenstr(GR_TYPE_NORMAL, GR_TYPE_FLAME, " .. Normal 500\n .. Flame 750\n", "1 .. Normal 500\n .. Flame 750\n", " .. Normal 500\n1 .. Flame 750\n", "1 .. Normal 500\n1 .. Flame 750\n", "2 .. Normal 500\n .. Flame 750\n", " .. Normal 500\n2 .. Flame 750\n"); l2 = grenstr(GR_TYPE_GAS, GR_TYPE_EMP, " .. Gas 1200\n .. EMP 1200\n", "1 .. Gas 1200\n .. EMP 1200\n", " .. Gas 1200\n1 .. EMP 1200\n", "1 .. Gas 1200\n1 .. EMP 1200\n", "2 .. Gas 1200\n .. EMP 1200\n", " .. Gas 1200\n2 .. EMP 1200\n"); l3 = grenstr(GR_TYPE_FRAG, GR_TYPE_NAIL, " .. Frag 1300\n .. Nail 1400\n", "1 .. Frag 1300\n .. Nail 1400\n", " .. Frag 1300\n1 .. Nail 1400\n", "1 .. Frag 1300\n1 .. Nail 1400\n", "2 .. Frag 1300\n .. Nail 1400\n", " .. Frag 1300\n2 .. Nail 1400\n"); l4 = " .. MIRV 1500\n.. \n.. \n.. ! \n"; if (self.tp_grenades_1 == GR_TYPE_MIRV && self.tp_grenades_2 == GR_TYPE_MIRV) l4 = "2 .. MIRV 1500\n.. \n.. \n.. ! \n"; else if (self.tp_grenades_2 == GR_TYPE_MIRV || self.tp_grenades_1 == GR_TYPE_MIRV) l4 = "1 .. MIRV 1500\n.. \n.. \n.. ! \n"; //l4 = "\n.. \n.. \n.. ! \n"; centerprint(self, " Csoie \n Grenades Combat \n\n",l1,l2,l3,l4, temp," dollars left\n"); }; void(float inp) Menu_Gren1_Input = { local string st, st2; st = infokey(world, "no_gasgren"); st2 = infokey (world, "no_spam"); if (inp == 1) BuyGren(500,GR_TYPE_NORMAL); else if (inp == 2) BuyGren(750,GR_TYPE_FLAME); else if (inp == 3) { if (st == "on") { sprint(self, PRINT_HIGH, "The admin has disabled gas grens on this map.\n"); return; } if (st2 == "on") //If admin disable it { sprint(self,PRINT_HIGH,"The admin has disabled spam devices on this map.\n"); return; } BuyGren(1200,GR_TYPE_GAS); } else if (inp == 4) { if (st2 == "on") //If admin disable it { sprint(self,PRINT_HIGH,"The admin has disabled spam devices on this map.\n"); return; } BuyGren(1200,GR_TYPE_EMP); } else if (inp == 5) { if (st2 == "on") //If admin disable it { sprint(self,PRINT_HIGH,"The admin has disabled spam devices on this map.\n"); return; } BuyGren(1300,GR_TYPE_FRAG); } else if (inp == 6) { BuyGren(1400,GR_TYPE_NAIL); } if (inp == 7) { if (st2 == "on") //If admin disable it { sprint(self,PRINT_HIGH,"The admin has disabled spam devices on this map.\n"); return; } BuyGren(1500,GR_TYPE_MIRV); } if (inp == 8) { Menu_Special2(); self.current_menu = MENU_SPECIAL2; } if (inp == 9) { Menu_Gren2(); self.current_menu = MENU_GREN2; } else if (inp == 10) DropFromCustomClassGen(); self.impulse = 0; }; // ==================================== // Prints Menu of Grenade-2s Available // ==================================== void() Menu_Gren2 = { local string temp; temp = ftos(self.money); local string l1,l2,l3,l4; l1 = grenstr(GR_TYPE_FLARE, GR_TYPE_CALTROP, " .. Flare 300\n .. Caltrop 500\n", "1 .. Flare 300\n .. Caltrop 500\n", " .. Flare 300\n1 .. Caltrop 500\n", "1 .. Flare 300\n1 .. Caltrop 500\n", "2 .. Flare 300\n .. Caltrop 500\n", " .. Flare 300\n2 .. Caltrop 500\n"); l2 = grenstr(GR_TYPE_CONCUSSION, GR_TYPE_FLASH, " .. Concussion 1000\n .. Flash 1000\n", "1 .. Concussion 1000\n .. Flash 1000\n", " .. Concussion 1000\n1 .. Flash 1000\n", "1 .. Concussion 1000\n1 .. Flash 1000\n", "2 .. Concussion 1000\n .. Flash 1000\n", " .. Concussion 1000\n2 .. Flash 1000\n"); l3 = grenstr(GR_TYPE_ANTIGRAV, GR_TYPE_BIO, " .. AntiGrav 1000\n .. Bio-Infection 1450\n", "1 .. AntiGrav 1000\n .. Bio-Infection 1450\n", " .. AntiGrav 1000\n1 .. Bio-Infection 1450\n", "1 .. AntiGrav 1000\n1 .. Bio-Infection 1450\n", "2 .. AntiGrav 1000\n .. Bio-Infection 1450\n", " .. AntiGrav 1000\n2 .. Bio-Infection 1450\n"); //.. Flash 1000 //.. Krac 1500 l4 = " .. Krac 1500\n.. \n.. \n.. ! \n"; if (self.tp_grenades_1 == GR_TYPE_KRAC && self.tp_grenades_2 == GR_TYPE_KRAC) l4 = "2 .. Krac 1500\n.. \n.. \n.. ! \n"; else if (self.tp_grenades_1 == GR_TYPE_KRAC || self.tp_grenades_2 == GR_TYPE_KRAC) l4 = "1 .. Krac 1500\n.. \n.. \n.. ! \n"; //l4 = "\n.. \n.. \n.. ! \n"; centerprint(self, " Csoie \n Grenades Utility \n\n",l1,l2,l3,l4, temp," dollars left\n"); }; void(float inp) Menu_Gren2_Input = { local string st, st2; st = infokey(world, "no_antigrav"); st2 = infokey(world, "no_spam"); //WK I should have done all the buy menus like this //SB I reckon - this one actually looks nice and makes sense if (inp == 1) { BuyGren(300, GR_TYPE_FLARE); } if (inp == 2) { if (st2 == "on") sprint(self, PRINT_HIGH, "The admin has disabled spam devices on this map.\n"); else BuyGren(500, GR_TYPE_CALTROP); } if (inp == 3) { BuyGren(1000, GR_TYPE_CONCUSSION); } if (inp == 4) { BuyGren(1000,GR_TYPE_FLASH); } if (inp == 5) { if (st == "on") sprint(self, PRINT_HIGH, "The admin has disabled anti-grav grens on this map.\n"); else BuyGren(1000, GR_TYPE_ANTIGRAV); } if (inp == 6) { BuyGren(1450, GR_TYPE_BIO); } if (inp == 7) { BuyGren(1500, GR_TYPE_KRAC); } else if (inp == 8) { Menu_Gren1(); self.current_menu = MENU_GREN1; } else if (inp == 9) { Menu_Engineering(); self.current_menu = MENU_ENGINEERING; } if (inp == 10) { DropFromCustomClassGen(); } self.impulse = 0; }; ////////////////////////////////////////////////////////////////////////////// // ==================================== // Prints Menu of Grenade-1s Available // ==================================== /*void() Menu_Gren1 = { local string temp; temp = ftos(self.money); local string l1,l2,l3,l4; l1 = eqstr(self.tp_grenades_1, GR_TYPE_NORMAL, GR_TYPE_FLASH, " .. Normal 500\n .. Flash 1000\n", "* .. Normal 500\n .. Flash 1000\n", " .. Normal 500\n* .. Flash 1000\n"); l2 = eqstr(self.tp_grenades_1, GR_TYPE_ANTIGRAV, GR_TYPE_EMP, " .. AntiGrav 1200\n .. EMP 1200\n", "* .. AntiGrav 1200\n .. EMP 1200\n", " .. AntiGrav 1200\n* .. EMP 1200\n"); if (allow_antigrav==0) { l2 = eqstr(self.tp_grenades_1, GR_TYPE_CONCUSSION, GR_TYPE_EMP, " .. Concussion 1000\n .. EMP 1200\n", "* .. Concussion 1000\n .. EMP 1200\n", " .. Concussion 1000\n* .. EMP 1200\n"); } l3 = eqstr(self.tp_grenades_1, GR_TYPE_FRAG, GR_TYPE_FLAME, " .. Frag 1425\n .. Flame 1425\n", "* .. Frag 1425\n .. Flame 1425\n", " .. Frag 1425\n* .. Flame 1425\n"); l4 = " .. Krac 1500\n.. \n.. \n.. ! \n"; if (self.tp_grenades_1 == GR_TYPE_KRAC) l4 = "* .. Krac 1500\n.. \n.. \n.. ! \n"; centerprint(self, " Csoie \n Grenades - 1st Slot\n\n",l1,l2,l3,l4, temp," dollars left\n"); }; void(float inp) Menu_Gren1_Input = { local string st2, st3; st2 = infokey(world, "no_spam"); if (inp <= 10 && inp >= 1) { //WK I should have done all the buy menus like this //SB I reckon - this one actually looks nice and makes sense if (inp == 1) { BuyGren1(500,GR_TYPE_NORMAL); } if (inp == 2) { BuyGren1(1000,GR_TYPE_FLASH); } if (inp == 3) { if (allow_antigrav == 0) //sprint(self,PRINT_HIGH,"The admin has disabled anti-grav grens on this map.\n"); BuyGren1(1000,GR_TYPE_CONCUSSION); else BuyGren1(1200,GR_TYPE_ANTIGRAV); } if (inp == 4) { BuyGren1(1200,GR_TYPE_EMP); } if (inp == 5) { if (st2 == "on") {//If admin disable it sprint(self,PRINT_HIGH,"The admin has disabled spam devices on this map.\n"); return; } BuyGren1(1425,GR_TYPE_FRAG); } if (inp == 6) { BuyGren1(1425,GR_TYPE_FLAME); } if (inp == 7) { BuyGren1(1500,GR_TYPE_KRAC); } if (inp == 8) { Menu_Special2(); self.current_menu = MENU_SPECIAL2; } if (inp == 9) { Menu_Gren2(); self.current_menu = MENU_GREN2; } if (inp == 10) { DropFromCustomClassGen(); } self.impulse = 0; } }; // ==================================== // Prints Menu of Grenade-2s Available // ==================================== void() Menu_Gren2 = { local string temp,st; temp = ftos(self.money); st = infokey(world, "no_flare"); local string l1,l2,l3,l4; l1 = eqstr(self.tp_grenades_2, GR_TYPE_FLARE, GR_TYPE_CONCUSSION, " .. Flare 400\n .. Concussion 1000\n", "* .. Flare 400\n .. Concussion 1000\n", " .. Flare 400\n* .. Concussion 1000\n"); if (st == "on" || st == "1") { l1 = eqstr(self.tp_grenades_2, GR_TYPE_NORMAL, GR_TYPE_CONCUSSION, " .. Normal 500\n .. Concussion 1000\n", "* .. Normal 500\n .. Concussion 1000\n", " .. Normal 500\n* .. Concussion 1000\n"); } l2 = eqstr(self.tp_grenades_2, GR_TYPE_GAS, GR_TYPE_EMP, " .. Gas 1200\n .. EMP 1200\n", "* .. Gas 1200\n .. EMP 1200\n", " .. Gas 1200\n* .. EMP 1200\n"); l3 = eqstr(self.tp_grenades_2, GR_TYPE_MIRV, GR_TYPE_FLAME, " .. MIRV 1200\n .. Flame 1425\n", "* .. MIRV 1200\n .. Flame 1425\n", " .. MIRV 1200\n* .. Flame 1425\n"); l4 = " .. Nail 2000\n.. \n.. \n.. ! \n"; if (self.tp_grenades_2 == GR_TYPE_NAIL) l4 = "* .. Nail 2000\n.. \n.. \n.. ! \n"; centerprint(self, " Csoie \n Grenades - 2nd Slot\n\n", l1,l2,l3,l4, temp," dollars left\n"); }; void(float inp) Menu_Gren2_Input = { local string st, st2,st3; st = infokey(world, "no_gasgren"); st2 = infokey (world, "no_spam"); st3 = infokey(world, "no_flare"); if (inp <= 10 && inp >= 1) { if (inp == 1) { if (st3 == "on" || st3 == "1") BuyGren2(500,GR_TYPE_NORMAL); else BuyGren2(400,GR_TYPE_FLARE); } if (inp == 2) { BuyGren2(1000,GR_TYPE_CONCUSSION); } if (inp == 3) { if (st == "on"){ sprint(self,PRINT_HIGH,"The admin has disabled gas grens on this map.\n"); return; } if (st2 == "on") {//If admin disable it sprint(self,PRINT_HIGH,"The admin has disabled spam devices on this map.\n"); return; } BuyGren2(1200,GR_TYPE_GAS); } if (inp == 4) { BuyGren2(1200,GR_TYPE_EMP); } if (inp == 5) { if (st2 == "on") {//If admin disable it sprint(self,PRINT_HIGH,"The admin has disabled spam devices on this map.\n"); return; } BuyGren2(1200,GR_TYPE_MIRV); } if (inp == 6) { BuyGren2(1425,GR_TYPE_FLAME); } if (inp == 7) { if (st2 == "on") {//If admin disable it sprint(self,PRINT_HIGH,"The admin has disabled spam devices on this map.\n"); return; } BuyGren2(2000,GR_TYPE_NAIL); } if (inp == 8) { Menu_Gren1(); self.current_menu = MENU_GREN1; } if (inp == 9) { Menu_Engineering(); self.current_menu = MENU_ENGINEERING; } if (inp == 10) { DropFromCustomClassGen(); } self.impulse = 0; } };*/ // ==================================== // Prints Menu of Optional Items Here // ==================================== void() Menu_Engineering = { local string temp; temp = ftos(self.money); local string l1,l2,l3,l4; l1 = mstr2(self.weapons_carried,self.cutf_items,WEAP_SPANNER,CUTF_SENTRYGUN, " .. Spanner 1200\n .. Build Sentrygun 1500\n", "* .. Spanner 1200\n .. Build Sentrygun 1500\n", " .. Spanner 1200\n* .. Build Sentrygun 1500\n", "* .. Spanner 1200\n* .. Build Sentrygun 1500\n"); l2 = mstr(self.tf_items,NIT_TURRET,NIT_TESLA, " .. Turret Upgrade 700\n .. Build Tesla 1350\n", "* .. Turret Upgrade 700\n .. Build Tesla 1350\n", " .. Turret Upgrade 700\n* .. Build Tesla 1350\n", "* .. Turret Upgrade 700\n* .. Build Tesla 1350\n"); l3 = mstr(self.tf_items, NIT_TESLA_UPGRADE, NIT_SECURITY_CAMERA, " .. Tesla Upgrade 1650\n .. Build Camera 350\n", "* .. Tesla Upgrade 1650\n .. Build Camera 350\n", " .. Tesla Upgrade 1650\n* .. Build Camera 350\n", "* .. Tesla Upgrade 1650\n* .. Build Camera 350\n"); l4 = " .. BuildTeleporter 1100\n.. \n.. \n.. ! \n"; if (self.tf_items & NIT_TELEPORTER) l4 = "* .. BuildTeleporter 1100\n.. \n.. \n.. ! \n"; centerprint(self, " Csoie \n Engineering Items \n\n", l1,l2,l3,l4, temp," dollars left\n"); }; void(float inp) Menu_Engineering_Input = { if (inp == 1) { BuyWeapon(1200,WEAP_SPANNER); } if (inp == 2) { BuyCuTF(1500,CUTF_SENTRYGUN); } if (inp == 3) { BuyItem(700,NIT_TURRET); } if (inp == 4) { BuyItem(1350,NIT_TESLA); } if (inp == 5) { BuyItem(1650,NIT_TESLA_UPGRADE); } if (inp == 6) { BuyItem(350,NIT_SECURITY_CAMERA); } if (inp == 7) { BuyItem(1100,NIT_TELEPORTER); } if (inp == 8) { Menu_Gren2(); self.current_menu = MENU_GREN2; } if (inp == 9) { if (custom_mode!=1) { Menu_Profession(); self.current_menu = MENU_PROFESSION; } else { Menu_Proficiency(); self.current_menu = MENU_PROFICIENCY; } } if (inp == 10) { DropFromCustomClassGen(); } self.impulse = 0; }; // ===================================== // Prints Menu of Professions Available // ===================================== void() Menu_Profession = { local string temp; temp = ftos(self.money); local string l1,l2,l3,l4; l1 = eqstr(self.job, JOB_THIEF, JOB_RUNNER, " .. Thief Hide 950\n .. Runner Sprint 400\n", "* .. Thief Hide 950\n .. Runner Sprint 400\n", " .. Thief Hide 950\n* .. Runner Sprint 400\n"); l2 = eqstr(self.job, JOB_WARLOCK, JOB_CHAPLAN, " .. Warlock Summon 1350\n .. ChaplanInspire 1200\n", "* .. Warlock Summon 1350\n .. ChaplanInspire 1200\n", " .. Warlock Summon 1350\n* .. ChaplanInspire 1200\n"); l3 = eqstr(self.job, JOB_BERSERKER, JOB_GUERILLA, " .. Berserker Fury 1200\n .. Guerilla Mines 1500\n", "* .. Berserker Fury 1200\n .. Guerilla Mines 1500\n", " .. Berserker Fury 1200\n* .. Guerilla Mines 1500\n"); l4 = " .. Judoka Disarm 700\n.. \n.. \n.. ! \n"; if (self.job == JOB_JUDOKA) l4 = "* .. Judoka Disarm 700\n.. \n.. \n.. ! \n"; centerprint(self, " Csoie \n Skilled Profession \n\n", l1,l2,l3,l4, temp," dollars left\n\nUse to trigger ability\n"); }; void(float inp) Menu_Profession_Input = { if (inp == 1) { BuyJob( 950,JOB_THIEF); } if (inp == 2) { BuyJob( 400,JOB_RUNNER); } if (inp == 3) { //Sync this with price in knife BuyJob( 1350,JOB_WARLOCK); } if (inp == 4) { if (no_chaplan) { sprint(self,PRINT_HIGH,"Chaplan is disabled, sorry.\n"); self.impulse=0; return; } BuyJob(1200,JOB_CHAPLAN); } if (inp == 5) { BuyJob(1200,JOB_BERSERKER); } if (inp == 6) { BuyJob(1500,JOB_GUERILLA); } if (inp == 7) { BuyJob( 700,JOB_JUDOKA); } if (inp == 8) { Menu_Engineering(); self.current_menu = MENU_ENGINEERING; } if (inp == 9) { Menu_Profession2(); self.current_menu = MENU_PROFESSION2; } if (inp == 10) { DropFromCustomClassGen(); } self.impulse = 0; }; // ================================== // Prints Second page of Professions // ================================== void() Menu_Profession2 = { local string temp; temp = ftos(self.money); local string l1,l2,l3,l4; l1 = eqstr(self.job, JOB_ARMY, JOB_HACKER, " .. Army Soldier 1250\n .. CyberNet Hack 1200\n", "* .. Army Soldier 1250\n .. CyberNet Hack 1200\n", " .. Army Soldier 1250\n* .. CyberNet Hack 1200\n"); l2 = eqstr(self.job, JOB_MARTYR, JOB_CRUSADER, " .. Martyr Suicide 1000\n .. Crusader Auras 1600\n", "* .. Martyr Suicide 1000\n .. Crusader Auras 1600\n", " .. Martyr Suicide 1000\n* .. Crusader Auras 1600\n"); /*l2 = eqstr(self.job, JOB_MARTYR, JOB_MYSTIC, " .. Martyr Suicide 1000\n .. Mystic Regen 1000\n", "* .. Martyr Suicide 1000\n .. Mystic Regen 1000\n", " .. Martyr Suicide 1000\n* .. Mystic Regen 1000\n");*/ /*l3 = eqstr(self.job, JOB_BERSERKER, JOB_GUERILLA, " -.. Berserker Fury- 1200\n .. Guerilla Mines- 1500\n", "* -.. Berserker Fury- 1200\n .. Guerilla Mines- 1500\n", " -.. Berserker Fury- 1200\n* .. Guerilla Mines- 1500\n");*/ l4 = "\n.. \n.. \n.. ! \n"; //l3 = "\n\n"; l3 = "\n\n"; /*l2 = " .. Martyr Suicide 1000"; if (self.job == JOB_MARTYR) l2 = "* .. Martyr Suicide 1000";*/ centerprint(self, " Csoie \n More Professions \n\n", l1,l2,l3,l4, temp," dollars left\n\nUse to trigger ability\n"); }; void(float inp) Menu_Profession2_Input = { if (inp == 1) { if (no_army==1) { sprint(self,PRINT_HIGH,"Army job is disabled\n"); self.impulse=0; return; } else BuyJob( 1250,JOB_ARMY); } if (inp == 2) { BuyJob( 1200,JOB_HACKER); } if (inp == 3) { BuyJob( 1000,JOB_MARTYR); } if (inp == 4) { BuyJob(1600,JOB_CRUSADER); } /* if (inp == 5) { BuyJob(1200,JOB_BERSERKER); } if (inp == 6) { BuyJob(1500,JOB_GUERILLA); } if (inp == 7) { BuyJob( 700,JOB_JUDOKA); }*/ if (inp == 8) { Menu_Profession(); self.current_menu = MENU_PROFESSION; } if (inp == 9) { Menu_Proficiency(); self.current_menu = MENU_PROFICIENCY; } if (inp == 10) { DropFromCustomClassGen(); } self.impulse = 0; }; // ===================================== // Prints Menu of Proficiencies Available // ===================================== void() Menu_Proficiency = { local string temp; temp = ftos(self.money); local string l1,l2,l3,l4; l1 = mstr(self.cutf_items, CUTF_STEALTH, CUTF_HIGHJUMP, " .. Stealth 400\n .. Highjump 200\n", "* .. Stealth 400\n .. Highjump 200\n", " .. Stealth 400\n* .. Highjump 200\n", "* .. Stealth 400\n* .. Highjump 200\n"); l2 = mstr(self.cutf_items, CUTF_HWGUY, CUTF_EXPBODY, " .. Aspect of HWGuy 450\n .. Exp. Body 1200\n", "* .. Aspect of HWGuy 450\n .. Exp. Body 1200\n", " .. Aspect of HWGuy 450\n* .. Exp. Body 1200\n", "* .. Aspect of HWGuy 450\n* .. Exp. Body 1200\n"); l3 = mstr(self.cutf_items, CUTF_GYMNAST, CUTF_DEMONLORE, " .. Gymnast 450\n .. Demon Lore 300\n", "* .. Gymnast 450\n .. Demon Lore 300\n", " .. Gymnast 450\n* .. Demon Lore 300\n", "* .. Gymnast 450\n* .. Demon Lore 300\n"); l4 = " .. Close Combat 600\n.. \n.. \n.. ! \n"; if (self.cutf_items & CUTF_CLOSECOMBAT) l4 = "* .. Close Combat 600\n.. \n.. \n.. ! \n"; centerprint(self, " Csoie \n Proficiency \n\n", l1,l2,l3,l4, temp," dollars left\n"); }; void(float inp) Menu_Proficiency_Input = { if (inp == 1) { BuyCuTF( 400,CUTF_STEALTH); } if (inp == 2) { BuyCuTF( 200,CUTF_HIGHJUMP); } if (inp == 3) { if (self.cutf_items & CUTF_GYMNAST) sprint(self, PRINT_HIGH, "Having Gymnast and Aspect of HWGuy proficiencies is illogical.\n"); else BuyCuTF( 450,CUTF_HWGUY); } if (inp == 4) { BuyCuTF(1200,CUTF_EXPBODY); } if (inp == 5) { if (self.cutf_items & CUTF_HWGUY) sprint(self, PRINT_HIGH, "Trust me, you don't want Aspect of HWGuy AND Gymnast.\n"); else BuyCuTF( 450,CUTF_GYMNAST); } if (inp == 6) { BuyCuTF( 300,CUTF_DEMONLORE); } if (inp == 7) { BuyCuTF( 600,CUTF_CLOSECOMBAT); } if (inp == 8) { if (custom_mode!=1) { Menu_Profession2(); self.current_menu = MENU_PROFESSION2; } else { Menu_Engineering(); self.current_menu = MENU_ENGINEERING; } } if (inp == 9) { Menu_Option(); self.current_menu = MENU_OPTION; } if (inp == 10) { DropFromCustomClassGen(); } self.impulse = 0; }; // ==================================== // Prints Menu of Optional Items Here // ==================================== void() Menu_Option = { local string temp; temp = ftos(self.money); local string l1,l2,l3,l4; l1 = mstr(self.tf_items, NIT_AUTOID, NIT_RESPAWN_GUARD, " .. Auto-ID 25\n .. Respawn Guard 25\n", "* .. Auto-ID 25\n .. Respawn Guard 25\n", " .. Auto-ID 25\n* .. Respawn Guard 25\n", "* .. Auto-ID 25\n* .. Respawn Guard 25\n"); //l2 = mstr2(self.cutf_items,self.tf_items,CUTF_OTR,NIT_HOVER_BOOTS, l2 = mstr(self.tf_items,NIT_HOVER_BOOTS, NIT_HOVER_BOOTS_UPGRADE, " .. Hover Boots 850\n .. Boot Upgrade 350\n", "* .. Hover Boots 850\n .. Boot Upgrade 350\n", " .. Hover Boots 850\n* .. Boot Upgrade 350\n", "* .. Hover Boots 850\n* .. Boot Upgrade 350\n"); l3 = mstr2(self.tf_items, self.cutf_items, NIT_RL_LASER_SIGHT, CUTF_OTR, " .. Laser Guided RL 1000\n .. OTR Bullets 1850\n", "* .. Laser Guided RL 1000\n .. OTR Bullets 1850\n", //.. Boot Upgrade 350 " .. Laser Guided RL 1000\n* .. OTR Bullets 1850\n", "* .. Laser Guided RL 1000\n* .. OTR Bullets 1850\n"); l4 = " .. Cluster Rockets 3250\n.. \n.. \n.. ! \n"; if (self.tf_items & NIT_CLUSTER_ROCKETS ) l4 = "* .. Cluster Rockets 3250\n.. \n.. \n.. ! \n"; centerprint(self, " Csoie \n Optional Equipment \n\n", l1,l2,l3,l4, temp," dollars left\n"); }; void(float inp) Menu_Option_Input = { if (inp == 1) { BuyItem(25,NIT_AUTOID); } if (inp == 2) { BuyItem(25,NIT_RESPAWN_GUARD); } if (inp == 6) { if (no_otr==1) { sprint(self,PRINT_HIGH,"OTR bullets are disabled\n"); self.impulse=0; return; } else BuyCuTF(1850,CUTF_OTR); } if (inp == 3) { BuyItem(850,NIT_HOVER_BOOTS); } if (inp == 4) { BuyItem(350, NIT_HOVER_BOOTS_UPGRADE); //sync price with buyitem } if (inp == 5) { BuyItem(1000, NIT_RL_LASER_SIGHT); //sync with RL } if (inp == 7) { if (no_clusters==1) { sprint(self,PRINT_HIGH,"Cluster rockets are disabled\n"); self.impulse=0; return; } else BuyItem(3250, NIT_CLUSTER_ROCKETS); //sync with RL } if (inp == 8) { Menu_Proficiency(); self.current_menu = MENU_PROFICIENCY; } // if (inp == 9) { // centerprint(self, "No next menu\n"); // } if (inp == 10) { DropFromCustomClassGen(); } self.impulse = 0; }; // SB - crusader ability menu void(entity pl, string s1, string s2, string s3) CenterPrint3; /* #define AURA_POWER 1 #define AURA_RESISTANCE 2 #define AURA_HASTE 3 #define AURA_INVIS 4 */ void(float aur) AddAura; void() CrusaderAddInvisibility; void() CrusaderMassHeal; void() CrusaderMassCure; void() CrusaderDispel; void() Menu_Crusader = { local string str1; local float amount; amount = time - self.job_finished; if (amount > 60) amount = 60; str1 = ftos(floor(amount)); if (self.weapons_carried & WEAP_MEDIKIT) CenterPrint3(self, " : \n\n.. Aura of Power 15 mana\n.. Aura of Resistance 15 mana\n.. Aura of Haste 15 mana\n.. Aura of Invisibility 45 mana\n.. Dispel Evil 30 mana\n.. Mass healing 20 mana\n.. Mass cure 20 mana\n.. Sing 0 mana\n\n : ", str1,"\n\n.. "); else CenterPrint3(self, " : \n\n.. Aura of Power 15 mana\n.. Aura of Resistance 15 mana\n.. Aura of Haste 15 mana\n.. Aura of Invisibility 45 mana\n.. Dispel Evil 30 mana\n.. Sing 0 mana\n\n : ", str1,"\n\n.. "); self.StatusRefreshTime = time + 1; }; void(float inp) Menu_Crusader_Input = { // If you read this, this is how you should be doing menus. HEAR ME?? No? Well I assume you // are reading it so that'll have to do. if (inp == 1) AddAura(AURA_POWER); else if (inp == 2) AddAura(AURA_RESISTANCE); else if (inp == 3) AddAura(AURA_HASTE); else if (inp == 4) CrusaderAddInvisibility(); else if (inp == 5) CrusaderDispel(); else if (inp == 6) CrusaderMassHeal(); else if (inp == 7) CrusaderMassCure(); else if (inp == 8) sound (self, CHAN_MUSIC, "ambience/orff.wav", 1, ATTN_NORM); else if (inp == 10) inp = 0; else return; self.impulse = 0; ResetMenu(); };