From 2d56a6439935adc5ac4b2a045269198adc931768 Mon Sep 17 00:00:00 2001 From: div0 Date: Tue, 2 Sep 2008 12:26:09 +0000 Subject: [PATCH] weapon priority lists; non-critical impulses reordered (cleaned up) git-svn-id: svn://svn.icculus.org/nexuiz/trunk@4286 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/cl_impulse.qc | 384 ++++++++++++++++----------- data/qcsrc/server/cl_weapons.qc | 30 ++- data/qcsrc/server/cl_weaponsystem.qc | 6 +- data/qcsrc/server/defs.qh | 11 +- data/qcsrc/server/miscfunctions.qc | 20 +- 5 files changed, 254 insertions(+), 197 deletions(-) diff --git a/data/qcsrc/server/cl_impulse.qc b/data/qcsrc/server/cl_impulse.qc index 18e1001eb..b5b22aab7 100644 --- a/data/qcsrc/server/cl_impulse.qc +++ b/data/qcsrc/server/cl_impulse.qc @@ -64,29 +64,42 @@ void printsurfaceinfo(entity e, vector v) * 10: next weapon * 11: most recently used weapon * 12: previous weapon - * 13: moving clone - * 14: fixed clone + * 13: best weapon * 17: throw weapon - * 19: printsurfaceinfo - * 20: distance + * * 30 to 39: create waypoints * 47: clear personal waypoints * 48: clear team waypoints * 49: turn base waypoints on/off - * 77: ctf speedrun + * * 99: loaded + * + * 140: moving clone + * 141: ctf speedrun + * 142: fixed clone * 143: emergency teleport + * 144: printsurfaceinfo + * 145: distance * * TODO: - * 200 to 219: individual weapons + * 200 to 209: prev weapon shortcuts + * 210 to 219: best weapon shortcuts * 220 to 229: next weapon shortcuts - * 230 to 239: prev weapon shortcuts - * 240 to 249: best weapon shortcuts + * 230 to 253: individual weapons (up to 24) */ void ImpulseCommands (void) { local float imp; + vector start, end, enddown; + float i; + float m; + float good, evil, evilsurf; + float maxattempts; + vector org, delta; + float wep; + entity e; + imp = self.impulse; if (!imp || gameover) return; @@ -95,130 +108,188 @@ void ImpulseCommands (void) if (timeoutStatus == 2) //don't allow any impulses while the game is paused return; - if (imp >= 1 && imp <= 12) + if (imp >= 1 && imp <= 9) { // weapon switching impulses if(self.deadflag == DEAD_NO) { - if (imp <= 9) - W_SwitchWeapon (imp); - else if (imp == 10) - W_NextWeapon (); - else if (imp == 12) - W_PreviousWeapon (); - else if (imp == 11) // last weapon - W_SwitchWeapon (self.cnt); + switch(imp) + { + case 1: W_CycleWeapon("1", 0); break; + case 2: W_CycleWeapon("2", 0); break; + case 3: W_CycleWeapon("3", 0); break; + case 4: W_CycleWeapon("4", 0); break; + case 5: W_CycleWeapon("5", 0); break; + case 6: W_CycleWeapon("6", 0); break; + case 7: W_CycleWeapon("7", 0); break; + case 8: W_CycleWeapon("8", 0); break; + case 9: W_CycleWeapon("9", 0); break; + } } else self.impulse = imp; // retry in next frame } - // throw weapon - else if (imp == 17) + else if(imp >= 10 && imp <= 17) { if(self.deadflag == DEAD_NO) - if (!g_minstagib) - W_ThrowWeapon(W_CalculateProjectileVelocity(self.velocity, v_forward * 750), '0 0 0', TRUE); - } - // deploy waypoints - else if (imp >= 30 && imp <= 49) - { - if(imp == 30) - { - WaypointSprite_DeployPersonal("waypoint", self.origin); - self.personal_v_angle = self.v_angle; - self.personal_velocity = self.velocity; - sprint(self, "personal waypoint spawned at location\n"); - } - else if(imp == 31) - { - WaypointSprite_DeployPersonal("waypoint", self.cursor_trace_endpos); - self.personal_v_angle = self.v_angle; - self.personal_velocity = '0 0 0'; - sprint(self, "personal waypoint spawned at crosshair\n"); - } - else if(imp == 32 && vlen(self.death_origin)) - { - WaypointSprite_DeployPersonal("waypoint", self.death_origin); - self.personal_v_angle = self.v_angle; - self.personal_velocity = '0 0 0'; - sprint(self, "personal waypoint spawned at death location\n"); - } - else if(imp == 33 && self.deadflag == DEAD_NO && teams_matter) { - WaypointSprite_Attach("helpme", TRUE); - sprint(self, "HELP ME attached\n"); - } - else if(imp == 34) - { - WaypointSprite_DeployFixed("here", FALSE, self.origin); - sprint(self, "HERE spawned at location\n"); - } - else if(imp == 35) - { - WaypointSprite_DeployFixed("here", FALSE, self.cursor_trace_endpos); - sprint(self, "HERE spawned at crosshair\n"); - } - else if(imp == 36 && vlen(self.death_origin)) - { - WaypointSprite_DeployFixed("here", FALSE, self.death_origin); - sprint(self, "HERE spawned at death location\n"); - } - else if(imp == 37) - { - WaypointSprite_DeployFixed("danger", FALSE, self.origin); - sprint(self, "DANGER spawned at location\n"); - } - else if(imp == 38) - { - WaypointSprite_DeployFixed("danger", FALSE, self.cursor_trace_endpos); - sprint(self, "DANGER spawned at crosshair\n"); - } - else if(imp == 39 && vlen(self.death_origin)) - { - WaypointSprite_DeployFixed("danger", FALSE, self.death_origin); - sprint(self, "DANGER spawned at death location\n"); - } - else if(imp == 47) - { - WaypointSprite_ClearPersonal(); - sprint(self, "personal waypoint cleared\n"); + switch(imp) + { + case 10: + W_NextWeapon (); + break; + case 11: + W_SwitchWeapon (self.cnt); // previously used + break; + case 12: + W_PreviousWeapon (); + break; + case 13: + W_SwitchWeapon (w_getbestweapon(self)); + break; + case 17: + if (!g_minstagib) + W_ThrowWeapon(W_CalculateProjectileVelocity(self.velocity, v_forward * 750), '0 0 0', TRUE); + break; + } } - else if(imp == 48) + else + self.impulse = imp; // retry in next frame + } + else if(imp >= 200 && imp <= 229) + { + if(self.deadflag == DEAD_NO) { - WaypointSprite_ClearOwned(); - sprint(self, "all waypoints cleared\n"); + // custom order weapon cycling + i = mod(imp, 10); + m = (imp - (210 + i)); // <0 for prev, =0 for best, >0 for next + W_CycleWeapon(self.(cvar_cl_weaponpriorities[i]), m); } - else if(imp == 49) + else + self.impulse = imp; // retry in next frame + } + else if(imp >= 230 && imp <= 253) + { + if(self.deadflag == DEAD_NO) + W_SwitchWeapon (imp - 230 + WEP_FIRST); + else + self.impulse = imp; // retry in next frame + } + // deploy waypoints + else if (imp >= 30 && imp <= 49) + { + switch(imp) { - self.cvar_cl_hidewaypoints = !(self.cvar_cl_hidewaypoints); - sprint(self, "fixed waypoints now "); - if(self.cvar_cl_hidewaypoints) - sprint(self, "OFF\n"); - else - sprint(self, "ON\n"); + case 30: + WaypointSprite_DeployPersonal("waypoint", self.origin); + self.personal_v_angle = self.v_angle; + self.personal_velocity = self.velocity; + sprint(self, "personal waypoint spawned at location\n"); + break; + case 31: + WaypointSprite_DeployPersonal("waypoint", self.cursor_trace_endpos); + self.personal_v_angle = self.v_angle; + self.personal_velocity = '0 0 0'; + sprint(self, "personal waypoint spawned at crosshair\n"); + break; + case 32: + if(vlen(self.death_origin)) + { + WaypointSprite_DeployPersonal("waypoint", self.death_origin); + self.personal_v_angle = self.v_angle; + self.personal_velocity = '0 0 0'; + sprint(self, "personal waypoint spawned at death location\n"); + } + break; + case 33: + if(self.deadflag == DEAD_NO && teams_matter) + { + WaypointSprite_Attach("helpme", TRUE); + sprint(self, "HELP ME attached\n"); + } + break; + case 34: + WaypointSprite_DeployFixed("here", FALSE, self.origin); + sprint(self, "HERE spawned at location\n"); + break; + case 35: + WaypointSprite_DeployFixed("here", FALSE, self.cursor_trace_endpos); + sprint(self, "HERE spawned at crosshair\n"); + break; + case 36: + if(vlen(self.death_origin)) + { + WaypointSprite_DeployFixed("here", FALSE, self.death_origin); + sprint(self, "HERE spawned at death location\n"); + } + break; + case 37: + WaypointSprite_DeployFixed("danger", FALSE, self.origin); + sprint(self, "DANGER spawned at location\n"); + break; + case 38: + WaypointSprite_DeployFixed("danger", FALSE, self.cursor_trace_endpos); + sprint(self, "DANGER spawned at crosshair\n"); + break; + case 39: + if(vlen(self.death_origin)) + { + WaypointSprite_DeployFixed("danger", FALSE, self.death_origin); + sprint(self, "DANGER spawned at death location\n"); + } + break; + case 47: + WaypointSprite_ClearPersonal(); + sprint(self, "personal waypoint cleared\n"); + break; + case 48: + WaypointSprite_ClearOwned(); + sprint(self, "all waypoints cleared\n"); + break; + case 49: + self.cvar_cl_hidewaypoints = !(self.cvar_cl_hidewaypoints); + sprint(self, "fixed waypoints now "); + if(self.cvar_cl_hidewaypoints) + sprint(self, "OFF\n"); + else + sprint(self, "ON\n"); + break; } } - else + else if(imp >= 140 && imp <= 149 || imp == 99) // 10 cheats ought to be enough for anyone { - if (sv_cheats) + if(sv_cheats) + if(self.deadflag == DEAD_NO) { - if(imp == 19) - { - makevectors(self.v_angle); - traceline(self.origin + self.view_ofs, self.origin + self.view_ofs + v_forward * MAX_SHOT_DISTANCE, FALSE, self); - if (trace_fraction < 1) - printsurfaceinfo(trace_ent, trace_endpos); - } - else if(imp == 20) - { - makevectors(self.v_angle); - traceline(self.origin + self.view_ofs, self.origin + self.view_ofs + v_forward * 65536, FALSE, self); - sprint(self, strcat("distance: ", ftos(fabs(vlen(trace_endpos - (self.origin + self.view_ofs)))), "\n")); - } - else if(self.deadflag == DEAD_NO) + switch(imp) { - if(imp == 77) - { + case 99: + self.items |= (IT_LASER | IT_UZI | IT_SHOTGUN | IT_GRENADE_LAUNCHER | IT_ELECTRO | IT_CRYLINK | IT_NEX | IT_HAGAR | IT_ROCKET_LAUNCHER); + self.ammo_shells = g_pickup_shells_max; + self.ammo_nails = g_pickup_nails_max; + self.ammo_rockets = g_pickup_rockets_max; + self.ammo_cells = g_pickup_cells_max; + self.health = g_pickup_healthsmall_max; + self.armorvalue = g_pickup_armorsmall_max; + self.pauserotarmor_finished = time + cvar("g_balance_pause_armor_rot_spawn"); + self.pauserothealth_finished = time + cvar("g_balance_pause_health_rot_spawn"); + self.pauseregen_finished = time + cvar("g_balance_pause_health_regen_spawn"); + // precache weapon models/sounds + wep = WEP_FIRST; + while (wep <= WEP_LAST) + { + weapon_action(wep, WR_PRECACHE); + wep = wep + 1; + } + break; + case 140: + makevectors (self.v_angle); + self.velocity = self.velocity + v_forward * 300; + CopyBody(1); + self.lip += 1; + self.velocity = self.velocity - v_forward * 300; + break; + case 141: if(self.waypointsprite_deployed_personal) { self.speedrunning = TRUE; @@ -251,52 +322,16 @@ void ImpulseCommands (void) self.pauserothealth_finished = time + cvar("g_balance_pause_health_rot_spawn"); self.pauseregen_finished = time + cvar("g_balance_pause_health_regen_spawn"); } + else if(self.deadflag != DEAD_NO) + sprint(self, "UR DEAD AHAHAH))\n"); else sprint(self, "No waypoint set, cheater (use g_waypointsprite_personal to set one)\n"); - } - else if(imp == 99) - { - self.items |= (IT_LASER | IT_UZI | IT_SHOTGUN | IT_GRENADE_LAUNCHER | IT_ELECTRO | IT_CRYLINK | IT_NEX | IT_HAGAR | IT_ROCKET_LAUNCHER); - self.ammo_shells = g_pickup_shells_max; - self.ammo_nails = g_pickup_nails_max; - self.ammo_rockets = g_pickup_rockets_max; - self.ammo_cells = g_pickup_cells_max; - self.health = g_pickup_healthsmall_max; - self.armorvalue = g_pickup_armorsmall_max; - self.pauserotarmor_finished = time + cvar("g_balance_pause_armor_rot_spawn"); - self.pauserothealth_finished = time + cvar("g_balance_pause_health_rot_spawn"); - self.pauseregen_finished = time + cvar("g_balance_pause_health_regen_spawn"); - // precache weapon models/sounds - local float wep; - wep = WEP_FIRST; - while (wep <= WEP_LAST) - { - weapon_action(wep, WR_PRECACHE); - wep = wep + 1; - } - } - else if (imp == 13) - { - makevectors (self.v_angle); - self.velocity = self.velocity + v_forward * 300; - CopyBody(1); - self.lip += 1; - self.velocity = self.velocity - v_forward * 300; - } - else if (imp == 14) - { + break; + case 142: CopyBody(0); self.lip += 1; - } - else if (imp == 143) // actually: impulse 911 - { - vector start, end, enddown; - float i; - float m; - float good, evil, evilsurf; - float maxattempts; - vector org, delta; - + break; + case 143: good = DPCONTENTS_SOLID | DPCONTENTS_CORPSE | DPCONTENTS_PLAYERCLIP; evil = DPCONTENTS_SLIME | DPCONTENTS_LAVA | DPCONTENTS_SKY | DPCONTENTS_BODY | DPCONTENTS_DONOTENTER; evilsurf = Q3SURFACEFLAG_SKY; @@ -390,18 +425,43 @@ void ImpulseCommands (void) sprint(self, "Emergency teleport could not find a good location, forget it!\n"); self.dphitcontentsmask = m; - } + break; + case 144: + makevectors(self.v_angle); + traceline(self.origin + self.view_ofs, self.origin + self.view_ofs + v_forward * MAX_SHOT_DISTANCE, FALSE, self); + if (trace_fraction < 1) + printsurfaceinfo(trace_ent, trace_endpos); + break; + case 145: + makevectors(self.v_angle); + traceline(self.origin + self.view_ofs, self.origin + self.view_ofs + v_forward * 65536, FALSE, self); + sprint(self, strcat("distance: ", ftos(fabs(vlen(trace_endpos - (self.origin + self.view_ofs)))), "\n")); + break; } } } - - if (cvar("g_waypointeditor")) + else if(imp >= 103 && imp <= 106) { - local entity e; - if (imp == 103) waypoint_schedulerelink(waypoint_spawn(self.origin, self.origin, 0)); - else if (imp == 104) {e = navigation_findnearestwaypoint(self, FALSE);if (e) waypoint_remove(e);} - else if (imp == 105) waypoint_schedulerelinkall(); - else if (imp == 106) waypoint_saveall(); + if(cvar("g_waypointeditor")) + { + switch(imp) + { + case 103: + waypoint_schedulerelink(waypoint_spawn(self.origin, self.origin, 0)); + break; + case 104: + e = navigation_findnearestwaypoint(self, FALSE); + if (e) + waypoint_remove(e); + break; + case 105: + waypoint_schedulerelinkall(); + break; + case 106: + waypoint_saveall(); + break; + } + } } //TetrisImpulses(imp); diff --git a/data/qcsrc/server/cl_weapons.qc b/data/qcsrc/server/cl_weapons.qc index d5eaab708..50ab57a41 100644 --- a/data/qcsrc/server/cl_weapons.qc +++ b/data/qcsrc/server/cl_weapons.qc @@ -9,12 +9,12 @@ void W_SwitchWeapon(float imp) } }; -float W_GetCycleWeapon(entity pl, string weaponorder, float dir) +float W_GetCycleWeapon(entity pl, string weaponorder, float dir, float complain) { float n, i, weaponwant, first_valid, prev_valid, switchtonext, switchtolast; n = tokenize(weaponorder); switchtonext = switchtolast = 0; - first_valid = prev_valid = -1; + first_valid = prev_valid = 0; if(dir == 0) switchtonext = 1; @@ -26,14 +26,14 @@ float W_GetCycleWeapon(entity pl, string weaponorder, float dir) { if(switchtonext) return weaponwant; - if(first_valid < 0) + if(!first_valid) first_valid = weaponwant; prev_valid = weaponwant; if(weaponwant == pl.switchweapon) { if(dir >= 0) switchtonext = 1; - else if(prev_valid >= 0) + else if(prev_valid) return prev_valid; else { @@ -43,25 +43,31 @@ float W_GetCycleWeapon(entity pl, string weaponorder, float dir) } } } - if(first_valid >= 0) + if(first_valid) { if(switchtolast) return prev_valid; else return first_valid; } - return -1; + // complain + if(complain) + { + for(i = 0; i < n; ++i) + { + weaponwant = stof(argv(i)); + client_hasweapon(pl, weaponwant, TRUE, TRUE); + } + } + return 0; } void W_CycleWeapon(string weaponorder, float dir) { float w; - w = W_GetCycleWeapon(self, weaponorder, dir); - if(w >= 0) + w = W_GetCycleWeapon(self, weaponorder, dir, 1); + if(w > 0) W_SwitchWeapon(w); - else - // none available - sprint(self, "You do not have any of the specified weapons.\n"); } // next weapon @@ -117,7 +123,7 @@ string W_FixWeaponOrder_ForceComplete(string order) float w_getbestweapon(entity e) { - return W_GetCycleWeapon(e, e.cvar_cl_weaponpriority, 0); + return W_GetCycleWeapon(e, e.cvar_cl_weaponpriority, 0, 0); }; // generic weapons table diff --git a/data/qcsrc/server/cl_weaponsystem.qc b/data/qcsrc/server/cl_weaponsystem.qc index fbb79eb25..e1ad9c97c 100644 --- a/data/qcsrc/server/cl_weaponsystem.qc +++ b/data/qcsrc/server/cl_weaponsystem.qc @@ -346,7 +346,7 @@ float client_hasweapon(entity cl, float wpn, float andammo, float complain) if (!f) { if (complain) - sprint(self, "You don't have any ammo for that weapon\n"); + sprint(cl, strcat("You don't have any ammo for the ^2", W_Name(wpn), "\n")); return FALSE; } } @@ -357,9 +357,9 @@ float client_hasweapon(entity cl, float wpn, float andammo, float complain) // DRESK - 3/16/07 // Report Proper Weapon Status / Modified Weapon Ownership Message if(itemsInMap & itemcode) - sprint(self, strcat("You do not have the ^2", W_Name(wpn), "\n") ); + sprint(cl, strcat("You do not have the ^2", W_Name(wpn), "\n") ); else - sprint(self, strcat("The ^2", W_Name(wpn), "^7 is ^1NOT AVAILABLE^7 in this map\n") ); + sprint(cl, strcat("The ^2", W_Name(wpn), "^7 is ^1NOT AVAILABLE^7 in this map\n") ); } return FALSE; }; diff --git a/data/qcsrc/server/defs.qh b/data/qcsrc/server/defs.qh index d1bbe1726..36ce052f6 100644 --- a/data/qcsrc/server/defs.qh +++ b/data/qcsrc/server/defs.qh @@ -347,16 +347,7 @@ float default_weapon_alpha; .float cvar_cl_hidewaypoints; .string cvar_g_nexuizversion; .string cvar_cl_weaponpriority; -.string cvar_cl_weaponpriority0; -.string cvar_cl_weaponpriority1; -.string cvar_cl_weaponpriority2; -.string cvar_cl_weaponpriority3; -.string cvar_cl_weaponpriority4; -.string cvar_cl_weaponpriority5; -.string cvar_cl_weaponpriority6; -.string cvar_cl_weaponpriority7; -.string cvar_cl_weaponpriority8; -.string cvar_cl_weaponpriority9; +.string cvar_cl_weaponpriorities[10]; .float version_nagtime; diff --git a/data/qcsrc/server/miscfunctions.qc b/data/qcsrc/server/miscfunctions.qc index 133b7bc2f..3d5dc937f 100644 --- a/data/qcsrc/server/miscfunctions.qc +++ b/data/qcsrc/server/miscfunctions.qc @@ -527,16 +527,16 @@ void GetCvars(float f) GetCvars_handleString(f, cvar_g_nexuizversion, "g_nexuizversion"); GetCvars_handleFloat(f, cvar_cl_handicap, "cl_handicap"); GetCvars_handleString_Fixup(f, cvar_cl_weaponpriority, "cl_weaponpriority", W_FixWeaponOrder_ForceComplete); - GetCvars_handleString_Fixup(f, cvar_cl_weaponpriority0, "cl_weaponpriority0", W_FixWeaponOrder_AllowIncomplete); - GetCvars_handleString_Fixup(f, cvar_cl_weaponpriority1, "cl_weaponpriority1", W_FixWeaponOrder_AllowIncomplete); - GetCvars_handleString_Fixup(f, cvar_cl_weaponpriority2, "cl_weaponpriority2", W_FixWeaponOrder_AllowIncomplete); - GetCvars_handleString_Fixup(f, cvar_cl_weaponpriority3, "cl_weaponpriority3", W_FixWeaponOrder_AllowIncomplete); - GetCvars_handleString_Fixup(f, cvar_cl_weaponpriority4, "cl_weaponpriority4", W_FixWeaponOrder_AllowIncomplete); - GetCvars_handleString_Fixup(f, cvar_cl_weaponpriority5, "cl_weaponpriority5", W_FixWeaponOrder_AllowIncomplete); - GetCvars_handleString_Fixup(f, cvar_cl_weaponpriority6, "cl_weaponpriority6", W_FixWeaponOrder_AllowIncomplete); - GetCvars_handleString_Fixup(f, cvar_cl_weaponpriority7, "cl_weaponpriority7", W_FixWeaponOrder_AllowIncomplete); - GetCvars_handleString_Fixup(f, cvar_cl_weaponpriority8, "cl_weaponpriority8", W_FixWeaponOrder_AllowIncomplete); - GetCvars_handleString_Fixup(f, cvar_cl_weaponpriority9, "cl_weaponpriority9", W_FixWeaponOrder_AllowIncomplete); + GetCvars_handleString_Fixup(f, cvar_cl_weaponpriorities[0], "cl_weaponpriority0", W_FixWeaponOrder_AllowIncomplete); + GetCvars_handleString_Fixup(f, cvar_cl_weaponpriorities[1], "cl_weaponpriority1", W_FixWeaponOrder_AllowIncomplete); + GetCvars_handleString_Fixup(f, cvar_cl_weaponpriorities[2], "cl_weaponpriority2", W_FixWeaponOrder_AllowIncomplete); + GetCvars_handleString_Fixup(f, cvar_cl_weaponpriorities[3], "cl_weaponpriority3", W_FixWeaponOrder_AllowIncomplete); + GetCvars_handleString_Fixup(f, cvar_cl_weaponpriorities[4], "cl_weaponpriority4", W_FixWeaponOrder_AllowIncomplete); + GetCvars_handleString_Fixup(f, cvar_cl_weaponpriorities[5], "cl_weaponpriority5", W_FixWeaponOrder_AllowIncomplete); + GetCvars_handleString_Fixup(f, cvar_cl_weaponpriorities[6], "cl_weaponpriority6", W_FixWeaponOrder_AllowIncomplete); + GetCvars_handleString_Fixup(f, cvar_cl_weaponpriorities[7], "cl_weaponpriority7", W_FixWeaponOrder_AllowIncomplete); + GetCvars_handleString_Fixup(f, cvar_cl_weaponpriorities[8], "cl_weaponpriority8", W_FixWeaponOrder_AllowIncomplete); + GetCvars_handleString_Fixup(f, cvar_cl_weaponpriorities[9], "cl_weaponpriority9", W_FixWeaponOrder_AllowIncomplete); } float fexists(string f) -- 2.39.2