X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fscores.qh;h=ad406196635a55b1ecf60667d653eba8a21c27bc;hb=3514dfab68ace0fd00b3df1993b8773868b1a6a3;hp=96f15bc804266766b2180ab56f22e99a1d11cf61;hpb=257260e1cc4af6303f76826b3b9a991496f08bbc;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/scores.qh b/qcsrc/server/scores.qh index 96f15bc80..ad4061966 100644 --- a/qcsrc/server/scores.qh +++ b/qcsrc/server/scores.qh @@ -1,6 +1,9 @@ -entity scores_initialized; // non-world when scores labels/rules have been set -.float scores[MAX_SCORE]; -.float teamscores[MAX_TEAMSCORE]; +#pragma once + +#include + +entity scores_initialized; // non-NULL when scores labels/rules have been set +.float scoreboard_pos; /** * Attaches a PlayerScore entity to a player. Use that in ClientConnect. @@ -19,14 +22,31 @@ void PlayerScore_Detach(entity player); * Means: FIXME make players unable to join the game when not called ClientConnect yet. * Returns the new score. */ -float PlayerScore_Add(entity player, float scorefield, float score); +float PlayerScore_Add(entity player, PlayerScoreField scorefield, float score); + +/** + * Sets the player's score to the score parameter. + * NEVER call this if PlayerScore_Attach has not been called yet! + * Means: FIXME make players unable to join the game when not called ClientConnect yet. + * Returns the new (or old if unchanged) score. + */ +float PlayerScore_Set(entity player, PlayerScoreField scorefield, float score); + +/** + * \brief Returns the player's score. + * \param[in] player Player to inspect. + * \param[in] scorefield Field of the score. + * \return Player's score. + */ +#define PlayerScore_Get(player, scorefield) PlayerScore_Add(player, scorefield, 0) /** * Initialize the score of this player if needed. * Does nothing in teamplay. * Use that when a spectator becomes a player. + * Returns whether clearing has been performed */ -void PlayerScore_Clear(entity player); +float PlayerScore_Clear(entity player); /** * Adds a score to the player's team's scores. @@ -40,7 +60,7 @@ float TeamScore_Add(entity player, float scorefield, float score); * NEVER call this if team has not been set yet! * Returns the new score. */ -float TeamScore_AddToTeam(float t, float scorefield, float score); +float TeamScore_AddToTeam(int t, float scorefield, float score); /** * Returns a value indicating the team score (and higher is better). @@ -51,12 +71,7 @@ float TeamScore_GetCompareValue(float t); * Adds a score to both the player and the team. Returns the team score if * possible, otherwise the player score. */ -float PlayerTeamScore_Add(entity player, float pscorefield, float tscorefield, float score); - -/** - * Adds to the generic score fields for both the player and the team. - */ -#define PlayerTeamScore_AddScore(p,s) PlayerTeamScore_Add(p, SP_SCORE, ST_SCORE, s) +float PlayerTeamScore_Add(entity player, PlayerScoreField pscorefield, float tscorefield, float score); /** * Set the label of a team score item, as well as the scoring flags. @@ -66,7 +81,7 @@ void ScoreInfo_SetLabel_TeamScore(float i, string label, float scoreflags); /** * Set the label of a player score item, as well as the scoring flags. */ -void ScoreInfo_SetLabel_PlayerScore(float i, string label, float scoreflags); +void ScoreInfo_SetLabel_PlayerScore(PlayerScoreField i, string label, float scoreflags); /** * Initialize the scores info for the given number of teams. @@ -87,21 +102,21 @@ void Score_NicePrint(entity to); /** * Sets the following results for the current scores entities. */ -void WinningConditionHelper(); +void WinningConditionHelper(entity this); float WinningConditionHelper_topscore; ///< highest score float WinningConditionHelper_secondscore; ///< second highest score float WinningConditionHelper_winnerteam; ///< the color of the winning team, or -1 if none float WinningConditionHelper_secondteam; ///< the color of the second team, or -1 if none float WinningConditionHelper_equality; ///< we have no winner -entity WinningConditionHelper_winner; ///< the winning player, or world if none -entity WinningConditionHelper_second; ///< the second player, or world if none +entity WinningConditionHelper_winner; ///< the winning player, or NULL if none +entity WinningConditionHelper_second; ///< the second player, or NULL if none float WinningConditionHelper_lowerisbetter; ///< lower is better, duh float WinningConditionHelper_zeroisworst; ///< zero is worst, duh #define WINNINGCONDITIONHELPER_LOWERISBETTER_WORST 999999999 /** * Returns score strings for eventlog etc. - * When called with world, or 0, as argument, they return the labels in the + * When called with NULL, or 0, as argument, they return the labels in the * same order. * The strings are comma separated; labels that end with !! designate primary, * labels that end with ! designate high priority. @@ -117,5 +132,8 @@ string GetTeamScoreString(float tm, float shortString); * Sorts the players and stores their place in the given field, starting with * 1. Non-players get 0 written into that field. * Returns the beginning of a sorted chain of the non-spectators. + * teams: >0: sort by teams first (always strict ordering); <0: sort by teams only (respects strict flag) + * strict: return a strict ordering + * nospectators: exclude spectators */ -entity PlayerScore_Sort(.float field, float strict); +entity PlayerScore_Sort(.float field, float teams, float strict, float nospectators);