{"id":26155264,"url":"https://github.com/ianlucas/cs2-match-plugin","last_synced_at":"2025-04-14T07:42:29.595Z","repository":{"id":252465672,"uuid":"840141788","full_name":"ianlucas/cs2-match-plugin","owner":"ianlucas","description":"A CounterStrikeSharp plugin for Counter-Strike 2 matches with Get5 compatibility","archived":false,"fork":false,"pushed_at":"2025-04-11T15:49:02.000Z","size":225,"stargazers_count":8,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-11T16:56:19.271Z","etag":null,"topics":["counter-strike-2","counterstrikesharp","cs2","get5"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ianlucas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"License.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-08-09T04:07:37.000Z","updated_at":"2025-04-11T15:48:15.000Z","dependencies_parsed_at":"2024-09-09T18:19:42.166Z","dependency_job_id":"a01e0d14-d84f-4230-8f8b-005efae3d8a3","html_url":"https://github.com/ianlucas/cs2-match-plugin","commit_stats":null,"previous_names":["ianlucas/cs2-match-plugin"],"tags_count":67,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ianlucas%2Fcs2-match-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ianlucas%2Fcs2-match-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ianlucas%2Fcs2-match-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ianlucas%2Fcs2-match-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ianlucas","download_url":"https://codeload.github.com/ianlucas/cs2-match-plugin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248842376,"owners_count":21170351,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["counter-strike-2","counterstrikesharp","cs2","get5"],"created_at":"2025-03-11T08:52:56.501Z","updated_at":"2025-04-14T07:42:29.579Z","avatar_url":"https://github.com/ianlucas.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"﻿# CS2 Match Plugin\n\n\u003e A [CounterStrikeSharp](https://docs.cssharp.dev) plugin for Counter-Strike 2 matches\n\n## Installation\n\n1. Install the latest release of [Metamod and CounterStrikeSharp](https://docs.cssharp.dev/docs/guides/getting-started.html).\n2. [Download the latest release](https://github.com/ianlucas/cs2-match-plugin/releases) of CS2 Match Plugin.\n3. Extract the ZIP file contents into `addons/counterstrikesharp`.\n\n## Quick Start\n\n### 1. Basics\n\n#### `match_chat_prefix` ConVar\n\n* Prefix for chat messages.\n* **Type:** `string`\n* **Default:** `[{red}Match{default}]`\n\n#### `match_bots` ConVar\n\n* Bots join the game to fill slots. Not recommended to be enabled.\n* **Type:** `bool`\n* **Default:** `false`\n\n#### `get5_server_id` ConVar\n\n* A string that identifies your server.\n* **Type:** `string`\n* **Default:** _empty_\n\n### 2. Server Setup\n\n#### `match_matchmaking` ConVar\n\n* Matchmaking mode. Players not assigned to a team will be kicked from the server (unless they are administrators).\n* **Type:** `bool`\n* **Default:** `false`\n\n#### `match_matchmaking_ready_timeout` ConVar\n\n* Time to players ready up. Requires `match_matchmaking` to be `true`. Players will be kicked if they don't ready up in time.\n* **Type:** `int`\n* **Default:** `300`\n\n#### `get5_remote_log_url` ConVar\n\n* The URL to send all events to.\n* **Type:** `string`\n* **Default:** _empty_\n\n#### `get5_remote_log_header_key` ConVar\n\n* Key of the header sent on remote log request.\n* **Type:** `string`\n* **Default:** _empty_\n\n#### `get5_remote_log_header_value` ConVar\n\n* Value of the header sent on remote log request.\n* **Type:** `string`\n* **Default:** _empty_\n\n### 3. Match CSTV Setup\n\n#### `match_tv_record` ConVar\n\n* Are we recording demos?\n* **Type:** `bool`\n* **Default:** `true`\n\n#### `match_tv_delay` ConVar\n\n* CSTV's broadcast delay (in seconds).\n* **Type:** `int`\n* **Default:** `105`\n\n### 4. Match Setup\n\n#### `match_players_needed` ConVar\n\n* Number of players needed for a match.\n* **Type:** `int`\n* **Default:** `10`\n\n#### `match_players_needed_per_team` ConVar\n\n* Number of players needed per team.\n* **Type:** `int`\n* **Default:** `5`\n\n#### `match_max_rounds` ConVar\n\n* Max number of rounds to play.\n* **Type:** `int`\n* **Default:** `24`\n\n#### `match_ot_max_rounds` ConVar\n\n* Additional rounds to determine winner.\n* **Type:** `int`\n* **Default:** `6`\n\n#### `match_friendly_pause` ConVar\n\n* Teams can pause at any time.\n* **Type:** `bool`\n* **Default:** `false`\n\n#### `match_knife_vote_timeout` ConVar\n\n* Time to decide side (in seconds).\n* **Type:** `int`\n* **Default:** `60`\n\n#### `match_forfeit_timeout` ConVar\n\n* Time to forfeit a team (in seconds).\n* **Type:** `int`\n* **Default:** `60`\n\n### 5. Optional\n\n#### `match_verbose` ConVar\n\n\u003e [!IMPORTANT]\n\u003e Keeping this setting enabled makes debugging issues easier.\n\n* Are we debugging the plugin?\n* **Type:** `bool`\n* **Default:** `true`\n\n## Commands\n\n### Admin\n\n#### `match_status` Command\n\n* Prints a status report of the plugin in the console. Requires `@css/config` permission.\n\n#### `css_start` or `!start` Command\n\n* Forcefully starts the match during warmup. Requires `@css/config` permission.\n\n#### `css_map \u003cmapname\u003e` or `!map \u003cmapname\u003e` Command\n\n* Changes the current map. Limited mapnames starting with `de_`. Requires `@css/config` permission.\n\n#### `css_restart` or `!restart` Command\n\n* Forcefully restarts a running match to warmup. Requires `@css/config` permission.\n\n#### `match_load \u003cfilepath\u003e` or `get5_loadmatch \u003cfilepath\u003e` Command\n\n* Loads a [Get5 match configuration file (JSON)](https://splewis.github.io/get5/latest/match_schema) relative to the `csgo/addons/counterstrikesharp/config/plugins/MatchPlugin` or `csgo` directories. Requires `@css/config` permission.\n\n#### `css_restore \u003cround\u003e` or `!restore \u003cround\u003e` Command\n\n* Tries to restore a round in a live match. Requires `@css/config` permission.\n\n### Get5 Match Schema\n\n#### Differences\n\nNot all properties from Get5 Match Schema are being used, check the source code for the `match_load` command.\n\n##### `SteamID` String\n\nWe only support 64-bit SteamIDs, e.g. `76561197960287930`.\n\n##### `Get5MatchTeam` Object\n\n* `leaderid` (`string`) property has been added. It's the `SteamID` for the in-game leader of the team. If absent, the plugin will elect the first player as the team in-game leader.\n\n#### Minimal Example\n\n```json\n{\n\t\"matchid\": \"12345\",\n\t\"maplist\": [\"de_train\", \"de_dust2\", \"de_inferno\"],\n\t\"team1\": {\n\t\t\"name\": \"Team 1\",\n\t\t\"players\": {\n\t\t\t\"12345\": \"Player 1\",\n\t\t\t\"12345\": \"Player 2\",\n\t\t\t\"12345\": \"Player 3\",\n\t\t\t\"12345\": \"Player 4\",\n\t\t\t\"12345\": \"Player 5\"\n\t\t}\n\t},\n\t\"team2\": {\n\t\t\"name\": \"Team 2\",\n\t\t\"players\": {\n\t\t\t\"12345\": \"Player 6\",\n\t\t\t\"12345\": \"Player 7\",\n\t\t\t\"12345\": \"Player 8\",\n\t\t\t\"12345\": \"Player 9\",\n\t\t\t\"12345\": \"Player 10\"\n\t\t}\n\t},\n\t\"cvars\": {\n\t\t\"match_matchmaking\": \"true\"\n\t}\n}\n```\n\n### Get5 Events\n\nThe plugin has compatibility with most Get5 events. Once you setup `get5_remote_log_url` ConVar with a URL, the plugin will send events to it. You can refer to the events at [Get5 Events \u0026 Forwards](https://splewis.github.io/get5/latest/events.html).\n\nNot all events are implemented, and some events may have some differences, so please check below.\n\n#### Missing events\n\n* `OnMapPicked`\n* `OnMapVetoed`\n* `OnDemoUploadEnded`\n\n#### `Get5Player` Object\n\n* `user_id` property may be `null`.\n* `ping` (`number | null`) property has been added.\n\n#### `Get5StatsTeam` Object\n\n* `ping` (`number | null`) property has been added.\n\n#### `OnGameStateChanged` Event\n\n* `new_state` and `old_state` properties can't have `pre_veto`, `veto`, `going_live` and `post_game` states. The lifecycle of the plugin follows this order: `none` → `warmup` → `knife` → `waiting_for_knife_decision` → `live` → `none`.\n\n#### `OnMapResult` Event\n\n* `winner` property may be `null`.\n* `result` (`number`) property has been added.\n\t* `0` is `MapResult.None`;\n\t* `1` is `MapResult.Completed`;\n\t* `2` is `MapResult.Cancelled`;\n\t* `3` is `MapResult.Forfeited`.\n\n#### `OnSeriesResult` Event\n\n* `winner` property may be `null`.\n* `last_map_number` (`number`) property has been added.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fianlucas%2Fcs2-match-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fianlucas%2Fcs2-match-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fianlucas%2Fcs2-match-plugin/lists"}