X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fscores.qc;h=512f61ad231ae5d4255ec197a7b4d0667416220a;hp=821c378a84388d3dc941b708a02064f715a4386a;hb=bba2475e3a8b84e359ffae9b530d651f4d63e99a;hpb=ac7deb97b1a0e73ceea4684be73e72912fb3f1aa diff --git a/qcsrc/server/scores.qc b/qcsrc/server/scores.qc index 821c378a84..512f61ad23 100644 --- a/qcsrc/server/scores.qc +++ b/qcsrc/server/scores.qc @@ -130,7 +130,7 @@ float TeamScore_AddToTeam(int t, float scorefield, float score) } if(score) if(teamscores_label(scorefield) != "") - s.SendFlags |= (2 ** scorefield); + s.SendFlags |= BIT(scorefield); return (s.(teamscores(scorefield)) += score); } @@ -208,6 +208,13 @@ bool ScoreInfo_SendEntity(entity this, entity to, int sf) WriteString(MSG_ENTITY, teamscores_label(i)); WriteByte(MSG_ENTITY, teamscores_flags(i)); } + // prevent sending the welcome message again when score types are sent again because the scoring system has changed + // it can happen in some game modes like Race when the qualyfing session ends and the race starts + bool welcome_msg_too = (!CS(to) || time < CS(to).jointime + 5); + WriteByte(MSG_ENTITY, welcome_msg_too); + // welcome message is sent here because it needs to know the gametype + if (welcome_msg_too) + SendWelcomeMessage(to, MSG_ENTITY); return true; } @@ -277,7 +284,7 @@ float PlayerScore_Clear(entity player) FOREACH(Scores, true, { if(sk.(scores(it)) != 0) if(scores_label(it) != "") - sk.SendFlags |= (2 ** (i % 16)); + sk.SendFlags |= BIT(i % 16); if(i != SP_ELO.m_id) sk.(scores(it)) = 0; }); @@ -295,7 +302,7 @@ void Score_ClearAll() FOREACH(Scores, true, { if(sk.(scores(it)) != 0) if(scores_label(it) != "") - sk.SendFlags |= (2 ** (i % 16)); + sk.SendFlags |= BIT(i % 16); if(i != SP_ELO.m_id) sk.(scores(it)) = 0; }); @@ -309,7 +316,7 @@ void Score_ClearAll() { if(sk.(teamscores(j)) != 0) if(teamscores_label(j) != "") - sk.SendFlags |= (2 ** j); + sk.SendFlags |= BIT(j); sk.(teamscores(j)) = 0; } } @@ -357,7 +364,7 @@ float PlayerScore_Add(entity player, PlayerScoreField scorefield, float score) return s.(scores(scorefield)); } if(scores_label(scorefield) != "") - s.SendFlags |= (2 ** (scorefield.m_id % 16)); + s.SendFlags |= BIT(scorefield.m_id % 16); if(!warmup_stage) PlayerStats_GameReport_Event_Player(s.owner, strcat(PLAYERSTATS_TOTAL, scores_label(scorefield)), score); s.(scores(scorefield)) += score; @@ -382,7 +389,7 @@ float PlayerScore_Set(entity player, PlayerScoreField scorefield, float score) return oldscore; if(scores_label(scorefield) != "") - s.SendFlags |= (2 ** (scorefield.m_id % 16)); + s.SendFlags |= BIT(scorefield.m_id % 16); s.(scores(scorefield)) = score; return s.(scores(scorefield)); } @@ -434,6 +441,7 @@ void WinningConditionHelper(entity this) s = strcat(s, ":P", ftos(cvar_purechanges_count)); s = strcat(s, ":S", ftos(nJoinAllowed(this, NULL))); s = strcat(s, ":F", ftos(serverflags)); + s = strcat(s, ":T", sv_termsofservice_url_escaped); s = strcat(s, ":M", modname); s = strcat(s, "::", GetPlayerScoreString(NULL, (fullstatus ? 1 : 2))); @@ -556,12 +564,12 @@ void WinningConditionHelper(entity this) { s = GetPlayerScoreString(it, 1); s = strcat(s, IS_REAL_CLIENT(it) ? ":human" : ":bot"); - if(!IS_PLAYER(it) && !MUTATOR_CALLHOOK(GetPlayerStatus, it)) + if(!(IS_PLAYER(it) || INGAME_JOINED(it))) s = strcat(s, ":spectator"); } else { - if (IS_PLAYER(it) || MUTATOR_CALLHOOK(GetPlayerStatus, it)) + if (IS_PLAYER(it) || INGAME_JOINED(it)) s = GetPlayerScoreString(it, 2); else s = "-666";