X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fsv_main.qc;h=74dce96a2bc9a23a03a06e9a68f6d3ba34bdc6eb;hb=19e5fa4ee9a0bb59c1cec92a1b0501b14f8ccb63;hp=0c36a77c5b7689665d101e1d676efe67af567e21;hpb=7a22569aa1e31ed67551df719d0a250c85f8d884;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/sv_main.qc b/qcsrc/server/sv_main.qc index 0c36a77c5..74dce96a2 100644 --- a/qcsrc/server/sv_main.qc +++ b/qcsrc/server/sv_main.qc @@ -99,7 +99,17 @@ void CreatureFrame_FallDamage(entity this) { // check for falling damage float velocity_len = vlen(this.velocity); - if(!this.hook.state) + bool have_hook = false; + for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot) + { + .entity weaponentity = weaponentities[slot]; + if(this.(weaponentity).hook && this.(weaponentity).hook.state) + { + have_hook = true; + break; + } + } + 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. if (IS_DEAD(this)) @@ -129,10 +139,10 @@ void CreatureFrame_All() void Pause_TryPause(bool ispaused) { int n = 0; - FOREACH_CLIENT(IS_PLAYER(it) && IS_REAL_CLIENT(it), LAMBDA( + FOREACH_CLIENT(IS_PLAYER(it) && IS_REAL_CLIENT(it), { if (PHYS_INPUT_BUTTON_CHAT(it) != ispaused) return; ++n; - )); + }); if (!n) return; setpause(ispaused); } @@ -150,8 +160,7 @@ Called before each frame by the server ============= */ -float game_delay; -float game_delay_last; +bool game_delay_last; bool autocvar_sv_autopause = false; float RedirectionThink(); @@ -178,12 +187,12 @@ void StartFrame() LOG_INFO("CEFC time: ", ftos(t * 1000), "ms; "); int c_seeing = 0; int c_seen = 0; - FOREACH_CLIENT(true, LAMBDA( + FOREACH_CLIENT(true, { if(IS_REAL_CLIENT(it)) ++c_seeing; 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"); @@ -210,17 +219,15 @@ void StartFrame() skill = autocvar_skill; // detect when the pre-game countdown (if any) has ended and the game has started - game_delay = (time < game_starttime); - + bool game_delay = (time < game_starttime); if (autocvar_sv_eventlog && game_delay_last && !game_delay) GameLogEcho(":startdelay_ended"); - game_delay_last = game_delay; CreatureFrame_All(); CheckRules_World(); - if (warmup_stage && !gameover && warmup_limit > 0 && time >= warmup_limit) { + if (warmup_stage && !game_stopped && warmup_limit > 0 && time >= warmup_limit) { ReadyRestart(); return; } @@ -371,6 +378,9 @@ LABEL(cvar_fail) set_movetype(this, this.movetype); + if(this.monster_attack) + IL_PUSH(g_monster_targets, this); + // support special -1 and -2 angle from radiant if (this.angles == '0 -1 0') this.angles = '-90 0 0';