From 56a1d9e961663b3c67dca2e0d383ae1c074b2925 Mon Sep 17 00:00:00 2001 From: Resxt <55228336+Resxt@users.noreply.github.com> Date: Fri, 24 Mar 2023 17:35:12 +0100 Subject: [PATCH] chat_command_freeze 1.0.0 --- chat_commands/README.md | 18 ++++++ chat_commands/chat_command_freeze.gsc | 79 +++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 chat_commands/chat_command_freeze.gsc diff --git a/chat_commands/README.md b/chat_commands/README.md index cdbffc0..1845971 100644 --- a/chat_commands/README.md +++ b/chat_commands/README.md @@ -84,6 +84,24 @@ set cc_permission_4 "" | setdvar | Changes a dvar on the server | (1) the dvar name (2) the new dvar value | `!setdvar jump_height 500` | 4 | | setclientdvar | Changes a dvar on the targeted player | (1) the name of the player (2) the dvar name (3) the new dvar value | `!setclientdvar Resxt cg_thirdperson 1` | 4 | +## chat_command_freeze.gsc + +Toggles whether the targeted player can move or not. +Note that this does not work during the prematch period. + +| # | Argument | Mandatory | +|---|---|---| +| 1 | The name of the player to freeze/unfreeze | :white_check_mark: | + +| Examples | +|---| +| `!freeze me` | +| `!freeze Resxt` | + +| Permission level | +|---| +| 3 | + ## chat_command_god_mode.gsc Toggles whether the targeted player is in god mode (invincible) or not. diff --git a/chat_commands/chat_command_freeze.gsc b/chat_commands/chat_command_freeze.gsc new file mode 100644 index 0000000..8b6e889 --- /dev/null +++ b/chat_commands/chat_command_freeze.gsc @@ -0,0 +1,79 @@ +#include scripts\chat_commands; + +Init() +{ + CreateCommand(level.chat_commands["ports"], "freeze", "function", ::FreezeCommand, 3, array("default_help_one_player")); +} + + + +/* Command section */ + +FreezeCommand(args) +{ + if (args.size < 1) + { + return NotEnoughArgsError(1); + } + + error = ToggleFreeze(args[0]); + + if (IsDefined(error)) + { + return error; + } +} + + + +/* Logic section */ + +ToggleFreeze(playerName) +{ + player = FindPlayerByName(playerName); + + if (!IsDefined(player)) + { + return PlayerDoesNotExistError(playerName); + } + + commandName = "freeze"; + + ToggleStatus(commandName, "Freeze", player); + + if (GetStatus(commandName, player)) + { + player DoFreeze(true); + player thread ThreadFreeze(); + } + else + { + player DoFreeze(false); + player notify("chat_commands_freeze_off"); + } +} + +ThreadFreeze() +{ + self endon("disconnect"); + self endon("chat_commands_freeze_off"); + + for(;;) + { + self waittill("spawned_player"); + + self DoFreeze(true); + } +} + +DoFreeze(enabled) +{ + if (enabled) + { + self FreezeControls(1); + } + else + { + self FreezeControls(0); + } +} \ No newline at end of file