X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fscores.qc;h=18bb5f76cb50d6f91ecd67bcec11bb16445e0ff2;hb=71dcc1f8c6018dc2a4b3db8dfc9322e8e75211e3;hp=c9948660efe1165c7ed8654dac1ba770e6763277;hpb=9e113dae328809b5e7432f434649a35ebb185a52;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/scores.qc b/qcsrc/server/scores.qc index c9948660e..18bb5f76c 100644 --- a/qcsrc/server/scores.qc +++ b/qcsrc/server/scores.qc @@ -1,11 +1,20 @@ #include "scores.qh" #include "command/common.qh" -#include "mutators/_mod.qh" +#include +#include "client.qh" +#include +#include +#include +#include #include #include "../common/playerstats.qh" #include "../common/teams.qh" +#include +#include #include +#include +#include .entity scorekeeper; entity teamscorekeepers[16]; @@ -101,7 +110,9 @@ float TeamScore_AddToTeam(int t, float scorefield, float score) entity s; if(game_stopped) + { score = 0; + } if(!scores_initialized) return 0; // FIXME remove this when everything uses this system if(t <= 0 || t >= 16) @@ -327,9 +338,10 @@ float PlayerScore_Add(entity player, PlayerScoreField scorefield, float score) bool mutator_returnvalue = MUTATOR_CALLHOOK(AddPlayerScore, scorefield, score, player); score = M_ARGV(1, float); - if(game_stopped) - if(!mutator_returnvalue) + if(!mutator_returnvalue && game_stopped) + { score = 0; + } if(!scores_initialized) return 0; // FIXME remove this when everything uses this system entity s = CS(player).scorekeeper; @@ -353,6 +365,28 @@ float PlayerScore_Add(entity player, PlayerScoreField scorefield, float score) return s.(scores(scorefield)); } +float PlayerScore_Set(entity player, PlayerScoreField scorefield, float score) +{ + if(!scores_initialized) return 0; // FIXME remove this when everything uses this system + entity s = CS(player).scorekeeper; + if(!s) + { + if(game_stopped) + return 0; + LOG_WARN("Setting score of unknown player!"); + return 0; + } + + float oldscore = s.(scores(scorefield)); + if(oldscore == score) + return oldscore; + + if(scores_label(scorefield) != "") + s.SendFlags |= (2 ** (scorefield.m_id % 16)); + s.(scores(scorefield)) = score; + return s.(scores(scorefield)); +} + float PlayerTeamScore_Add(entity player, PlayerScoreField pscorefield, float tscorefield, float score) { float r; @@ -373,7 +407,7 @@ float PlayerScore_Compare(entity t1, entity t2, float strict) }); if (result.x == 0 && strict) - result.x = etof(t1.owner) - etof(t2.owner); + result.x = t1.owner.playerid - t2.owner.playerid; return result.x; } @@ -513,9 +547,7 @@ void WinningConditionHelper(entity this) } } - if(worldstatus) - strunzone(worldstatus); - worldstatus = strzone(s); + strcpy(worldstatus, s); FOREACH_CLIENT(true, { string s = ""; @@ -534,9 +566,7 @@ void WinningConditionHelper(entity this) s = "-666"; } - if(it.clientstatus) - strunzone(it.clientstatus); - it.clientstatus = strzone(s); + strcpy(it.clientstatus, s); }); }