X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fsv_main.qc;h=e7d6dbfb5b2b9f34cc5eb967930ce4d3d34e5ca7;hb=669311cae7c93d70ff08fa2e3dd30cabdd2da8fa;hp=2433dc163d7275fdf85cbc3d47f56dc756ab1293;hpb=c26d994a788be2bc2eadf6891da23916cf428311;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/sv_main.qc b/qcsrc/server/sv_main.qc index 2433dc163..e7d6dbfb5 100644 --- a/qcsrc/server/sv_main.qc +++ b/qcsrc/server/sv_main.qc @@ -1,3 +1,4 @@ +#include "sv_main.qh" #include "anticheat.qh" #include "g_hook.qh" @@ -101,7 +102,7 @@ void CreatureFrame_FallDamage(entity this) if(!this.hook.state) { float dm = vlen(this.oldvelocity) - velocity_len; // dm is now the velocity DECREASE. Velocity INCREASE should never cause a sound or any damage. - if (this.deadflag) + 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); @@ -116,23 +117,21 @@ void CreatureFrame_FallDamage(entity this) void CreatureFrame_All() { - FOREACH_ENTITY_FLOAT(damagedbycontents, true, LAMBDA( - if(it.movetype == MOVETYPE_NOCLIP) continue; + FOREACH_ENTITY_FLOAT(damagedbycontents, true, { + if (it.movetype == MOVETYPE_NOCLIP) continue; CreatureFrame_Liquids(it); CreatureFrame_FallDamage(it); it.oldvelocity = it.velocity; - )); + }); } void Pause_TryPause(bool ispaused) { int n = 0; - entity it; - FOR_EACH_REALPLAYER(it) - { + FOREACH_CLIENT(IS_PLAYER(it) && IS_REAL_CLIENT(it), LAMBDA( if (PHYS_INPUT_BUTTON_CHAT(it) != ispaused) return; ++n; - } + )); if (!n) return; setpause(ispaused); } @@ -155,9 +154,13 @@ float game_delay_last; bool autocvar_sv_autopause = true; float RedirectionThink(); +void PM_Main(Client this); void StartFrame() { - SELFPARAM(); + // 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())); + execute_next_frame(); if (autocvar_sv_autopause && !server_is_dedicated) Pause_TryPause(true); @@ -173,14 +176,12 @@ void StartFrame() LOG_INFO("CEFC time: ", ftos(t * 1000), "ms; "); int c_seeing = 0; int c_seen = 0; - entity cl; - FOR_EACH_CLIENT(cl) - { - if(IS_REAL_CLIENT(cl)) + FOREACH_CLIENT(true, LAMBDA( + if(IS_REAL_CLIENT(it)) ++c_seeing; - if(IS_PLAYER(cl)) + if(IS_PLAYER(it)) ++c_seen; - } + )); LOG_INFO("CEFC calls per second: ", ftos(c_seeing * (c_seen - 1) / t), "; "); LOG_INFO("CEFC 100% load at: ", ftos(solve_quadratic(t, -t, -1) * '0 1 0'), "\n"); @@ -189,10 +190,9 @@ void StartFrame() } #endif - FOREACH_ENTITY_FLOAT(csqcprojectile_clientanimate, true, LAMBDA(CSQCProjectile_Check(it))); + FOREACH_ENTITY_FLOAT(csqcprojectile_clientanimate, true, CSQCProjectile_Check(it)); - if(RedirectionThink()) - return; + if (RedirectionThink()) return; UncustomizeEntitiesRun(); InitializeEntitiesRun(); @@ -200,8 +200,7 @@ void StartFrame() WarpZone_StartFrame(); sys_frametime = autocvar_sys_ticrate * autocvar_slowmo; - if(sys_frametime <= 0) - sys_frametime = 1.0 / 60.0; // somewhat safe fallback + if (sys_frametime <= 0) sys_frametime = 1.0 / 60.0; // somewhat safe fallback if (timeout_status == TIMEOUT_LEADTIME) // just before the timeout (when timeout_status will be TIMEOUT_ACTIVE) orig_slowmo = autocvar_slowmo; // slowmo will be restored after the timeout @@ -211,7 +210,7 @@ void StartFrame() // detect when the pre-game countdown (if any) has ended and the game has started game_delay = (time < game_starttime); - if(autocvar_sv_eventlog && game_delay_last && !game_delay) + if (autocvar_sv_eventlog && game_delay_last && !game_delay) GameLogEcho(":startdelay_ended"); game_delay_last = game_delay; @@ -219,12 +218,7 @@ void StartFrame() CreatureFrame_All(); CheckRules_World(); - // if in warmup stage and limit for warmup is hit start match - if(warmup_stage) - if(!gameover) - if((g_warmup_limit > 0 && time >= g_warmup_limit) - || (g_warmup_limit == 0 && autocvar_timelimit != 0 && time >= autocvar_timelimit * 60)) - { + if (warmup_stage && !gameover && warmup_limit > 0 && time >= warmup_limit) { ReadyRestart(); return; } @@ -233,7 +227,8 @@ void StartFrame() anticheat_startframe(); MUTATOR_CALLHOOK(SV_StartFrame); - FOREACH_CLIENT(true, LAMBDA(GlobalStats_update(it))); + FOREACH_CLIENT(true, GlobalStats_update(it)); + FOREACH_ENTITY_CLASS(STR_PLAYER, IS_FAKE_CLIENT(it), WITHSELF(it, PlayerPostThink())); } .vector originjitter; @@ -352,7 +347,7 @@ void SV_OnEntityPreSpawnFunction() } } inv = !inv; -:cvar_fail +LABEL(cvar_fail) // now inv is 1 if we want to keep the item, and 0 if we want to get rid of it if (!inv) {