From b7eb4482f704e026a7fc5c04ca746b17d419734a Mon Sep 17 00:00:00 2001 From: div0 Date: Fri, 25 Jul 2008 11:59:41 +0000 Subject: [PATCH] allow specifying sbar fields as +ctf,kh/score -ctf,kh/kills git-svn-id: svn://svn.icculus.org/nexuiz/trunk@3906 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/client/Main.qc | 7 +++++-- data/qcsrc/client/View.qc | 3 --- data/qcsrc/client/sbar.qc | 39 +++++++++++++++++++++++++++++------- data/qcsrc/common/util.qc | 15 ++++++++++++++ data/qcsrc/common/util.qh | 2 ++ data/qcsrc/server/g_world.qc | 20 +----------------- data/qcsrc/server/scores.qc | 1 + 7 files changed, 56 insertions(+), 31 deletions(-) diff --git a/data/qcsrc/client/Main.qc b/data/qcsrc/client/Main.qc index 1a7b41726..362bae5ad 100644 --- a/data/qcsrc/client/Main.qc +++ b/data/qcsrc/client/Main.qc @@ -125,7 +125,8 @@ float CSQC_ConsoleCommand(string strMessage) { float argc; // Tokenize String - argc = tokenize(strMessage); + //argc = tokenize(strMessage); + argc = tokenizebyseparator(strMessage, " "); // Acquire Command local string strCmd; @@ -229,9 +230,11 @@ void Ent_RemoveONS() } } +void Gamemode_Init(); void Ent_ReadScoresInfo() { float i; + gametype = ReadByte(); for(i = 0; i < MAX_SCORE; ++i) { scores_label[i] = strzone(ReadString()); @@ -243,6 +246,7 @@ void Ent_ReadScoresInfo() teamscores_flags[i] = ReadByte(); } Sbar_InitScores(); + Gamemode_Init(); } void Ent_ReadPlayerScore(float isNew) @@ -369,7 +373,6 @@ void Gamemode_Init() local float file; local vector mi_min, mi_max; - gametype = cvar("gametype"); if(gametype == GAME_ONSLAUGHT) { if(!strcasecmp(substring(mapname, 0, 5), "maps/")) minimapname = substring(mapname, 5, 999); diff --git a/data/qcsrc/client/View.qc b/data/qcsrc/client/View.qc index dd7a9404f..4adeb2d55 100644 --- a/data/qcsrc/client/View.qc +++ b/data/qcsrc/client/View.qc @@ -10,9 +10,6 @@ void CSQC_UpdateView(void) // watch for gametype changes here... // in ParseStuffCMD the cmd isn't executed yet :/ // might even be better to add the gametype to TE_CSQC_INIT...? - if(gametype != cvar("gametype")) - Gamemode_Init(); - if(!postinit) PostInit(); diff --git a/data/qcsrc/client/sbar.qc b/data/qcsrc/client/sbar.qc index f129a448d..a6013ede3 100644 --- a/data/qcsrc/client/sbar.qc +++ b/data/qcsrc/client/sbar.qc @@ -304,6 +304,8 @@ void Cmd_Sbar_Help(float argc) string Sbar_DefaultColumnLayout() { + return "ping name | +kh,ctf/caps -ctf,kh/kills -ctf,kh/deaths score"; + /* switch(gametype) { case GAME_CTF: return "ping name | caps score"; @@ -311,20 +313,21 @@ string Sbar_DefaultColumnLayout() default: return "ping name | score"; // TODO: add other gametypes } + */ } void Cmd_Sbar_SetFields(float argc) { - float i, j; - string str; + float i, j, slash; + string str, pattern, subpattern; float digit; // TODO: re enable with gametype dependant cvars? if(argc < 2) // no arguments provided - argc = tokenize(strcat("x ", cvar_string("sbar_columns"))); + argc = tokenizebyseparator(strcat("x ", cvar_string("sbar_columns")), " "); - if(argc == 2 && argv(1) == "default") - argc = tokenize(strcat("x ", Sbar_DefaultColumnLayout())); + if(argc < 2 || (argc == 2 && argv(1) == "default")) + argc = tokenizebyseparator(strcat("x ", Sbar_DefaultColumnLayout()), " "); argc = min(MAX_SBAR_FIELDS, argc); sbar_num_fields = 0; @@ -332,17 +335,39 @@ void Cmd_Sbar_SetFields(float argc) drawfont = sbar_font; digit = stringwidth("0123456789", FALSE) / 10; + subpattern = strcat(",", GametypeNameFromType(gametype), ","); + argc = min(argc-1, MAX_SBAR_FIELDS-1); for(i = 0; i < argc; ++i) { str = argv(i+1); + + slash = strstrofs(str, "/", 0); + if(slash >= 0) + { + pattern = substring(str, 0, slash); + str = substring(str, slash + 1, strlen(str) - (slash + 1)); + + if(substring(pattern, 0, 1) == "-") + { + pattern = substring(pattern, 1, strlen(pattern) - 1); + if(strstrofs(strcat(",", pattern, ","), subpattern, 0) >= 0) + continue; + } + else + { + if(substring(pattern, 0, 1) == "+") + pattern = substring(pattern, 1, strlen(pattern) - 1); + if(strstrofs(strcat(",", pattern, ","), subpattern, 0) < 0) + continue; + } + } + strunzone(sbar_title[sbar_num_fields]); sbar_title[sbar_num_fields] = strzone(str); sbar_size[sbar_num_fields] = stringwidth(str, FALSE); str = strtolower(str); - - if(str == "ping") { sbar_field[sbar_num_fields] = SP_PING; } else if(str == "name" || str == "nick") { diff --git a/data/qcsrc/common/util.qc b/data/qcsrc/common/util.qc index 0a685eb9b..886cf4172 100644 --- a/data/qcsrc/common/util.qc +++ b/data/qcsrc/common/util.qc @@ -409,3 +409,18 @@ void buf_save(float buf, string pFilename) fputs(fh, strcat(bufstr_get(buf, i), "\n")); fclose(fh); } + +string GametypeNameFromType(float g) +{ + if (g == GAME_DEATHMATCH) return "dm"; + else if (g == GAME_TEAM_DEATHMATCH) return "tdm"; + else if (g == GAME_DOMINATION) return "dom"; + else if (g == GAME_CTF) return "ctf"; + else if (g == GAME_RUNEMATCH) return "rune"; + else if (g == GAME_LMS) return "lms"; + else if (g == GAME_KEYHUNT) return "kh"; + else if (g == GAME_ONSLAUGHT) return "ons"; + else if (g == GAME_ASSAULT) return "as"; + return "dm"; +} + diff --git a/data/qcsrc/common/util.qh b/data/qcsrc/common/util.qh index 5e238b963..ec38c189e 100644 --- a/data/qcsrc/common/util.qh +++ b/data/qcsrc/common/util.qh @@ -55,3 +55,5 @@ void buf_save(float buf, string filename); #ifndef MENUQC float mod(float a, float b) { return a - (floor(a / b) * b); } #endif + +string GametypeNameFromType(float g); diff --git a/data/qcsrc/server/g_world.qc b/data/qcsrc/server/g_world.qc index b22433168..6883e0cbb 100644 --- a/data/qcsrc/server/g_world.qc +++ b/data/qcsrc/server/g_world.qc @@ -382,25 +382,7 @@ float TryFile( string pFilename ) string GetGametype() { - if (game == GAME_DEATHMATCH) - return "dm"; - else if (game == GAME_TEAM_DEATHMATCH) - return "tdm"; - else if (game == GAME_DOMINATION) - return "dom"; - else if (game == GAME_CTF) - return "ctf"; - else if (game == GAME_RUNEMATCH) - return "rune"; - else if (game == GAME_LMS) - return "lms"; - else if (game == GAME_KEYHUNT) - return "kh"; - else if (game == GAME_ONSLAUGHT) - return "ons"; - else if (game == GAME_ASSAULT) - return "as"; - return "dm"; + return GametypeNameFromType(game); } float IsSameGametype(string mapcfgname) diff --git a/data/qcsrc/server/scores.qc b/data/qcsrc/server/scores.qc index 4373c4952..a8d749d82 100644 --- a/data/qcsrc/server/scores.qc +++ b/data/qcsrc/server/scores.qc @@ -114,6 +114,7 @@ float ScoreInfo_SendEntity(entity to) { WriteByte(MSG_ENTITY, ENT_CLIENT_SCORES_INFO); float i; + WriteByte(MSG_ENTITY, game); for(i = 0; i < MAX_SCORE; ++i) { WriteString(MSG_ENTITY, scores_label[i]); -- 2.39.2