From f6a1adf8585906bf59b7cf266e62aff28679cfad Mon Sep 17 00:00:00 2001 From: z411 Date: Thu, 15 Oct 2020 02:37:27 -0300 Subject: [PATCH] Country flag support --- qcsrc/client/hud/panel/scoreboard.qc | 9 ++++++- qcsrc/client/main.qc | 1 + qcsrc/client/main.qh | 1 + qcsrc/common/ent_cs.qc | 4 +++ qcsrc/common/ent_cs.qh | 6 +++++ qcsrc/server/client.qh | 2 ++ qcsrc/server/command/sv_cmd.qc | 38 +++++++++++++++++++++++++--- qcsrc/server/world.qc | 2 ++ 8 files changed, 59 insertions(+), 4 deletions(-) diff --git a/qcsrc/client/hud/panel/scoreboard.qc b/qcsrc/client/hud/panel/scoreboard.qc index f3bb2d3d8..f53a29976 100644 --- a/qcsrc/client/hud/panel/scoreboard.qc +++ b/qcsrc/client/hud/panel/scoreboard.qc @@ -599,7 +599,7 @@ string Scoreboard_GetName(entity pl) { sbt_field_icon0 = "gfx/scoreboard/player_ready"; } - else if(!teamplay) + /*else if(!teamplay) { int f = entcs_GetClientColors(pl.sv_entnum); { @@ -609,7 +609,14 @@ string Scoreboard_GetName(entity pl) sbt_field_icon2 = "gfx/scoreboard/playercolor_pants"; sbt_field_icon2_rgb = colormapPaletteColor(f % 16, 1); } + }*/ + else + { + int ccode = entcs_GetCountryCode(pl.sv_entnum); + if(ccode) + sbt_field_icon0 = strcat("gfx/flags/", ftos(ccode)); } + return entcs_GetName(pl.sv_entnum); } diff --git a/qcsrc/client/main.qc b/qcsrc/client/main.qc index 69cec830d..f81bfc1a4 100644 --- a/qcsrc/client/main.qc +++ b/qcsrc/client/main.qc @@ -554,6 +554,7 @@ NET_HANDLE(ENT_CLIENT_NAGGER, bool isnew) for(i = 1; i <= maxclients; i += 8) { f = ReadByte(); + LOG_INFOF("%d", f); for(j = i-1, b = BIT(0); b < BIT(8); b <<= 1, ++j) if (!(f & b)) if(playerslots[j]) diff --git a/qcsrc/client/main.qh b/qcsrc/client/main.qh index e46bb748a..4189c3723 100644 --- a/qcsrc/client/main.qh +++ b/qcsrc/client/main.qh @@ -131,6 +131,7 @@ string GetSpeedUnit(int speed_unit); .int team; .int team_size; +.int countrycode; int binddb; diff --git a/qcsrc/common/ent_cs.qc b/qcsrc/common/ent_cs.qc index 4ef6b2f79..2861ae0cd 100644 --- a/qcsrc/common/ent_cs.qc +++ b/qcsrc/common/ent_cs.qc @@ -146,6 +146,10 @@ ENTCS_PROP(CLIENTCOLORS, true, clientcolors, clientcolors, ENTCS_SET_NORMAL, ENTCS_PROP(FRAGS, true, frags, frags, ENTCS_SET_NORMAL, { WriteShort(chan, ent.frags); }, { ent.frags = ReadShort(); }) + +ENTCS_PROP(COUNTRYCODE, true, countrycode, countrycode, ENTCS_SET_NORMAL, + { WriteByte(chan, ent.countrycode); }, + { ent.countrycode = ReadByte(); }) // use sv_solid to avoid changing solidity state of entcs entities ENTCS_PROP(SOLID, true, sv_solid, solid, ENTCS_SET_NORMAL, diff --git a/qcsrc/common/ent_cs.qh b/qcsrc/common/ent_cs.qh index 8ae89fd3b..30ee83bbc 100644 --- a/qcsrc/common/ent_cs.qh +++ b/qcsrc/common/ent_cs.qh @@ -133,6 +133,12 @@ REGISTER_NET_TEMP(CLIENT_ENTCS) entity e = entcs_receiver(i); return ColorTranslateRGB(e ? e.netname : getplayerkeyvalue(i, "name")); } + + int entcs_GetCountryCode(int i) + { + entity e = entcs_receiver(i); + return e.countrycode; + } /** * @param i zero indexed player diff --git a/qcsrc/server/client.qh b/qcsrc/server/client.qh index c6c69380c..a36758b67 100644 --- a/qcsrc/server/client.qh +++ b/qcsrc/server/client.qh @@ -40,6 +40,7 @@ CLASS(Client, Object) ATTRIB(Client, colormap, int, this.colormap); ATTRIB(Client, team, int, this.team); ATTRIB(Client, clientcolors, int, this.clientcolors); + ATTRIB(Client, countrycode, int, this.countrycode); /** Client IP */ ATTRIB(Client, netaddress, string, this.netaddress); ATTRIB(Client, playermodel, string, this.playermodel); @@ -265,6 +266,7 @@ bool independent_players; #define MAKE_INDEPENDENT_PLAYER(e) (((e).solid = SOLID_TRIGGER), ((e).frags = FRAGS_PLAYER_OUT_OF_GAME)) .float lastkill; +.int countrycode; .int killcount; //flood fields diff --git a/qcsrc/server/command/sv_cmd.qc b/qcsrc/server/command/sv_cmd.qc index 7a3ca3c76..526775c7c 100644 --- a/qcsrc/server/command/sv_cmd.qc +++ b/qcsrc/server/command/sv_cmd.qc @@ -160,7 +160,7 @@ void GameCommand_adminmsg(int request, int argc) } } -void GameCommand_team_name(int request, int argc) +void GameCommand_teamname(int request, int argc) { switch (request) { @@ -183,9 +183,9 @@ void GameCommand_team_name(int request, int argc) case "yellow": case "pink": { + int tm = Team_ColorToTeam(argv(1)); if(argv(2) != "") { cvar_set(strcat("g_teamnames_", argv(1)), argv(2)); - int tm = Team_ColorToTeam(argv(1)); bprintf("\{1}%s%s^7 team is now known as %s^7\n", Team_ColorCode(tm), Team_ColorName(tm), argv(2)); } else { cvar_set(strcat("g_teamnames_", argv(1)), ""); @@ -1023,6 +1023,37 @@ void GameCommand_make_mapinfo(int request) } } +void GameCommand_setflag(int request, int argc) +{ + switch (request) + { + case CMD_REQUEST_COMMAND: + { + + entity client; + float accepted; + + client = GetFilteredEntity(argv(1)); + accepted = VerifyClientEntity(client, false, false); + + if (accepted <= 0) + { + LOG_INFO("setflag error"); + return; + } + + client.countrycode = stof(argv(2)); + } + default: + LOG_INFOF("Incorrect parameters for ^2%s^7", argv(0)); + case CMD_REQUEST_USAGE: + { + LOG_HELP("Usage:^3 sv_cmd setflag client countrycode"); + return; + } + } +} + void GameCommand_moveplayer(int request, int argc) { switch (request) @@ -1679,7 +1710,8 @@ void GameCommand_(int request) // ================================== // Do not hard code aliases for these, instead create them in commands.cfg... also: keep in alphabetical order, please ;) -SERVER_COMMAND(team_name, "Set team name") { GameCommand_team_name(request, arguments); } +SERVER_COMMAND(setflag, "Set client flag") { GameCommand_setflag(request, arguments); } +SERVER_COMMAND(teamname, "Set team name") { GameCommand_teamname(request, arguments); } SERVER_COMMAND(adminmsg, "Send an admin message to a client directly") { GameCommand_adminmsg(request, arguments); } SERVER_COMMAND(allready, "Restart the server and reset the players") { GameCommand_allready(request); } diff --git a/qcsrc/server/world.qc b/qcsrc/server/world.qc index e0181c92c..891131b38 100644 --- a/qcsrc/server/world.qc +++ b/qcsrc/server/world.qc @@ -314,6 +314,8 @@ void cvar_changes_init() BADCVAR("g_maplist"); BADCVAR("g_maplist_mostrecent"); BADCVAR("sv_motd"); + + BADPREFIX("g_teamnames_"); v = cvar_string(k); d = cvar_defstring(k); -- 2.39.2