X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fsv_main.qc;h=dc2019792b134bbf826f86ddf232f3402fdf70c3;hb=a61dce59e20aeb3e1b086dde70bf6ab02a8d09c8;hp=b33b96db1b2cb02cd24af7205b5e005d82ec406f;hpb=c0da80fe6125a43ee99a90808ac6f9d0ddcf88c8;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/sv_main.qc b/qcsrc/server/sv_main.qc index b33b96db1..dc2019792 100644 --- a/qcsrc/server/sv_main.qc +++ b/qcsrc/server/sv_main.qc @@ -38,9 +38,9 @@ void CreatureFrame_hotliquids(entity this) if (this.flags & FL_PROJECTILE) { if (this.watertype == CONTENT_LAVA) - Damage (this, world, world, autocvar_g_balance_contents_projectiledamage * autocvar_g_balance_contents_damagerate * this.waterlevel, DEATH_LAVA.m_id, this.origin, '0 0 0'); + Damage (this, NULL, NULL, autocvar_g_balance_contents_projectiledamage * autocvar_g_balance_contents_damagerate * this.waterlevel, DEATH_LAVA.m_id, this.origin, '0 0 0'); else if (this.watertype == CONTENT_SLIME) - Damage (this, world, world, autocvar_g_balance_contents_projectiledamage * autocvar_g_balance_contents_damagerate * this.waterlevel, DEATH_SLIME.m_id, this.origin, '0 0 0'); + Damage (this, NULL, NULL, autocvar_g_balance_contents_projectiledamage * autocvar_g_balance_contents_damagerate * this.waterlevel, DEATH_SLIME.m_id, this.origin, '0 0 0'); } else { @@ -51,9 +51,9 @@ void CreatureFrame_hotliquids(entity this) this.watersound_finished = time + 0.5; sound (this, CH_PLAYER_SINGLE, SND_LAVA, VOL_BASE, ATTEN_NORM); } - Damage (this, world, world, autocvar_g_balance_contents_playerdamage_lava * autocvar_g_balance_contents_damagerate * this.waterlevel, DEATH_LAVA.m_id, this.origin, '0 0 0'); + Damage (this, NULL, NULL, autocvar_g_balance_contents_playerdamage_lava * autocvar_g_balance_contents_damagerate * this.waterlevel, DEATH_LAVA.m_id, this.origin, '0 0 0'); if(autocvar_g_balance_contents_playerdamage_lava_burn) - Fire_AddDamage(this, world, autocvar_g_balance_contents_playerdamage_lava_burn * this.waterlevel, autocvar_g_balance_contents_playerdamage_lava_burn_time * this.waterlevel, DEATH_LAVA.m_id); + Fire_AddDamage(this, NULL, autocvar_g_balance_contents_playerdamage_lava_burn * this.waterlevel, autocvar_g_balance_contents_playerdamage_lava_burn_time * this.waterlevel, DEATH_LAVA.m_id); } else if (this.watertype == CONTENT_SLIME) { @@ -62,7 +62,7 @@ void CreatureFrame_hotliquids(entity this) this.watersound_finished = time + 0.5; sound (this, CH_PLAYER_SINGLE, SND_SLIME, VOL_BASE, ATTEN_NORM); } - Damage (this, world, world, autocvar_g_balance_contents_playerdamage_slime * autocvar_g_balance_contents_damagerate * this.waterlevel, DEATH_SLIME.m_id, this.origin, '0 0 0'); + Damage (this, NULL, NULL, autocvar_g_balance_contents_playerdamage_slime * autocvar_g_balance_contents_damagerate * this.waterlevel, DEATH_SLIME.m_id, this.origin, '0 0 0'); } } } @@ -107,11 +107,11 @@ void CreatureFrame_FallDamage(entity this) else dm = min((dm - autocvar_g_balance_falldamage_minspeed) * autocvar_g_balance_falldamage_factor, autocvar_g_balance_falldamage_maxdamage); if (dm > 0) - Damage (this, world, world, dm, DEATH_FALL.m_id, this.origin, '0 0 0'); + Damage (this, NULL, NULL, dm, DEATH_FALL.m_id, this.origin, '0 0 0'); } if(autocvar_g_maxspeed > 0 && velocity_len > autocvar_g_maxspeed) - Damage (this, world, world, 100000, DEATH_SHOOTING_STAR.m_id, this.origin, '0 0 0'); + Damage (this, NULL, NULL, 100000, DEATH_SHOOTING_STAR.m_id, this.origin, '0 0 0'); } } @@ -154,12 +154,13 @@ float game_delay_last; bool autocvar_sv_autopause = true; float RedirectionThink(); -void PM_Main(Client this); +void systems_update(); +void sys_phys_update(entity this, float dt); void StartFrame() { // TODO: if move is more than 50ms, split it into two moves (this matches QWSV behavior and the client prediction) - FOREACH_ENTITY_CLASS(STR_PLAYER, IS_FAKE_CLIENT(it), PM_Main(it)); - FOREACH_ENTITY_CLASS(STR_PLAYER, IS_FAKE_CLIENT(it), WITHSELF(it, PlayerPreThink())); + FOREACH_ENTITY_CLASS(STR_PLAYER, IS_FAKE_CLIENT(it), sys_phys_update(it, frametime)); + FOREACH_ENTITY_CLASS(STR_PLAYER, IS_FAKE_CLIENT(it), PlayerPreThink(it)); execute_next_frame(); if (autocvar_sv_autopause && !server_is_dedicated) Pause_TryPause(true); @@ -228,7 +229,7 @@ void StartFrame() MUTATOR_CALLHOOK(SV_StartFrame); FOREACH_CLIENT(true, GlobalStats_update(it)); - FOREACH_ENTITY_CLASS(STR_PLAYER, IS_FAKE_CLIENT(it), WITHSELF(it, PlayerPostThink())); + FOREACH_ENTITY_CLASS(STR_PLAYER, IS_FAKE_CLIENT(it), PlayerPostThink(it)); } .vector originjitter; @@ -237,14 +238,16 @@ void StartFrame() .string gametypefilter; .string cvarfilter; bool DoesQ3ARemoveThisEntity(entity this); -void SV_OnEntityPreSpawnFunction() -{SELFPARAM(); +void SV_OnEntityPreSpawnFunction(entity this) +{ + __spawnfunc_expecting = true; __spawnfunc_expect = this; if (this) if (this.gametypefilter != "") if (!isGametypeInFilter(MapInfo_LoadedGametype, teamplay, have_team_spawns, this.gametypefilter)) { remove(this); + __spawnfunc_expecting = false; return; } if(this.cvarfilter != "") @@ -353,6 +356,7 @@ LABEL(cvar_fail) { //print("cvarfilter fail\n"); remove(this); + __spawnfunc_expecting = false; return; } } @@ -360,6 +364,7 @@ LABEL(cvar_fail) if(DoesQ3ARemoveThisEntity(this)) { remove(this); + __spawnfunc_expecting = false; return; } @@ -387,6 +392,7 @@ LABEL(cvar_fail) if(MUTATOR_CALLHOOK(OnEntityPreSpawn, this)) { remove(this); + __spawnfunc_expecting = false; return; } } @@ -395,7 +401,7 @@ void WarpZone_PostInitialize_Callback() { // create waypoint links for warpzones entity e; - for(e = world; (e = find(e, classname, "trigger_warpzone")); ) + for(e = NULL; (e = find(e, classname, "trigger_warpzone")); ) { vector src, dst; src = (e.absmin + e.absmax) * 0.5;