]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/client.qc
Improve and add context to some translatable messages
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / client.qc
index 2f45c06aed9adbab7ebd8d499e1bf4ee3d6e768b..af2846c8cdaf84838a0fa38d8a9bc1f9d31edbf2 100644 (file)
@@ -1323,20 +1323,29 @@ void UpdateChatBubble(entity this)
 
 void respawn(entity this)
 {
-       if(this.alpha >= 0 && autocvar_g_respawn_ghosts)
-       {
-               this.solid = SOLID_NOT;
-               this.takedamage = DAMAGE_NO;
-               set_movetype(this, MOVETYPE_FLY);
-               this.velocity = '0 0 1' * autocvar_g_respawn_ghosts_speed;
-               this.avelocity = randomvec() * autocvar_g_respawn_ghosts_speed * 3 - randomvec() * autocvar_g_respawn_ghosts_speed * 3;
-               this.effects |= CSQCMODEL_EF_RESPAWNGHOST;
-               Send_Effect(EFFECT_RESPAWN_GHOST, this.origin, '0 0 0', 1);
-               if(autocvar_g_respawn_ghosts_maxtime)
-                       SUB_SetFade (this, time + autocvar_g_respawn_ghosts_maxtime / 2 + random () * (autocvar_g_respawn_ghosts_maxtime - autocvar_g_respawn_ghosts_maxtime / 2), 1.5);
+       bool damagedbycontents_prev = this.damagedbycontents;
+       if(this.alpha >= 0)
+       {
+               if(autocvar_g_respawn_ghosts)
+               {
+                       this.solid = SOLID_NOT;
+                       this.takedamage = DAMAGE_NO;
+                       this.damagedbycontents = false;
+                       set_movetype(this, MOVETYPE_FLY);
+                       this.velocity = '0 0 1' * autocvar_g_respawn_ghosts_speed;
+                       this.avelocity = randomvec() * autocvar_g_respawn_ghosts_speed * 3 - randomvec() * autocvar_g_respawn_ghosts_speed * 3;
+                       this.effects |= CSQCMODEL_EF_RESPAWNGHOST;
+                       this.alpha = min(this.alpha, autocvar_g_respawn_ghosts_alpha);
+                       Send_Effect(EFFECT_RESPAWN_GHOST, this.origin, '0 0 0', 1);
+                       if(autocvar_g_respawn_ghosts_time > 0)
+                               SUB_SetFade(this, time + autocvar_g_respawn_ghosts_time, autocvar_g_respawn_ghosts_fadetime);
+               }
+               else
+                       SUB_SetFade (this, time, 1); // fade out the corpse immediately
        }
 
        CopyBody(this, 1);
+       this.damagedbycontents = damagedbycontents_prev;
 
        this.effects |= EF_NODRAW; // prevent another CopyBody
        PutClientInServer(this);
@@ -1407,9 +1416,6 @@ void play_countdown(entity this, float finished, Sound samp)
 
 void player_powerups(entity this)
 {
-       // add a way to see what the items were BEFORE all of these checks for the mutator hook
-       int items_prev = this.items;
-
        if((this.items & IT_USING_JETPACK) && !IS_DEAD(this) && !game_stopped)
                this.modelflags |= MF_ROCKET;
        else
@@ -1417,9 +1423,24 @@ void player_powerups(entity this)
 
        this.effects &= ~(EF_RED | EF_BLUE | EF_ADDITIVE | EF_FULLBRIGHT | EF_FLAME | EF_NODEPTHTEST);
 
+       if (IS_DEAD(this))
+       {
+               if (this.items & (ITEM_Strength.m_itemid | ITEM_Shield.m_itemid | IT_SUPERWEAPON))
+               {
+                       sound(this, CH_INFO, SND_POWEROFF, VOL_BASE, ATTEN_NORM);
+                       stopsound(this, CH_TRIGGER_SINGLE); // get rid of the pickup sound
+                       this.items &= ~ITEM_Strength.m_itemid;
+                       this.items &= ~ITEM_Shield.m_itemid;
+                       this.items -= (this.items & IT_SUPERWEAPON);
+               }
+       }
+
        if((this.alpha < 0 || IS_DEAD(this)) && !this.vehicle) // don't apply the flags if the player is gibbed
                return;
 
+       // add a way to see what the items were BEFORE all of these checks for the mutator hook
+       int items_prev = this.items;
+
        Fire_ApplyDamage(this);
        Fire_ApplyEffect(this);
 
@@ -2101,7 +2122,6 @@ bool joinAllowed(entity this)
        return true;
 }
 
-.int items_added;
 .string shootfromfixedorigin;
 .bool dualwielding_prev;
 bool PlayerThink(entity this)
@@ -2218,8 +2238,6 @@ bool PlayerThink(entity this)
        // LordHavoc: allow firing on move frames (sub-ticrate), this gives better timing on slow servers
        //if(frametime)
        {
-               this.items &= ~this.items_added;
-
                for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
                {
                        .entity weaponentity = weaponentities[slot];
@@ -2227,12 +2245,6 @@ bool PlayerThink(entity this)
                                W_Vortex_Charge(this, weaponentity, frametime);
                        W_WeaponFrame(this, weaponentity);
                }
-
-               this.items_added = 0;
-               if ((this.items & ITEM_Jetpack.m_itemid) && ((this.items & ITEM_JetpackRegen.m_itemid) || GetResource(this, RES_FUEL) >= 0.01))
-            this.items_added |= IT_FUEL;
-
-               this.items |= this.items_added;
        }
 
        if (frametime)
@@ -3133,7 +3145,7 @@ void PM_UpdateButtons(entity this, entity store)
        store.ping_movementloss = this.ping_movementloss;
 
        store.v_angle = this.v_angle;
-       store.movement = (typing) ? '0 0 0' : this.movement;
+       store.movement = this.movement;
 }
 
 NET_HANDLE(fpsreport, bool)