# CS2-Tags Our fork of [daffyyyy/CS2-Tags](https://github.com/daffyyyy/CS2-Tags): chat prefixes, name/message colours and scoreboard (clan) tags, assigned by SteamID64, admin group or permission. Built for CounterStrikeSharp 1.0.375 (net10.0) and meant to run alongside CS2-SimpleAdmin. ## Changes from upstream 1.0.4c - Targets net10.0 / CSS 1.0.375. Uses System.Text.Json, so Newtonsoft.Json no longer ships with it. - Config moved to `configs/plugins/CS2-Tags/tags.json`. The default file uses our SimpleAdmin rank groups. Comments and trailing commas are allowed. A broken file is logged and the previous tags stay in use. - Scoreboard tags call `SetStateChanged` on `m_szClan` so clients are told about the change. - Colour tags like `{RED}` are only expanded in the config's strings. Players can no longer colour their own chat by typing them. - An empty `nick_color` means the team colour (like normal chat), not whatever colour the prefix ended on. - A tag with an empty `prefix`, `nick_color` and `message_color` leaves that player's chat alone (the game prints it), in both all and team chat. The old `team_chat` key is gone. - `css_tags_reload` works from the server console and for `@css/root` admins, and reapplies scoreboard tags straight away. Hot reload applies tags to players already connected. - Verification tags from GroupVerify (see below). - Removed `css_tag_mute`/`css_tag_unmute` and the `@` team-chat admin chat. CS2-SimpleAdmin already does both, and its catch-all command listener runs first. CSS always runs those before per-command listeners, so gagged players' messages never reach this plugin. ## Configuration `addons/counterstrikesharp/configs/plugins/CS2-Tags/tags.json`, written on first load with a tag for each of our SimpleAdmin rank groups. The chat prefixes are the same rank tags SimpleAdmin uses in staff chat (O, S.Admin, Admin, T.Admin, Mod, T.Mod, Helper, Guardian): `[Mod] name: message`, with a white `[ ]`, lime rank and team-coloured name. The scoreboard shows OWNER, S.ADMIN, ADMIN, T.ADMIN, MOD, T.MOD, HELPER and GUARDIAN (CS2 adds the brackets itself). An example with other kinds of key: ```jsonc { "tags": { "76561198000000000": { "prefix": "{Magenta}[Dev]", "nick_color": "", "message_color": "", "scoreboard": "Dev" }, "#rank/owner": { "prefix": "{Default}[{Lime}O{Default}]", "nick_color": "", "message_color": "", "scoreboard": "OWNER" }, "#rank/mod": { "prefix": "{Default}[{Lime}Mod{Default}]", "nick_color": "", "message_color": "", "scoreboard": "MOD" }, "@css/vip": { "prefix": "{Gold}[VIP]", "nick_color": "", "message_color": "", "scoreboard": "VIP" }, "everyone": { "prefix": "", "nick_color": "", "message_color": "", "scoreboard": "" } } } ``` Each player gets exactly one tag, picked in this order: 1. A SteamID64 key matching the player. 2. The first `#group` or `@permission` key the player matches, **in file order**. Put higher ranks first. `@css/root` passes every `@css/...` check, so owners match any permission key. 3. `everyone`, if present. Fields (all optional, empty means "not set"): - `prefix` - shown before the name in chat. - `nick_color` / `message_color` - colour tags; empty means team colour / default. - `scoreboard` - clan tag on the scoreboard, without brackets (CS2 adds them); empty leaves the player's own clan tag. The optional `chat` section sets the labels CS2-Tags adds to the chat lines it prints (only for players whose tag changes their chat). Leave a key out for its default, or set it to `""` to drop the label: ```jsonc "chat": { "dead": "{White}☠", // before a dead player's line "team_t": "{Yellow}(T)", // start of team chat, per team "team_ct": "{Blue}(CT)", "team_spec": "(SPEC)", "team_none": "(NONE)" } ``` Colours: any `ChatColors` field name in braces, case-insensitive, e.g. `{Red}`, `{LightBlue}`, `{Gold}`, `{Grey}`, plus `{TEAMCOLOR}`. Group membership comes from CS2-SimpleAdmin (`css_addadmin ... -g`, `css_addgroup`, then `css_reloadadmins`). After changing ranks or `tags.json`, run `css_tags_reload` to reapply scoreboard tags without waiting for a respawn. ## Verified players' clan tag (GroupVerify) When GroupVerify (`plugins/GroupVerify`) is installed and has a clan tag set (`css_gv_clantag`, or the web panel's Verification page), players **without a rank tag** get it in place of their own Steam group tag: | | verified | not verified | |-----------------------------------|----------------|----------------| | a scoreboard tag from `tags.json` | their rank tag | their rank tag | | everyone else | the clan tag | no tag at all | Staff keep their rank tag either way. With no clan tag set, GroupVerify turned off or not installed, everyone else keeps their own tag, as before; turning the clan tag off puts back the tag each player had. Tags update as soon as someone's verification or the clan tag changes. GroupVerify's API is a compile-only reference (`lib/GroupVerifyApi.dll`, a copy of `plugins/GroupVerify`'s build; GroupVerify installs the real one in `shared/GroupVerifyApi`). CS2-Tags loads without it. ## Commands - `css_tags_reload` (`@css/root` or server console) - reload `tags.json` and reapply scoreboard tags. ## Building and releasing ``` cd plugins/CS2-Tags && ../../build.sh # output in compiled/CS2-Tags/ FORGEJO_TOKEN=... ./release.sh v ``` `release.sh` rebuilds from the committed source and publishes `CS2-Tags-.tar.gz`, laid out like `game/csgo/`, to https://git.zio.sh/cs2/CS2-Tags. The tag must equal `v` (`v1.0.4c-zio6` now).