From e16d1f9b8e242686f0ffa1a7bcc3f254caffca95 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 24 Feb 2016 20:48:23 +0300 Subject: Add chat command /spawnclone. Also add it to player context menu. --- src/actions/commands.cpp | 9 +++++++++ src/actions/commands.h | 1 + src/dyetool/actions/commands.cpp | 1 + src/enums/input/inputaction.h | 1 + src/gui/popups/popupmenu.cpp | 5 +++++ src/input/inputactionmap.h | 6 ++++++ src/net/adminhandler.h | 2 ++ src/net/eathena/adminhandler.cpp | 5 +++++ src/net/eathena/adminhandler.h | 2 ++ src/net/tmwa/adminhandler.cpp | 4 ++++ src/net/tmwa/adminhandler.h | 2 ++ 11 files changed, 38 insertions(+) diff --git a/src/actions/commands.cpp b/src/actions/commands.cpp index d23eb5c12..1df8407bf 100644 --- a/src/actions/commands.cpp +++ b/src/actions/commands.cpp @@ -1341,4 +1341,13 @@ impHandler(commandSpawnSlave) return true; } +impHandler(commandSpawnClone) +{ + const std::string args = event.args; + if (args.empty()) + return false; + adminHandler->spawnClone(args); + return true; +} + } // namespace Actions diff --git a/src/actions/commands.h b/src/actions/commands.h index ebdb73534..7b03da782 100644 --- a/src/actions/commands.h +++ b/src/actions/commands.h @@ -113,6 +113,7 @@ namespace Actions decHandler(commandShowAccountInfo); decHandler(commandSpawn); decHandler(commandSpawnSlave); + decHandler(commandSpawnClone); } // namespace Actions #undef decHandler diff --git a/src/dyetool/actions/commands.cpp b/src/dyetool/actions/commands.cpp index ad91220df..b9da16a17 100644 --- a/src/dyetool/actions/commands.cpp +++ b/src/dyetool/actions/commands.cpp @@ -113,5 +113,6 @@ impHandlerVoid(locatePlayer) impHandlerVoid(commandShowAccountInfo) impHandlerVoid(commandSpawn) impHandlerVoid(commandSpawnSlave) +impHandlerVoid(commandSpawnClone) } // namespace Actions diff --git a/src/enums/input/inputaction.h b/src/enums/input/inputaction.h index 4016bd6dd..c0fb202b4 100644 --- a/src/enums/input/inputaction.h +++ b/src/enums/input/inputaction.h @@ -642,6 +642,7 @@ enumStart(InputAction) COMMAND_SHOW_ACCOUNT_INFO, COMMAND_SPAWN, COMMAND_SPAWN_SLAVE, + COMMAND_SPAWN_CLONE, TOTAL } enumEnd(InputAction); diff --git a/src/gui/popups/popupmenu.cpp b/src/gui/popups/popupmenu.cpp index ec5d07a1e..9273240d0 100644 --- a/src/gui/popups/popupmenu.cpp +++ b/src/gui/popups/popupmenu.cpp @@ -2699,8 +2699,13 @@ void PopupMenu::showPlayerGMCommands() // TRANSLATORS: popup menu item // TRANSLATORS: revive player mBrowserBox->addRow("revive", _("Revive")); + mBrowserBox->addRow("##3---"); + // TRANSLATORS: popup menu item + // TRANSLATORS: spawn player clone + mBrowserBox->addRow("/spawnclone 'NAME'", _("Spawn clone")); if (mBeingId != BeingId_zero) { + mBrowserBox->addRow("##3---"); // TRANSLATORS: popup menu item // TRANSLATORS: kick player mBrowserBox->addRow("/kick :'BEINGID'", _("Kick")); diff --git a/src/input/inputactionmap.h b/src/input/inputactionmap.h index 8b8e9929b..e615d4cf2 100644 --- a/src/input/inputactionmap.h +++ b/src/input/inputactionmap.h @@ -5341,6 +5341,12 @@ static const InputActionData inputActionData "spawnslave|monsterslave|summon", UseArgs_true, Protected_true}, + {"keyCommandSpawnClone", + defaultAction(&Actions::commandSpawnClone), + InputCondition::INGAME, + "spawnclone|playerclone|clone", + UseArgs_true, + Protected_true}, }; #undef defaultAction diff --git a/src/net/adminhandler.h b/src/net/adminhandler.h index 271d6882e..6ebf7c867 100644 --- a/src/net/adminhandler.h +++ b/src/net/adminhandler.h @@ -128,6 +128,8 @@ class AdminHandler notfinal virtual void spawn(const std::string &name) const = 0; virtual void spawnSlave(const std::string &name) const = 0; + + virtual void spawnClone(const std::string &name) const = 0; }; } // namespace Net diff --git a/src/net/eathena/adminhandler.cpp b/src/net/eathena/adminhandler.cpp index 5a91149a2..f0f787499 100644 --- a/src/net/eathena/adminhandler.cpp +++ b/src/net/eathena/adminhandler.cpp @@ -258,4 +258,9 @@ void AdminHandler::spawnSlave(const std::string &name) const chatHandler->talk("@summon " + name, GENERAL_CHANNEL); } +void AdminHandler::spawnClone(const std::string &name) const +{ + chatHandler->talk("@clone " + name, GENERAL_CHANNEL); +} + } // namespace EAthena diff --git a/src/net/eathena/adminhandler.h b/src/net/eathena/adminhandler.h index ae89ce38c..505cb16ed 100644 --- a/src/net/eathena/adminhandler.h +++ b/src/net/eathena/adminhandler.h @@ -102,6 +102,8 @@ class AdminHandler final : public Ea::AdminHandler void spawnSlave(const std::string &name) const override final; + void spawnClone(const std::string &name) const override final; + protected: static std::string mStatsName; }; diff --git a/src/net/tmwa/adminhandler.cpp b/src/net/tmwa/adminhandler.cpp index 1b19567d4..914265295 100644 --- a/src/net/tmwa/adminhandler.cpp +++ b/src/net/tmwa/adminhandler.cpp @@ -186,4 +186,8 @@ void AdminHandler::spawnSlave(const std::string &name A_UNUSED) const { } +void AdminHandler::spawnClone(const std::string &name A_UNUSED) const +{ +} + } // namespace TmwAthena diff --git a/src/net/tmwa/adminhandler.h b/src/net/tmwa/adminhandler.h index c5b5d076c..c3c7cc31e 100644 --- a/src/net/tmwa/adminhandler.h +++ b/src/net/tmwa/adminhandler.h @@ -110,6 +110,8 @@ class AdminHandler final : public Ea::AdminHandler A_CONST; void spawnSlave(const std::string &name) const override final A_CONST; + + void spawnClone(const std::string &name) const override final A_CONST; }; } // namespace TmwAthena -- cgit v1.2.3-60-g2f50