X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fsv_main.qc;h=09446203db69cf85d1588c0cdb459625244ff80e;hp=6b5b19d79ec8a60d141da4248e547b8deaca1480;hb=c1c5a398025611690a8d7d6bd64219ccf452e673;hpb=8e69041898af22d651b6416745431cbaab84b0d5 diff --git a/qcsrc/server/sv_main.qc b/qcsrc/server/sv_main.qc index 6b5b19d79e..09446203db 100644 --- a/qcsrc/server/sv_main.qc +++ b/qcsrc/server/sv_main.qc @@ -4,6 +4,7 @@ #include "g_hook.qh" #include "g_damage.qh" #include "g_world.qh" +#include #include "bot/api.qh" @@ -46,7 +47,14 @@ void CreatureFrame_hotliquids(entity this) } else { - if (this.watertype == CONTENT_LAVA) + if (STAT(FROZEN, this)) + { + if (this.watertype == CONTENT_LAVA) + Damage(this, NULL, NULL, 10000, DEATH_LAVA.m_id, DMG_NOWEP, this.origin, '0 0 0'); + else if (this.watertype == CONTENT_SLIME) + Damage(this, NULL, NULL, 10000, DEATH_SLIME.m_id, DMG_NOWEP, this.origin, '0 0 0'); + } + else if (this.watertype == CONTENT_LAVA) { if (this.watersound_finished < time) { @@ -89,7 +97,6 @@ void CreatureFrame_Liquids(entity this) this.flags &= ~FL_INWATER; this.dmgtime = 0; } - this.air_finished = time + 12; } } @@ -101,7 +108,6 @@ void CreatureFrame_FallDamage(entity this) return; // if the entity hasn't moved and isn't moving, then don't do anything // check for falling damage - float velocity_len = vlen(this.velocity); bool have_hook = false; for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot) { @@ -114,16 +120,24 @@ void CreatureFrame_FallDamage(entity this) } if(!have_hook) { - float dm = vlen(this.oldvelocity) - velocity_len; // dm is now the velocity DECREASE. Velocity INCREASE should never cause a sound or any damage. + float dm; // dm is the velocity DECREASE. Velocity INCREASE should never cause a sound or any damage. + if(autocvar_g_balance_falldamage_onlyvertical) + dm = fabs(this.oldvelocity.z) - vlen(this.velocity); + else + dm = vlen(this.oldvelocity) - vlen(this.velocity); if (IS_DEAD(this)) dm = (dm - autocvar_g_balance_falldamage_deadminspeed) * autocvar_g_balance_falldamage_factor; else dm = min((dm - autocvar_g_balance_falldamage_minspeed) * autocvar_g_balance_falldamage_factor, autocvar_g_balance_falldamage_maxdamage); if (dm > 0) - Damage (this, NULL, NULL, dm, DEATH_FALL.m_id, DMG_NOWEP, this.origin, '0 0 0'); + { + tracebox(this.origin, this.mins, this.maxs, this.origin - '0 0 1', MOVE_NOMONSTERS, this); + if (!(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NODAMAGE)) + Damage (this, NULL, NULL, dm, DEATH_FALL.m_id, DMG_NOWEP, this.origin, '0 0 0'); + } } - if(autocvar_g_maxspeed > 0 && velocity_len > autocvar_g_maxspeed) + if(autocvar_g_maxspeed > 0 && vdist(this.velocity, >, autocvar_g_maxspeed)) Damage (this, NULL, NULL, 100000, DEATH_SHOOTING_STAR.m_id, DMG_NOWEP, this.origin, '0 0 0'); } @@ -239,6 +253,7 @@ void StartFrame() anticheat_startframe(); MUTATOR_CALLHOOK(SV_StartFrame); + GlobalStats_updateglobal(); FOREACH_CLIENT(true, GlobalStats_update(it)); IL_EACH(g_players, IS_FAKE_CLIENT(it), PlayerPostThink(it)); } @@ -324,14 +339,17 @@ void SV_OnEntityPreSpawnFunction(entity this) if (this.gametypefilter != "") if (!isGametypeInFilter(MapInfo_LoadedGametype, teamplay, have_team_spawns, this.gametypefilter)) { - goto cleanup; + delete(this); + return; } if (this.cvarfilter != "" && !expr_evaluate(this.cvarfilter)) { - goto cleanup; + delete(this); + return; } if (DoesQ3ARemoveThisEntity(this)) { - goto cleanup; + delete(this); + return; } set_movetype(this, this.movetype); @@ -356,11 +374,9 @@ void SV_OnEntityPreSpawnFunction(entity this) #undef X if (MUTATOR_CALLHOOK(OnEntityPreSpawn, this)) { - goto cleanup; + delete(this); + return; } - return; -LABEL(cleanup) - delete(this); } void WarpZone_PostInitialize_Callback()