X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fclient.qc;h=af2846c8cdaf84838a0fa38d8a9bc1f9d31edbf2;hb=e1cbcc2a39c8770900d5d8d592c1e582120d71b1;hp=2f45c06aed9adbab7ebd8d499e1bf4ee3d6e768b;hpb=bf078048717d708ea88d839f80e30bdc7907d600;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/client.qc b/qcsrc/server/client.qc index 2f45c06ae..af2846c8c 100644 --- a/qcsrc/server/client.qc +++ b/qcsrc/server/client.qc @@ -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)