diff --git a/chat_commands/README.md b/chat_commands/README.md index f8021ab..c55ef6b 100644 --- a/chat_commands/README.md +++ b/chat_commands/README.md @@ -52,6 +52,19 @@ Note that this does not work during the prematch period. | `!freeze me` | | `!freeze Resxt` | +## chat_command_god_mode.gsc + +Toggles whether the targeted player is in god mode (invincible) or not. + +| # | Argument | Mandatory | +|---|---|---| +| 1 | The name of the player to toggle god mode for | :white_check_mark: | + +| Examples | +|---| +| `!god me` | +| `!god Resxt` | + ## chat_command_invisible.gsc Toggles invisibility on the targeted player. diff --git a/chat_commands/chat_command_god_mode.gsc b/chat_commands/chat_command_god_mode.gsc new file mode 100644 index 0000000..93924d8 --- /dev/null +++ b/chat_commands/chat_command_god_mode.gsc @@ -0,0 +1,80 @@ +#include scripts\chat_commands; + +Init() +{ + CreateCommand(level.commands_servers_ports, "god", "function", ::GodModeCommand, ["default_help_one_player"]); +} + + + +/* Command section */ + +GodModeCommand(args) +{ + if (args.size < 1) + { + return NotEnoughArgsError(1); + } + + error = ToggleGodMode(args[0]); + + if (IsDefined(error)) + { + return error; + } +} + + + +/* Logic section */ + +ToggleGodMode(playerName) +{ + player = FindPlayerByName(playerName); + + if (!IsDefined(player)) + { + return PlayerDoesNotExistError(playerName); + } + + commandName = "god"; + + ToggleStatus(commandName, "God Mode", player); + + if (GetStatus(commandName, player)) + { + player DoGodMode(true); + player thread ThreadGodMode(); + } + else + { + player DoGodMode(false); + player notify("chat_commands_god_mode_off"); + } +} + +ThreadGodMode() +{ + self endon("disconnect"); + self endon("chat_commands_god_mode_off"); + + for(;;) + { + self waittill("spawned_player"); + + self DoGodMode(true); + } +} + +DoGodMode(enabled) +{ + health = 99999; + + if (!enabled) + { + health = GetDvarInt("scr_player_maxhealth"); + } + + self.maxhealth = health; + self.health = health; +} \ No newline at end of file