From 8a955e5735c0b7d68df22e3ff67e5f3443f4e39a Mon Sep 17 00:00:00 2001 From: div0 Date: Mon, 28 Jul 2008 09:46:28 +0000 Subject: [PATCH] factor out scores rules git-svn-id: svn://svn.icculus.org/nexuiz/trunk@3961 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/common/constants.qh | 25 +------- data/qcsrc/server/ctf.qc | 30 +--------- data/qcsrc/server/keyhunt.qc | 14 +---- data/qcsrc/server/progs.src | 2 + data/qcsrc/server/scores_rules.qc | 95 +++++++++++++++++++++++++++++++ data/qcsrc/server/teamplay.qc | 23 +------- 6 files changed, 104 insertions(+), 85 deletions(-) create mode 100644 data/qcsrc/server/scores_rules.qc diff --git a/data/qcsrc/common/constants.qh b/data/qcsrc/common/constants.qh index 1759335e9..d38ebc3d5 100644 --- a/data/qcsrc/common/constants.qh +++ b/data/qcsrc/common/constants.qh @@ -222,28 +222,9 @@ const float MAPVOTE_NET_OWNVOTE = 3; #define MAX_SCORE 10 #define MAX_TEAMSCORE 2 +#define ST_SCORE 0 #define SP_KILLS 0 #define SP_DEATHS 1 #define SP_SUICIDES 2 -#define SP_SCORE 3 // personal score, game modes can set it their own way -#define ST_SCORE 0 - -#define SP_CTF_CAPS 4 -#define SP_CTF_PICKUPS 5 -#define SP_CTF_FCKILLS 6 -#define SP_CTF_RETURNS 7 -#define ST_CTF_CAPS 1 - -#define ST_DOM_DOMPOINTS 1 -#define SP_DOM_DOMPOINTS 4 - -#define SP_LMS_LIVES 4 -#define SP_LMS_RANK 5 - -#define SP_KH_CAPS 4 -#define SP_KH_PUSHES 5 -#define SP_KH_DESTROYS 6 -#define SP_KH_PICKUPS 7 -#define SP_KH_KCKILLS 8 -#define SP_KH_LOSSES 9 -#define ST_KH_CAPS 1 +#define SP_SCORE 3 +// game mode specific indices are not in common/, but in server/scores_rules.qc! diff --git a/data/qcsrc/server/ctf.qc b/data/qcsrc/server/ctf.qc index d2fc9aa77..c10b78e2e 100644 --- a/data/qcsrc/server/ctf.qc +++ b/data/qcsrc/server/ctf.qc @@ -668,35 +668,7 @@ void ctf_delayedinit() if (find(world, classname, "ctf_team") == world) ctf_spawnteams(); - float sp_score, sp_caps; - sp_score = sp_caps = 0; - switch(g_ctf_win_mode) - { - case 0: // caps only - sp_caps = SFL_SORT_PRIO_PRIMARY; - break; - case 1: // caps, then score - sp_caps = SFL_SORT_PRIO_PRIMARY; - sp_score = SFL_SORT_PRIO_SECONDARY; - break; - case 2: // score only - sp_score = SFL_SORT_PRIO_PRIMARY; - sp_caps = SFL_SORT_PRIO_SECONDARY; // looks better ;) - break; - } - - CheckAllowedTeams(world); - ScoreInfo_Init(2 + (c3>=0)); // NOTE this assumes that the rogue team is team 3 - ScoreInfo_SetLabel_TeamScore (ST_SCORE, "score", sp_score); - ScoreInfo_SetLabel_TeamScore (ST_CTF_CAPS, "caps", sp_caps); - ScoreInfo_SetLabel_PlayerScore(SP_KILLS, "kills", 0); - ScoreInfo_SetLabel_PlayerScore(SP_DEATHS, "deaths", SFL_LOWER_IS_BETTER); - ScoreInfo_SetLabel_PlayerScore(SP_SUICIDES, "suicides", SFL_LOWER_IS_BETTER); - ScoreInfo_SetLabel_PlayerScore(SP_SCORE, "score", sp_score); - ScoreInfo_SetLabel_PlayerScore(SP_CTF_CAPS, "caps", sp_caps); - ScoreInfo_SetLabel_PlayerScore(SP_CTF_RETURNS, "returns", 0); - ScoreInfo_SetLabel_PlayerScore(SP_CTF_FCKILLS, "fckills", 0); - ScoreInfo_SetLabel_PlayerScore(SP_CTF_PICKUPS, "pickups", 0); + ScoreRules_ctf(); }; void ctf_init() diff --git a/data/qcsrc/server/keyhunt.qc b/data/qcsrc/server/keyhunt.qc index 6f81a69bb..93c6189df 100644 --- a/data/qcsrc/server/keyhunt.qc +++ b/data/qcsrc/server/keyhunt.qc @@ -976,19 +976,7 @@ void kh_init() // sets up th KH environment addstat(STAT_KH_KEYS, AS_INT, kh_state); - ScoreInfo_Init(kh_teams); - ScoreInfo_SetLabel_TeamScore (ST_SCORE, "score", SFL_SORT_PRIO_PRIMARY); - ScoreInfo_SetLabel_TeamScore (ST_KH_CAPS, "caps", SFL_SORT_PRIO_SECONDARY); - ScoreInfo_SetLabel_PlayerScore(SP_KILLS, "kills", 0); - ScoreInfo_SetLabel_PlayerScore(SP_DEATHS, "deaths", SFL_LOWER_IS_BETTER); - ScoreInfo_SetLabel_PlayerScore(SP_SUICIDES, "suicides", SFL_LOWER_IS_BETTER); - ScoreInfo_SetLabel_PlayerScore(SP_SCORE, "score", SFL_SORT_PRIO_PRIMARY); - ScoreInfo_SetLabel_PlayerScore(SP_KH_PICKUPS, "pickups", 0); - ScoreInfo_SetLabel_PlayerScore(SP_KH_LOSSES, "losses", SFL_LOWER_IS_BETTER); - ScoreInfo_SetLabel_PlayerScore(SP_KH_CAPS, "caps", SFL_SORT_PRIO_SECONDARY); - ScoreInfo_SetLabel_PlayerScore(SP_KH_PUSHES, "pushes", 0); - ScoreInfo_SetLabel_PlayerScore(SP_KH_DESTROYS, "destroyed", SFL_LOWER_IS_BETTER); - ScoreInfo_SetLabel_PlayerScore(SP_KH_KCKILLS, "kckills", 0); + ScoreRules_kh(kh_teams); } void kh_finalize() diff --git a/data/qcsrc/server/progs.src b/data/qcsrc/server/progs.src index 586bc8f9c..5ea95b301 100644 --- a/data/qcsrc/server/progs.src +++ b/data/qcsrc/server/progs.src @@ -28,6 +28,8 @@ antilag.qh vote.qh +scores_rules.qc + miscfunctions.qc waypointsprites.qc diff --git a/data/qcsrc/server/scores_rules.qc b/data/qcsrc/server/scores_rules.qc new file mode 100644 index 000000000..96d603652 --- /dev/null +++ b/data/qcsrc/server/scores_rules.qc @@ -0,0 +1,95 @@ +float c1, c2, c3, c4; +void CheckAllowedTeams (entity for_whom); + +// NOTE: SP_ constants may not be >= MAX_SCORE; ST_constants may not be >= MAX_TEAMSCORE +// scores that should be in all modes: +void ScoreRules_basics(float teams, float sprio) +{ + ScoreInfo_Init(teams); + if(sprio) + ScoreInfo_SetLabel_TeamScore (ST_SCORE, "score", sprio); + ScoreInfo_SetLabel_PlayerScore(SP_KILLS, "kills", 0); + ScoreInfo_SetLabel_PlayerScore(SP_DEATHS, "deaths", SFL_LOWER_IS_BETTER); + ScoreInfo_SetLabel_PlayerScore(SP_SUICIDES, "suicides", SFL_LOWER_IS_BETTER); + if(sprio) + ScoreInfo_SetLabel_PlayerScore(SP_SCORE, "score", sprio); +} +void ScoreRules_generic() +{ + CheckAllowedTeams(world); + if(teamplay) + { + CheckAllowedTeams(world); + ScoreRules_basics(((c4>=0) ? 4 : (c3>=0) ? 3 : 2), SFL_SORT_PRIO_PRIMARY); + } + else + ScoreRules_basics(0, SFL_SORT_PRIO_PRIMARY); +} + +// g_ctf +#define ST_CTF_CAPS 1 +#define SP_CTF_CAPS 4 +#define SP_CTF_PICKUPS 5 +#define SP_CTF_FCKILLS 6 +#define SP_CTF_RETURNS 7 +void ScoreRules_ctf() +{ + float sp_score, sp_caps; + sp_score = sp_caps = 0; + switch(g_ctf_win_mode) + { + case 0: // caps only + sp_caps = SFL_SORT_PRIO_PRIMARY; + break; + case 1: // caps, then score + sp_caps = SFL_SORT_PRIO_PRIMARY; + sp_score = SFL_SORT_PRIO_SECONDARY; + break; + case 2: // score only + sp_score = SFL_SORT_PRIO_PRIMARY; + sp_caps = SFL_SORT_PRIO_SECONDARY; // looks better ;) + break; + } + + CheckAllowedTeams(world); + ScoreRules_basics(2 + (c3>=0), sp_score); // NOTE this assumes that the rogue team is team 3 + ScoreInfo_SetLabel_TeamScore (ST_CTF_CAPS, "caps", sp_caps); + ScoreInfo_SetLabel_PlayerScore(SP_CTF_CAPS, "caps", sp_caps); + ScoreInfo_SetLabel_PlayerScore(SP_CTF_PICKUPS, "pickups", 0); + ScoreInfo_SetLabel_PlayerScore(SP_CTF_FCKILLS, "fckills", 0); + ScoreInfo_SetLabel_PlayerScore(SP_CTF_RETURNS, "returns", 0); +} + +// g_domination +#define ST_DOM_DOMPOINTS 1 +#define SP_DOM_DOMPOINTS 4 + +// LMS stuff +#define SP_LMS_LIVES 4 +#define SP_LMS_RANK 5 +void ScoreRules_lms() +{ + ScoreRules_basics(0, 0); + ScoreInfo_SetLabel_PlayerScore(SP_LMS_LIVES, "lives", SFL_SORT_PRIO_SECONDARY); + ScoreInfo_SetLabel_PlayerScore(SP_LMS_RANK, "rank", SFL_LOWER_IS_BETTER | SFL_HIDE_ZERO | SFL_SORT_PRIO_PRIMARY | SFL_ALLOW_HIDE); +} + +// Key hunt stuff +#define ST_KH_CAPS 1 +#define SP_KH_CAPS 4 +#define SP_KH_PUSHES 5 +#define SP_KH_DESTROYS 6 +#define SP_KH_PICKUPS 7 +#define SP_KH_KCKILLS 8 +#define SP_KH_LOSSES 9 +void ScoreRules_kh(float teams) +{ + ScoreRules_basics(teams, SFL_SORT_PRIO_PRIMARY); + ScoreInfo_SetLabel_TeamScore (ST_KH_CAPS, "caps", SFL_SORT_PRIO_SECONDARY); + ScoreInfo_SetLabel_PlayerScore(SP_KH_CAPS, "caps", SFL_SORT_PRIO_SECONDARY); + ScoreInfo_SetLabel_PlayerScore(SP_KH_PUSHES, "pushes", 0); + ScoreInfo_SetLabel_PlayerScore(SP_KH_DESTROYS, "destroyed", SFL_LOWER_IS_BETTER); + ScoreInfo_SetLabel_PlayerScore(SP_KH_PICKUPS, "pickups", 0); + ScoreInfo_SetLabel_PlayerScore(SP_KH_KCKILLS, "kckills", 0); + ScoreInfo_SetLabel_PlayerScore(SP_KH_LOSSES, "losses", SFL_LOWER_IS_BETTER); +} diff --git a/data/qcsrc/server/teamplay.qc b/data/qcsrc/server/teamplay.qc index 48ed84b8d..8c1080abe 100644 --- a/data/qcsrc/server/teamplay.qc +++ b/data/qcsrc/server/teamplay.qc @@ -105,20 +105,7 @@ void default_delayedinit() remove(self); if(!scores_initialized) - { - if(teamplay) - { - CheckAllowedTeams(world); - ScoreInfo_Init((c1>=0) + (c2>=0) + (c3>=0) + (c4>=0)); // NOTE this assumes that if team 2 is allowed, 1 is too, and if 3 is, 2 is, and if 4 is, 3 is! - } - else - ScoreInfo_Init(0); // NOTE this assumes that if team 2 is allowed, 1 is too, and if 3 is, 2 is, and if 4 is, 3 is! - ScoreInfo_SetLabel_TeamScore (ST_SCORE, "score", SFL_SORT_PRIO_PRIMARY); - ScoreInfo_SetLabel_PlayerScore(SP_KILLS, "kills", 0); - ScoreInfo_SetLabel_PlayerScore(SP_DEATHS, "deaths", SFL_LOWER_IS_BETTER); - ScoreInfo_SetLabel_PlayerScore(SP_SUICIDES, "suicides", SFL_LOWER_IS_BETTER); - ScoreInfo_SetLabel_PlayerScore(SP_SCORE, "score", SFL_SORT_PRIO_PRIMARY); - } + ScoreRules_generic(); } void ActivateTeamplay() @@ -240,13 +227,7 @@ void InitGameplayMode() teams_matter = 0; lms_lowest_lives = 9999; - ScoreInfo_Init(0); - ScoreInfo_SetLabel_PlayerScore(SP_KILLS, "kills", 0); - ScoreInfo_SetLabel_PlayerScore(SP_DEATHS, "deaths", 0); - ScoreInfo_SetLabel_PlayerScore(SP_SUICIDES, "suicides", SFL_LOWER_IS_BETTER); - // do not define SP_SCORE for LMS - ScoreInfo_SetLabel_PlayerScore(SP_LMS_LIVES, "lives", SFL_SORT_PRIO_SECONDARY); - ScoreInfo_SetLabel_PlayerScore(SP_LMS_RANK, "rank", SFL_LOWER_IS_BETTER | SFL_HIDE_ZERO | SFL_SORT_PRIO_PRIMARY | SFL_ALLOW_HIDE); + ScoreRules_lms(); } else if(game == GAME_ARENA || cvar("g_arena")) { -- 2.39.2