X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcl_impulse.qc;h=76610f4c3e57da54d79fc73dcbb1ebcb9aabe0a9;hb=737346fcfbe5912ff5de24c2f22c0dbd894429a6;hp=a94ba29015d166cde2577dca407639e3d7163376;hpb=e2ddf7d153328e3f2398d62d07c9e72badd89374;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/cl_impulse.qc b/qcsrc/server/cl_impulse.qc index a94ba2901..dd010214e 100644 --- a/qcsrc/server/cl_impulse.qc +++ b/qcsrc/server/cl_impulse.qc @@ -1,3 +1,20 @@ +#include "_all.qh" +#include "round_handler.qh" + +#include "bot/waypoints.qh" + +#include "weapons/throwing.qh" +#include "command/common.qh" +#include "cheats.qh" +#include "bot/navigation.qh" +#include "weapons/selection.qh" +#include "weapons/tracing.qh" +#include "weapons/weaponsystem.qh" + +#include "../common/minigames/sv_minigames.qh" + +#include "../common/weapons/all.qh" + /* * Impulse map: * @@ -35,7 +52,7 @@ void ImpulseCommands (void) { - float imp; + int imp; vector org; float i; float m; @@ -46,19 +63,28 @@ void ImpulseCommands (void) return; self.impulse = 0; - // forbid impulses when not in round time + if ( self.active_minigame ) + if ( MinigameImpulse(imp) ) + return; + + // allow only weapon change impulses when not in round time if(round_handler_IsActive() && !round_handler_IsRoundStarted()) + if(imp == 17 || (imp >= 20 && imp < 200) || imp > 253) return; if (timeout_status == TIMEOUT_ACTIVE) //don't allow any impulses while the game is paused return; - - if(self.vehicle) - if(self.vehicle.deadflag == DEAD_NO) - if(self.vehicle.vehicles_impusle) - if(self.vehicle.vehicles_impusle(imp)) - return; - + + if(self.vehicle) + if(self.vehicle.deadflag == DEAD_NO) + { + if(self.vehicle.vehicles_impulse) + if(self.vehicle.vehicles_impulse(imp)) + return; + if(vehicle_impulse(imp)) + return; + } + if(CheatImpulse(imp)) { } @@ -67,47 +93,48 @@ void ImpulseCommands (void) // weapon switching impulses if(self.deadflag == DEAD_NO) W_NextWeaponOnImpulse(imp); - else - self.impulse = imp; // retry in next frame + //else + // self.impulse = imp; // retry in next frame } else if(imp >= 10 && imp <= 20) { + if(!self.vehicle) if(self.deadflag == DEAD_NO) { switch(imp) { case 10: - W_NextWeapon (0); + W_NextWeapon(0); break; case 11: W_LastWeapon(); break; case 12: - W_PreviousWeapon (0); + W_PreviousWeapon(0); break; case 13: - W_SwitchWeapon (w_getbestweapon(self)); + W_SwitchWeapon(w_getbestweapon(self)); break; case 14: W_NextWeaponOnImpulse(0); break; case 15: - W_NextWeapon (2); + W_NextWeapon(2); break; case 16: - W_PreviousWeapon (2); + W_PreviousWeapon(2); break; case 17: - W_ThrowWeapon(W_CalculateProjectileVelocity(self.velocity, v_forward * 750, FALSE), '0 0 0', TRUE); + W_ThrowWeapon(W_CalculateProjectileVelocity(self.velocity, v_forward * 750, false), '0 0 0', true); break; case 18: - W_NextWeapon (1); + W_NextWeapon(1); break; case 19: - W_PreviousWeapon (1); + W_PreviousWeapon(1); break; case 20: - W_TriggerReload (); + if(!forbidWeaponUse(self)) { WEP_ACTION(self.weapon, WR_RELOAD); } break; } } @@ -120,10 +147,11 @@ void ImpulseCommands (void) } else if(imp >= 200 && imp <= 229) { + if(!self.vehicle) if(self.deadflag == DEAD_NO) { // custom order weapon cycling - i = mod(imp, 10); + int i = imp % 10; m = (imp - (210 + i)); // <0 for prev, =0 for best, >0 for next W_CycleWeapon(self.(cvar_cl_weaponpriorities[i]), m); } @@ -132,6 +160,7 @@ void ImpulseCommands (void) } else if(imp >= 230 && imp <= 253) { + if(!self.vehicle) if(self.deadflag == DEAD_NO) W_SwitchWeapon (imp - 230 + WEP_FIRST); else @@ -144,14 +173,14 @@ void ImpulseCommands (void) switch(imp) { case 30: - wp = WaypointSprite_DeployPersonal("waypoint", self.origin, RADARICON_WAYPOINT, '0 1 1'); + wp = WaypointSprite_DeployPersonal(WP_Waypoint, self.origin, RADARICON_WAYPOINT); if(wp) WaypointSprite_Ping(wp); sprint(self, "personal waypoint spawned at location\n"); break; case 31: WarpZone_crosshair_trace(self); - wp = WaypointSprite_DeployPersonal("waypoint", trace_endpos, RADARICON_WAYPOINT, '0 1 1'); + wp = WaypointSprite_DeployPersonal(WP_Waypoint, trace_endpos, RADARICON_WAYPOINT); if(wp) WaypointSprite_Ping(wp); sprint(self, "personal waypoint spawned at crosshair\n"); @@ -159,7 +188,7 @@ void ImpulseCommands (void) case 32: if(vlen(self.death_origin)) { - wp = WaypointSprite_DeployPersonal("waypoint", self.death_origin, RADARICON_WAYPOINT, '0 1 1'); + wp = WaypointSprite_DeployPersonal(WP_Waypoint, self.death_origin, RADARICON_WAYPOINT); if(wp) WaypointSprite_Ping(wp); sprint(self, "personal waypoint spawned at death location\n"); @@ -168,9 +197,9 @@ void ImpulseCommands (void) case 33: if(self.deadflag == DEAD_NO && teamplay) { - if not(MUTATOR_CALLHOOK(HelpMePing)) + if (!MUTATOR_CALLHOOK(HelpMePing, self)) { - wp = WaypointSprite_Attach("helpme", TRUE, RADARICON_HELPME, '1 0.5 0'); + wp = WaypointSprite_Attach(WP_Helpme, true, RADARICON_HELPME); if(!wp) WaypointSprite_HelpMePing(self.waypointsprite_attachedforcarrier); else @@ -180,14 +209,14 @@ void ImpulseCommands (void) } break; case 34: - wp = WaypointSprite_DeployFixed("here", FALSE, self.origin, RADARICON_HERE, '0 1 0'); + wp = WaypointSprite_DeployFixed(WP_Here, false, self.origin, RADARICON_HERE); if(wp) WaypointSprite_Ping(wp); sprint(self, "HERE spawned at location\n"); break; case 35: WarpZone_crosshair_trace(self); - wp = WaypointSprite_DeployFixed("here", FALSE, trace_endpos, RADARICON_HERE, '0 1 0'); + wp = WaypointSprite_DeployFixed(WP_Here, false, trace_endpos, RADARICON_HERE); if(wp) WaypointSprite_Ping(wp); sprint(self, "HERE spawned at crosshair\n"); @@ -195,21 +224,21 @@ void ImpulseCommands (void) case 36: if(vlen(self.death_origin)) { - wp = WaypointSprite_DeployFixed("here", FALSE, self.death_origin, RADARICON_HERE, '0 1 0'); + wp = WaypointSprite_DeployFixed(WP_Here, false, self.death_origin, RADARICON_HERE); if(wp) WaypointSprite_Ping(wp); sprint(self, "HERE spawned at death location\n"); } break; case 37: - wp = WaypointSprite_DeployFixed("danger", FALSE, self.origin, RADARICON_DANGER, '1 0.5 0'); + wp = WaypointSprite_DeployFixed(WP_Danger, false, self.origin, RADARICON_DANGER); if(wp) WaypointSprite_Ping(wp); sprint(self, "DANGER spawned at location\n"); break; case 38: WarpZone_crosshair_trace(self); - wp = WaypointSprite_DeployFixed("danger", FALSE, trace_endpos, RADARICON_DANGER, '1 0.5 0'); + wp = WaypointSprite_DeployFixed(WP_Danger, false, trace_endpos, RADARICON_DANGER); if(wp) WaypointSprite_Ping(wp); sprint(self, "DANGER spawned at crosshair\n"); @@ -217,7 +246,7 @@ void ImpulseCommands (void) case 39: if(vlen(self.death_origin)) { - wp = WaypointSprite_DeployFixed("danger", FALSE, self.death_origin, RADARICON_DANGER, '1 0.5 0'); + wp = WaypointSprite_DeployFixed(WP_Danger, false, self.death_origin, RADARICON_DANGER); if(wp) WaypointSprite_Ping(wp); sprint(self, "DANGER spawned at death location\n"); @@ -254,9 +283,9 @@ void ImpulseCommands (void) bprint(strcat("Waypoint spawned at ",vtos(self.origin),"\n")); break; case 104: - e = navigation_findnearestwaypoint(self, FALSE); + e = navigation_findnearestwaypoint(self, false); if (e) - if not(e.wpflags & WAYPOINTFLAG_GENERATED) + if (!(e.wpflags & WAYPOINTFLAG_GENERATED)) { bprint(strcat("Waypoint removed at ",vtos(e.origin),"\n")); waypoint_remove(e); @@ -274,7 +303,7 @@ void ImpulseCommands (void) e.colormod = '0.5 0.5 0.5'; e.effects &= ~(EF_NODEPTHTEST | EF_RED | EF_BLUE); } - e2 = navigation_findnearestwaypoint(self, FALSE); + e2 = navigation_findnearestwaypoint(self, false); navigation_markroutes(e2); i = 0; m = 0; @@ -282,7 +311,7 @@ void ImpulseCommands (void) { if(e.wpcost >= 10000000) { - print("unreachable: ", etos(e), " ", vtos(e.origin), "\n"); + LOG_INFO("unreachable: ", etos(e), " ", vtos(e.origin), "\n"); e.colormod_z = 8; e.effects |= EF_NODEPTHTEST | EF_BLUE; ++i; @@ -290,32 +319,32 @@ void ImpulseCommands (void) } } if(i) - print(ftos(i), " waypoints cannot be reached from here in any way (marked with blue light)\n"); + LOG_INFO(ftos(i), " waypoints cannot be reached from here in any way (marked with blue light)\n"); navigation_markroutes_inverted(e2); i = 0; for(e = findchain(classname, "waypoint"); e; e = e.chain) { if(e.wpcost >= 10000000) { - print("cannot reach me: ", etos(e), " ", vtos(e.origin), "\n"); + LOG_INFO("cannot reach me: ", etos(e), " ", vtos(e.origin), "\n"); e.colormod_x = 8; - if not(e.effects & EF_NODEPTHTEST) // not already reported before + if(!(e.effects & EF_NODEPTHTEST)) // not already reported before ++m; e.effects |= EF_NODEPTHTEST | EF_RED; ++i; } } if(i) - print(ftos(i), " waypoints cannot walk to here in any way (marked with red light)\n"); + LOG_INFO(ftos(i), " waypoints cannot walk to here in any way (marked with red light)\n"); if(m) - print(ftos(m), " waypoints have been marked total\n"); + LOG_INFO(ftos(m), " waypoints have been marked total\n"); i = 0; for(e = findchain(classname, "info_player_deathmatch"); e; e = e.chain) { org = e.origin; tracebox(e.origin, PL_MIN, PL_MAX, e.origin - '0 0 512', MOVE_NOMONSTERS, world); setorigin(e, trace_endpos); - if(navigation_findnearestwaypoint(e, FALSE)) + if(navigation_findnearestwaypoint(e, false)) { setorigin(e, org); e.effects &= ~EF_NODEPTHTEST; @@ -324,7 +353,7 @@ void ImpulseCommands (void) else { setorigin(e, org); - print("spawn without waypoint: ", etos(e), " ", vtos(e.origin), "\n"); + LOG_INFO("spawn without waypoint: ", etos(e), " ", vtos(e.origin), "\n"); e.effects |= EF_NODEPTHTEST; setmodel(e, self.model); e.frame = self.frame; @@ -335,7 +364,7 @@ void ImpulseCommands (void) } } if(i) - print(ftos(i), " spawnpoints have no nearest waypoint (marked by player model)\n"); + LOG_INFO(ftos(i), " spawnpoints have no nearest waypoint (marked by player model)\n"); i = 0; entity start; start = findchainflags(flags, FL_ITEM); @@ -346,42 +375,38 @@ void ImpulseCommands (void) } for(e = start; e; e = e.chain) { - if(navigation_findnearestwaypoint(e, FALSE)) + if(navigation_findnearestwaypoint(e, false)) { } else { - print("item without waypoint: ", etos(e), " ", vtos(e.origin), "\n"); + LOG_INFO("item without waypoint: ", etos(e), " ", vtos(e.origin), "\n"); e.effects |= EF_NODEPTHTEST | EF_RED; e.colormod_x = 8; ++i; } } if(i) - print(ftos(i), " items have no nearest waypoint and cannot be walked away from (marked with red light)\n"); + LOG_INFO(ftos(i), " items have no nearest waypoint and cannot be walked away from (marked with red light)\n"); i = 0; for(e = start; e; e = e.chain) { org = e.origin; - if(navigation_findnearestwaypoint(e, TRUE)) + if(navigation_findnearestwaypoint(e, true)) { } else { - print("item without waypoint: ", etos(e), " ", vtos(e.origin), "\n"); + LOG_INFO("item without waypoint: ", etos(e), " ", vtos(e.origin), "\n"); e.effects |= EF_NODEPTHTEST | EF_BLUE; e.colormod_z = 8; ++i; } } if(i) - print(ftos(i), " items have no nearest waypoint and cannot be walked to (marked with blue light)\n"); + LOG_INFO(ftos(i), " items have no nearest waypoint and cannot be walked to (marked with blue light)\n"); break; } } } -#ifdef TETRIS - else if(imp == 100) - TetrisImpulse(); -#endif }