X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcl_client.qc;h=85c96445acbdbdf85701b5e7524b17e3c83f2255;hb=2bb2db9c0f8016645a23381d7493588d748ecacf;hp=2f9c0d8312fae7091b9570070db75e7b405a71c8;hpb=7094e1bf39336183150e9da00f9d3e2d7d0b664b;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 2f9c0d831..85c96445a 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -405,8 +405,6 @@ void PutObserverInServer (void) MUTATOR_CALLHOOK(MakePlayerObserver); - minstagib_stop_countdown(self); - Portal_ClearAll(self); if(self.alivetime) @@ -662,10 +660,7 @@ void PutClientInServer (void) if(autocvar__notarget) self.flags |= FL_NOTARGET; self.takedamage = DAMAGE_AIM; - if(g_minstagib) - self.effects = EF_FULLBRIGHT; - else - self.effects = 0; + self.effects = 0; self.effects |= EF_TELEPORT_BIT | EF_RESTARTANIM_BIT; self.air_finished = time + 12; self.dmg = 2; @@ -808,14 +803,7 @@ void PutClientInServer (void) //stuffcmd(self, "chase_active 0"); //stuffcmd(self, "set viewsize $tmpviewsize \n"); - - if(g_assault) { - if(self.team == assault_attacker_team) - Send_Notification(NOTIF_TEAM, self, MSG_CENTER, CENTER_ASSAULT_ATTACKING); - else - Send_Notification(NOTIF_TEAM, self, MSG_CENTER, CENTER_ASSAULT_DEFENDING); - } - + target_voicescript_clear(self); // reset fields the weapons may use @@ -1694,55 +1682,7 @@ void player_powerups (void) Fire_ApplyDamage(self); Fire_ApplyEffect(self); - if (g_minstagib) - { - self.effects |= EF_FULLBRIGHT; - - if (self.items & IT_STRENGTH) - { - play_countdown(self.strength_finished, "misc/poweroff.wav"); - if (time > self.strength_finished) - { - self.alpha = default_player_alpha; - self.exteriorweaponentity.alpha = default_weapon_alpha; - self.items &~= IT_STRENGTH; - //Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_POWERDOWN_INVISIBILITY, self.netname); - Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERDOWN_INVISIBILITY); - } - } - else - { - if (time < self.strength_finished) - { - self.alpha = g_minstagib_invis_alpha; - self.exteriorweaponentity.alpha = g_minstagib_invis_alpha; - self.items |= IT_STRENGTH; - Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_POWERUP_INVISIBILITY, self.netname); - Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERUP_INVISIBILITY); - } - } - - if (self.items & IT_INVINCIBLE) - { - play_countdown(self.invincible_finished, "misc/poweroff.wav"); - if (time > self.invincible_finished) - { - self.items = self.items - (self.items & IT_INVINCIBLE); - //Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_POWERDOWN_SPEED, self.netname); - Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERDOWN_SPEED); - } - } - else - { - if (time < self.invincible_finished) - { - self.items = self.items | IT_INVINCIBLE; - Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_POWERUP_SPEED, self.netname); - Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERUP_SPEED); - } - } - } - else // if we're not in minstagib, continue. I added this else to replace the "return" which was here that broke the callhook for this function -- This code is nasty. + if not(g_minstagib) { if (self.items & IT_STRENGTH) { @@ -2096,6 +2036,46 @@ float SpectateUpdate() { } +float SpectateSet() +{ + if(self.enemy.classname != "player") + return FALSE; + /*if(self.enemy.vehicle) + { + + msg_entity = self; + WriteByte(MSG_ONE, SVC_SETVIEW); + WriteEntity(MSG_ONE, self.enemy); + //stuffcmd(self, "set viewsize $tmpviewsize \n"); + + self.movetype = MOVETYPE_NONE; + accuracy_resend(self); + } + else + {*/ + msg_entity = self; + WriteByte(MSG_ONE, SVC_SETVIEW); + WriteEntity(MSG_ONE, self.enemy); + //stuffcmd(self, "set viewsize $tmpviewsize \n"); + self.movetype = MOVETYPE_NONE; + accuracy_resend(self); + + if(!SpectateUpdate()) + PutObserverInServer(); + //} + return TRUE; +} + +float Spectate(entity pl) +{ + if(g_ca && !autocvar_g_ca_spectate_enemies && self.caplayer) + if(pl.team != self.team) + return 0; + + self.enemy = pl; + return SpectateSet(); +} + // Returns next available player to spectate if g_ca_spectate_enemies == 0 entity CA_SpectateNext(entity start) { if (start.team == self.team) { @@ -2119,13 +2099,10 @@ entity CA_SpectateNext(entity start) { return other; } -float SpectateNext(entity _prefer) { - - if(_prefer) - other = _prefer; - else - other = find(self.enemy, classname, "player"); - +float SpectateNext() +{ + other = find(self.enemy, classname, "player"); + if (g_ca && !autocvar_g_ca_spectate_enemies && self.caplayer) { // CA and ca players when spectating enemies is forbidden other = CA_SpectateNext(other); @@ -2134,38 +2111,49 @@ float SpectateNext(entity _prefer) { if (!other) other = find(other, classname, "player"); } - + if (other) self.enemy = other; - if(self.enemy.classname == "player") { - /*if(self.enemy.vehicle) - { - - msg_entity = self; - WriteByte(MSG_ONE, SVC_SETVIEW); - WriteEntity(MSG_ONE, self.enemy); - //stuffcmd(self, "set viewsize $tmpviewsize \n"); - - self.movetype = MOVETYPE_NONE; - accuracy_resend(self); - } - else - {*/ - msg_entity = self; - WriteByte(MSG_ONE, SVC_SETVIEW); - WriteEntity(MSG_ONE, self.enemy); - //stuffcmd(self, "set viewsize $tmpviewsize \n"); - self.movetype = MOVETYPE_NONE; - accuracy_resend(self); - - if(!SpectateUpdate()) - PutObserverInServer(); - //} - return 1; - } else { - return 0; + return SpectateSet(); +} + +float SpectatePrev() +{ + // NOTE: chain order is from the highest to the lower entnum (unlike find) + other = findchain(classname, "player"); + if not(other) // no player + return FALSE; + + entity first = other; + // skip players until current spectated player + if(self.enemy) + while(other && other != self.enemy) + other = other.chain; + + if (g_ca && !autocvar_g_ca_spectate_enemies && self.caplayer) + { + do { other = other.chain; } + while(other && other.team != self.team); + + if not(other) + { + other = first; + while(other.team != self.team) + other = other.chain; + if(other == self.enemy) + return TRUE; + } } + else + { + if(other.chain) + other = other.chain; + else + other = first; + } + self.enemy = other; + return SpectateSet(); } /* @@ -2336,7 +2324,7 @@ void ObserverThink() self.flags |= FL_SPAWNING; } else if(self.BUTTON_ATCK && !self.version_mismatch) { self.flags &~= FL_JUMPRELEASED; - if(SpectateNext(world) == 1) { + if(SpectateNext()) { self.classname = "spectator"; } } else { @@ -2363,14 +2351,24 @@ void SpectatorThink() if (self.BUTTON_JUMP && !self.version_mismatch) { self.flags &~= FL_JUMPRELEASED; self.flags |= FL_SPAWNING; - } else if(self.BUTTON_ATCK) { + } else if(self.BUTTON_ATCK || self.impulse == 10 || self.impulse == 15 || self.impulse == 18 || self.impulse >= 200 && self.impulse <= 209) { self.flags &~= FL_JUMPRELEASED; - if(SpectateNext(world) == 1) { + if(SpectateNext()) { self.classname = "spectator"; } else { self.classname = "observer"; PutClientInServer(); } + self.impulse = 0; + } else if(self.impulse == 12 || self.impulse == 16 || self.impulse == 19 || self.impulse >= 220 && self.impulse <= 229) { + self.flags &~= FL_JUMPRELEASED; + if(SpectatePrev()) { + self.classname = "spectator"; + } else { + self.classname = "observer"; + PutClientInServer(); + } + self.impulse = 0; } else if (self.BUTTON_ATCK2) { self.flags &~= FL_JUMPRELEASED; self.classname = "observer"; @@ -2549,9 +2547,6 @@ void PlayerPreThink (void) player_powerups(); } - if (g_minstagib) - minstagib_ammocheck(); - if (self.deadflag != DEAD_NO) { if(self.personal && g_race_qualifying)