summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/actions/commands.cpp9
-rw-r--r--src/actions/commands.h1
-rw-r--r--src/dyetool/actions/commands.cpp1
-rw-r--r--src/enums/input/inputaction.h1
-rw-r--r--src/gui/popups/popupmenu.cpp3
-rw-r--r--src/input/inputactionmap.h6
-rw-r--r--src/net/adminhandler.h2
-rw-r--r--src/net/eathena/adminhandler.cpp5
-rw-r--r--src/net/eathena/adminhandler.h2
-rw-r--r--src/net/tmwa/adminhandler.cpp4
-rw-r--r--src/net/tmwa/adminhandler.h3
11 files changed, 37 insertions, 0 deletions
diff --git a/src/actions/commands.cpp b/src/actions/commands.cpp
index 65acd7c70..fe53ffa61 100644
--- a/src/actions/commands.cpp
+++ b/src/actions/commands.cpp
@@ -1359,4 +1359,13 @@ impHandler(commandSpawnSlaveClone)
return true;
}
+impHandler(commandSpawnEvilClone)
+{
+ const std::string args = event.args;
+ if (args.empty())
+ return false;
+ adminHandler->spawnEvilClone(args);
+ return true;
+}
+
} // namespace Actions
diff --git a/src/actions/commands.h b/src/actions/commands.h
index 45aa62998..ee4492818 100644
--- a/src/actions/commands.h
+++ b/src/actions/commands.h
@@ -115,6 +115,7 @@ namespace Actions
decHandler(commandSpawnSlave);
decHandler(commandSpawnClone);
decHandler(commandSpawnSlaveClone);
+ decHandler(commandSpawnEvilClone);
} // namespace Actions
#undef decHandler
diff --git a/src/dyetool/actions/commands.cpp b/src/dyetool/actions/commands.cpp
index 1eeb134ce..4c54e8d26 100644
--- a/src/dyetool/actions/commands.cpp
+++ b/src/dyetool/actions/commands.cpp
@@ -115,5 +115,6 @@ impHandlerVoid(commandSpawn)
impHandlerVoid(commandSpawnSlave)
impHandlerVoid(commandSpawnClone)
impHandlerVoid(commandSpawnSlaveClone)
+impHandlerVoid(commandSpawnEvilClone)
} // namespace Actions
diff --git a/src/enums/input/inputaction.h b/src/enums/input/inputaction.h
index d3295d11b..ffcf27249 100644
--- a/src/enums/input/inputaction.h
+++ b/src/enums/input/inputaction.h
@@ -644,6 +644,7 @@ enumStart(InputAction)
COMMAND_SPAWN_SLAVE,
COMMAND_SPAWN_CLONE,
COMMAND_SPAWN_SLAVE_CLONE,
+ COMMAND_SPAWN_EVIL_CLONE,
TOTAL
}
enumEnd(InputAction);
diff --git a/src/gui/popups/popupmenu.cpp b/src/gui/popups/popupmenu.cpp
index b1279c4ef..530d78617 100644
--- a/src/gui/popups/popupmenu.cpp
+++ b/src/gui/popups/popupmenu.cpp
@@ -2706,6 +2706,9 @@ void PopupMenu::showPlayerGMCommands()
// TRANSLATORS: popup menu item
// TRANSLATORS: spawn slave player clone
mBrowserBox->addRow("/spawnslaveclone 'NAME'", _("Spawn slave clone"));
+ // TRANSLATORS: popup menu item
+ // TRANSLATORS: spawn evil player clone
+ mBrowserBox->addRow("/spawnevilclone 'NAME'", _("Spawn evil clone"));
if (mBeingId != BeingId_zero)
{
mBrowserBox->addRow("##3---");
diff --git a/src/input/inputactionmap.h b/src/input/inputactionmap.h
index 8e24df1f7..4faadd258 100644
--- a/src/input/inputactionmap.h
+++ b/src/input/inputactionmap.h
@@ -5353,6 +5353,12 @@ static const InputActionData inputActionData
"spawnslaveclone|playerslaveclone|slaveclone",
UseArgs_true,
Protected_true},
+ {"keyCommandSpawnEvilClone",
+ defaultAction(&Actions::commandSpawnEvilClone),
+ InputCondition::INGAME,
+ "spawnevilclone|playerevilclone|evilclone",
+ UseArgs_true,
+ Protected_true},
};
#undef defaultAction
diff --git a/src/net/adminhandler.h b/src/net/adminhandler.h
index 197a1dad6..63a30dc07 100644
--- a/src/net/adminhandler.h
+++ b/src/net/adminhandler.h
@@ -132,6 +132,8 @@ class AdminHandler notfinal
virtual void spawnClone(const std::string &name) const = 0;
virtual void spawnSlaveClone(const std::string &name) const = 0;
+
+ virtual void spawnEvilClone(const std::string &name) const = 0;
};
} // namespace Net
diff --git a/src/net/eathena/adminhandler.cpp b/src/net/eathena/adminhandler.cpp
index 11adc9406..16a4e999d 100644
--- a/src/net/eathena/adminhandler.cpp
+++ b/src/net/eathena/adminhandler.cpp
@@ -268,4 +268,9 @@ void AdminHandler::spawnSlaveClone(const std::string &name) const
chatHandler->talk("@slaveclone " + name, GENERAL_CHANNEL);
}
+void AdminHandler::spawnEvilClone(const std::string &name) const
+{
+ chatHandler->talk("@evilclone " + name, GENERAL_CHANNEL);
+}
+
} // namespace EAthena
diff --git a/src/net/eathena/adminhandler.h b/src/net/eathena/adminhandler.h
index 63f27319a..1808231b5 100644
--- a/src/net/eathena/adminhandler.h
+++ b/src/net/eathena/adminhandler.h
@@ -106,6 +106,8 @@ class AdminHandler final : public Ea::AdminHandler
void spawnSlaveClone(const std::string &name) const override final;
+ void spawnEvilClone(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 9c32ceaab..a0c6e5457 100644
--- a/src/net/tmwa/adminhandler.cpp
+++ b/src/net/tmwa/adminhandler.cpp
@@ -194,4 +194,8 @@ void AdminHandler::spawnSlaveClone(const std::string &name A_UNUSED) const
{
}
+void AdminHandler::spawnEvilClone(const std::string &name A_UNUSED) const
+{
+}
+
} // namespace TmwAthena
diff --git a/src/net/tmwa/adminhandler.h b/src/net/tmwa/adminhandler.h
index 89f44674e..94025716a 100644
--- a/src/net/tmwa/adminhandler.h
+++ b/src/net/tmwa/adminhandler.h
@@ -115,6 +115,9 @@ class AdminHandler final : public Ea::AdminHandler
void spawnSlaveClone(const std::string &name) const override final
A_CONST;
+
+ void spawnEvilClone(const std::string &name) const override final
+ A_CONST;
};
} // namespace TmwAthena