From f56eb4c145e73c07162165cfd16fb09d976a9b78 Mon Sep 17 00:00:00 2001 From: Cooldude2606 Date: Wed, 31 Mar 2021 01:06:57 +0100 Subject: [PATCH] Added spectate commands --- config/_file_loader.lua | 1 + config/expcore/roles.lua | 4 ++++ locale/en/commands.cfg | 5 ++++- modules/commands/spectate.lua | 33 +++++++++++++++++++++++++++++++++ modules/control/spectate.lua | 16 ++++++++++++++++ 5 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 modules/commands/spectate.lua diff --git a/config/_file_loader.lua b/config/_file_loader.lua index 16a135af..f42a33d7 100644 --- a/config/_file_loader.lua +++ b/config/_file_loader.lua @@ -29,6 +29,7 @@ return { 'modules.commands.home', 'modules.commands.connect', 'modules.commands.last-location', + 'modules.commands.spectate', --- Addons 'modules.addons.chat-popups', diff --git a/config/expcore/roles.lua b/config/expcore/roles.lua index 9b826202..62932b07 100644 --- a/config/expcore/roles.lua +++ b/config/expcore/roles.lua @@ -102,6 +102,8 @@ Roles.new_role('Trainee','TrMod') 'command/unjail', 'command/kick', 'command/ban', + 'command/spectate', + 'command/follow', } --- Trusted Roles @@ -115,6 +117,8 @@ Roles.new_role('Board Member','Board') :allow{ 'command/goto', 'command/repair', + 'command/spectate', + 'command/follow', } Roles.new_role('Senior Backer','Backer') diff --git a/locale/en/commands.cfg b/locale/en/commands.cfg index dea7b935..c2f91450 100644 --- a/locale/en/commands.cfg +++ b/locale/en/commands.cfg @@ -82,4 +82,7 @@ offline=You cannot connect as the server is currently offline: __1__ none-matching=No servers were found with that name, if you used an address please append true to the end of your command. [expcom-lastlocation] -response=Last location of __1__ was [gps=__2__,__3__] \ No newline at end of file +response=Last location of __1__ was [gps=__2__,__3__] + +[expcom-spectate] +follow-self=You can not follow your self \ No newline at end of file diff --git a/modules/commands/spectate.lua b/modules/commands/spectate.lua new file mode 100644 index 00000000..51f28bd3 --- /dev/null +++ b/modules/commands/spectate.lua @@ -0,0 +1,33 @@ +--[[-- Commands Module - Spectate + - Adds a commands relating to spectate and follow + @commands Spectate +]] + +local Spectate = require 'modules.control.spectate' --- @dep modules.control.spectate +local Commands = require 'expcore.commands' --- @dep expcore.commands +require 'config.expcore.command_general_parse' + +--- Toggles spectator mode for the caller +-- @command spectate +Commands.new_command('spectate', 'Toggles spectator mode') +:register(function(player) + if Spectate.is_spectating(player) then + Spectate.stop_spectate(player) + else + Spectate.start_spectate(player) + end +end) + +--- Enters follow mode for the caller, following the given player. +-- @command follow +-- @tparam LuaPlayer player The player that will be followed +Commands.new_command('follow', 'Start following a player in spectator') +:add_alias('f') +:add_param('player', false, 'player-online') +:register(function(player, action_player) + if player == action_player then + return Commands.error{'expcom-spectate.follow-self'} + else + Spectate.start_follow(player, action_player) + end +end) \ No newline at end of file diff --git a/modules/control/spectate.lua b/modules/control/spectate.lua index 25354854..d9320ae7 100644 --- a/modules/control/spectate.lua +++ b/modules/control/spectate.lua @@ -20,6 +20,14 @@ end) ----- Public Functions ----- +--- Test if a player is in spectator mode +-- @tparam LuaPlayer player The player to test the controller type of +-- @treturn boolean True if the player is in spectator mode +function Public.is_spectating(player) + assert(player and player.valid, 'Invalid player given to follower') + return player.controller_type == defines.controllers.spectator +end + --- Puts a player into spectator while maintaining an association to their character -- @tparam LuaPlayer player The player that will be placed into spectator -- @treturn boolean Returns false if the player was already in spectator @@ -47,6 +55,14 @@ function Public.stop_spectate(player) end end +--- Test if a player is in follow mode +-- @tparam LuaPlayer player The player to test the follow mode of +-- @treturn boolean True if the player is in follow mode +function Public.is_following(player) + assert(player and player.valid, 'Invalid player given to follower') + return following[player.index] ~= nil +end + --- Puts a player into spectator and follows an entity as it moves -- @tparam LuaPlayer player The player that will follow the entity -- @tparam ?LuaPlayer|LuaEntity entity The player or entity that will be followed