X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;ds=inline;f=qcsrc%2Fserver%2Fclient.qc;h=3592f33ad929f3588a2c190bd903c8804aece1da;hb=909bca4321ebb4211612f8099c2865e1c6787415;hp=e0c13548cfa0d961496b801b4322acff44ffe142;hpb=2eeb83b158abb062ce25cb18da0bca0d9c9f28be;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/client.qc b/qcsrc/server/client.qc index e0c13548c..3592f33ad 100644 --- a/qcsrc/server/client.qc +++ b/qcsrc/server/client.qc @@ -337,6 +337,7 @@ void PutObserverInServer(entity this) this.strength_finished = 0; this.invincible_finished = 0; this.superweapons_finished = 0; + this.air_finished_stat = 0; //this.dphitcontentsmask = 0; this.dphitcontentsmask = DPCONTENTS_SOLID; if (autocvar_g_playerclip_collisions) @@ -647,7 +648,7 @@ void PutPlayerInServer(entity this) STAT(BUFFS, this) = 0; STAT(BUFF_TIME, this) = 0; - this.air_finished = time + 12; + this.air_finished = time + autocvar_g_balance_contents_drowndelay; this.waterlevel = WATERLEVEL_NONE; this.watertype = CONTENT_EMPTY; @@ -1069,7 +1070,7 @@ string getwelcomemessage(entity this) return s; } -bool autocvar_sv_qcphysics = false; // TODO this is for testing - remove when qcphysics work +bool autocvar_sv_qcphysics = true; // TODO this is for testing - remove when qcphysics work /** ============= @@ -1536,8 +1537,10 @@ float CalcRot(float current, float stable, float rotfactor, float rotframetime) return max(stable, current + (stable - current) * rotfactor * rotframetime); } -float CalcRotRegen(float current, float regenstable, float regenfactor, float regenlinear, float regenframetime, float rotstable, float rotfactor, float rotlinear, float rotframetime, float limit) +void RotRegen(entity this, int res, float regenstable, float regenfactor, float regenlinear, float regenframetime, float rotstable, float rotfactor, float rotlinear, float rotframetime, float limit) { + float old = GetResource(this, res); + float current = old; if(current > rotstable) { if(rotframetime > 0) @@ -1558,7 +1561,8 @@ float CalcRotRegen(float current, float regenstable, float regenfactor, float re if(current > limit) current = limit; - return current; + if (current != old) + SetResource(this, res, current); } void player_regen(entity this) @@ -1599,12 +1603,13 @@ void player_regen(entity this) limith = limith * limit_mod; limita = limita * limit_mod; - SetResource(this, RES_ARMOR, CalcRotRegen(GetResource(this, RES_ARMOR), mina, autocvar_g_balance_armor_regen, autocvar_g_balance_armor_regenlinear, - regen_mod * frametime * (time > this.pauseregen_finished), maxa, autocvar_g_balance_armor_rot, autocvar_g_balance_armor_rotlinear, - rot_mod * frametime * (time > this.pauserotarmor_finished), limita)); - SetResource(this, RES_HEALTH, CalcRotRegen(GetResource(this, RES_HEALTH), regen_health_stable, regen_health, regen_health_linear, - regen_mod * frametime * (time > this.pauseregen_finished), regen_health_rotstable, regen_health_rot, regen_health_rotlinear, - rot_mod * frametime * (time > this.pauserothealth_finished), limith)); + RotRegen(this, RES_ARMOR, mina, autocvar_g_balance_armor_regen, autocvar_g_balance_armor_regenlinear, + regen_mod * frametime * (time > this.pauseregen_finished), maxa, autocvar_g_balance_armor_rot, autocvar_g_balance_armor_rotlinear, + rot_mod * frametime * (time > this.pauserotarmor_finished), limita); + + RotRegen(this, RES_HEALTH, regen_health_stable, regen_health, regen_health_linear, + regen_mod * frametime * (time > this.pauseregen_finished), regen_health_rotstable, regen_health_rot, regen_health_rotlinear, + rot_mod * frametime * (time > this.pauserothealth_finished), limith); } // if player rotted to death... die! @@ -1625,9 +1630,9 @@ void player_regen(entity this) minf = autocvar_g_balance_fuel_regenstable; limitf = GetResourceLimit(this, RES_FUEL); - SetResource(this, RES_FUEL, CalcRotRegen(GetResource(this, RES_FUEL), minf, autocvar_g_balance_fuel_regen, autocvar_g_balance_fuel_regenlinear, - frametime * (time > this.pauseregen_finished) * ((this.items & ITEM_JetpackRegen.m_itemid) != 0), - maxf, autocvar_g_balance_fuel_rot, autocvar_g_balance_fuel_rotlinear, frametime * (time > this.pauserotfuel_finished), limitf)); + RotRegen(this, RES_FUEL, minf, autocvar_g_balance_fuel_regen, autocvar_g_balance_fuel_regenlinear, + frametime * (time > this.pauseregen_finished) * ((this.items & ITEM_JetpackRegen.m_itemid) != 0), + maxf, autocvar_g_balance_fuel_rot, autocvar_g_balance_fuel_rotlinear, frametime * (time > this.pauserotfuel_finished), limitf); } } @@ -1690,6 +1695,7 @@ void SpectateCopy(entity this, entity spectatee) this.strength_finished = spectatee.strength_finished; this.invincible_finished = spectatee.invincible_finished; this.superweapons_finished = spectatee.superweapons_finished; + this.air_finished_stat = spectatee.air_finished_stat; STAT(PRESSED_KEYS, this) = STAT(PRESSED_KEYS, spectatee); STAT(WEAPONS, this) = STAT(WEAPONS, spectatee); this.punchangle = spectatee.punchangle; @@ -1781,6 +1787,11 @@ void SetSpectatee_status(entity this, int spectatee_num) if (CS(this).spectatee_status != oldspectatee_status) { + if (STAT(PRESSED_KEYS, this)) + { + CS(this).pressedkeys = 0; + STAT(PRESSED_KEYS, this) = 0; + } ClientData_Touch(this); if (g_race || g_cts) race_InitSpectator(); } @@ -2022,7 +2033,7 @@ void PrintWelcomeMessage(entity this) if (autocvar_g_campaign) { if ((IS_PLAYER(this) && PHYS_INPUT_BUTTON_INFO(this)) || (!IS_PLAYER(this))) { CS(this).motd_actived_time = time; - Send_Notification(NOTIF_ONE_ONLY, this, MSG_CENTER, CENTER_MOTD, campaign_message); + Send_Notification(NOTIF_ONE_ONLY, this, MSG_CENTER, CENTER_CAMPAIGN_MESSAGE, Campaign_GetMessage(), Campaign_GetLevelNum()); } } else { if (PHYS_INPUT_BUTTON_INFO(this)) { @@ -2038,7 +2049,7 @@ void PrintWelcomeMessage(entity this) CS(this).motd_actived_time = time; else if ((time - CS(this).motd_actived_time > 2) && IS_PLAYER(this)) { // hide it some seconds after BUTTON_INFO has been released CS(this).motd_actived_time = 0; - Kill_Notification(NOTIF_ONE_ONLY, this, MSG_CENTER, CPID_MOTD); + Kill_Notification(NOTIF_ONE_ONLY, this, MSG_CENTER, CPID_CAMPAIGN_MESSAGE); } } else { if (PHYS_INPUT_BUTTON_INFO(this)) @@ -2057,7 +2068,10 @@ void PrintWelcomeMessage(entity this) { // instantly hide MOTD CS(this).motd_actived_time = 0; - Kill_Notification(NOTIF_ONE_ONLY, this, MSG_CENTER, CPID_MOTD); + if (autocvar_g_campaign) + Kill_Notification(NOTIF_ONE_ONLY, this, MSG_CENTER, CPID_CAMPAIGN_MESSAGE); + else + Kill_Notification(NOTIF_ONE_ONLY, this, MSG_CENTER, CPID_MOTD); } else if (IS_PLAYER(this) || IS_SPEC(this)) { @@ -2609,6 +2623,7 @@ void DrownPlayer(entity this) if(this.air_finished < time) PlayerSound(this, playersound_gasp, CH_PLAYER, VOL_BASE, VOICETYPE_PLAYERSOUND); this.air_finished = time + autocvar_g_balance_contents_drowndelay; + this.air_finished_stat = 0; } else if (this.air_finished < time) { // drown! @@ -2617,7 +2632,10 @@ void DrownPlayer(entity this) Damage (this, NULL, NULL, autocvar_g_balance_contents_playerdamage_drowning * autocvar_g_balance_contents_damagerate, DEATH_DROWN.m_id, DMG_NOWEP, this.origin, '0 0 0'); this.pain_finished = time + 0.5; } + this.air_finished_stat = this.air_finished; } + else + this.air_finished_stat = this.air_finished; } .bool move_qcphysics; @@ -2720,6 +2738,11 @@ void PlayerPostThink (entity this) } GetPressedKeys(this); } + else if (IS_OBSERVER(this) && STAT(PRESSED_KEYS, this)) + { + CS(this).pressedkeys = 0; + STAT(PRESSED_KEYS, this) = 0; + } if (this.waypointsprite_attachedforcarrier) { float hp = healtharmor_maxdamage(GetResource(this, RES_HEALTH), GetResource(this, RES_ARMOR), autocvar_g_balance_armor_blockpercent, DEATH_WEAPON.m_id).x;