#include "g_hook.qh"
#include "g_damage.qh"
#include "g_world.qh"
+#include "spawnpoints.qh"
+#include <server/gamelog.qh>
#include "bot/api.qh"
#include <server/mutators/_mod.qh>
#include "weapons/csqcprojectile.qh"
+#include <server/weapons/common.qh>
#include <server/compat/quake3.qh>
#include "../common/constants.qh"
void CreatureFrame_hotliquids(entity this)
{
- if (this.dmgtime >= time)
+ if (this.contents_damagetime >= time)
{
return;
}
- this.dmgtime = time + autocvar_g_balance_contents_damagerate;
+ this.contents_damagetime = time + autocvar_g_balance_contents_damagerate;
if (this.flags & FL_PROJECTILE)
{
}
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)
{
if (!(this.flags & FL_INWATER))
{
this.flags |= FL_INWATER;
- this.dmgtime = 0;
+ this.contents_damagetime = 0;
}
CreatureFrame_hotliquids(this);
{
// play leave water sound
this.flags &= ~FL_INWATER;
- this.dmgtime = 0;
+ this.contents_damagetime = 0;
}
- this.air_finished = time + 12;
}
}
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)
{
}
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');
}
anticheat_startframe();
MUTATOR_CALLHOOK(SV_StartFrame);
+ GlobalStats_updateglobal();
FOREACH_CLIENT(true, GlobalStats_update(it));
IL_EACH(g_players, IS_FAKE_CLIENT(it), PlayerPostThink(it));
}