summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/actions/commands.cpp6
-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.cpp8
-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 fe53ffa61..cdb1fa69c 100644
--- a/src/actions/commands.cpp
+++ b/src/actions/commands.cpp
@@ -1368,4 +1368,10 @@ impHandler(commandSpawnEvilClone)
return true;
}
+impHandler(commandSavePosition)
+{
+ adminHandler->savePosition(event.args);
+ return true;
+}
+
} // namespace Actions
diff --git a/src/actions/commands.h b/src/actions/commands.h
index ee4492818..130efec9a 100644
--- a/src/actions/commands.h
+++ b/src/actions/commands.h
@@ -116,6 +116,7 @@ namespace Actions
decHandler(commandSpawnClone);
decHandler(commandSpawnSlaveClone);
decHandler(commandSpawnEvilClone);
+ decHandler(commandSavePosition);
} // namespace Actions
#undef decHandler
diff --git a/src/dyetool/actions/commands.cpp b/src/dyetool/actions/commands.cpp
index 4c54e8d26..984d814d3 100644
--- a/src/dyetool/actions/commands.cpp
+++ b/src/dyetool/actions/commands.cpp
@@ -116,5 +116,6 @@ impHandlerVoid(commandSpawnSlave)
impHandlerVoid(commandSpawnClone)
impHandlerVoid(commandSpawnSlaveClone)
impHandlerVoid(commandSpawnEvilClone)
+impHandlerVoid(commandSavePosition)
} // namespace Actions
diff --git a/src/enums/input/inputaction.h b/src/enums/input/inputaction.h
index ffcf27249..5844e36be 100644
--- a/src/enums/input/inputaction.h
+++ b/src/enums/input/inputaction.h
@@ -645,6 +645,7 @@ enumStart(InputAction)
COMMAND_SPAWN_CLONE,
COMMAND_SPAWN_SLAVE_CLONE,
COMMAND_SPAWN_EVIL_CLONE,
+ COMMAND_SAVE_POSITION,
TOTAL
}
enumEnd(InputAction);
diff --git a/src/gui/popups/popupmenu.cpp b/src/gui/popups/popupmenu.cpp
index 6e063b98c..e109be3f4 100644
--- a/src/gui/popups/popupmenu.cpp
+++ b/src/gui/popups/popupmenu.cpp
@@ -2734,6 +2734,9 @@ void PopupMenu::showPlayerGMCommands()
// TRANSLATORS: mute menu
mBrowserBox->addRow("mute", _("Mute..."));
}
+ // TRANSLATORS: popup menu item
+ // TRANSLATORS: set player save position
+ mBrowserBox->addRow("/savepos", _("Set save position"));
mBrowserBox->addRow("##3---");
// TRANSLATORS: popup menu item
// TRANSLATORS: spawn player clone
diff --git a/src/input/inputactionmap.h b/src/input/inputactionmap.h
index 4faadd258..be335c9fb 100644
--- a/src/input/inputactionmap.h
+++ b/src/input/inputactionmap.h
@@ -5359,6 +5359,12 @@ static const InputActionData inputActionData
"spawnevilclone|playerevilclone|evilclone",
UseArgs_true,
Protected_true},
+ {"keyCommandSavePosition",
+ defaultAction(&Actions::commandSavePosition),
+ InputCondition::INGAME,
+ "savepos|saveposition",
+ UseArgs_true,
+ Protected_true},
};
#undef defaultAction
diff --git a/src/net/adminhandler.h b/src/net/adminhandler.h
index 63a30dc07..963356a81 100644
--- a/src/net/adminhandler.h
+++ b/src/net/adminhandler.h
@@ -134,6 +134,8 @@ class AdminHandler notfinal
virtual void spawnSlaveClone(const std::string &name) const = 0;
virtual void spawnEvilClone(const std::string &name) const = 0;
+
+ virtual void savePosition(const std::string &name) const = 0;
};
} // namespace Net
diff --git a/src/net/eathena/adminhandler.cpp b/src/net/eathena/adminhandler.cpp
index 16a4e999d..4c7b776f9 100644
--- a/src/net/eathena/adminhandler.cpp
+++ b/src/net/eathena/adminhandler.cpp
@@ -273,4 +273,12 @@ void AdminHandler::spawnEvilClone(const std::string &name) const
chatHandler->talk("@evilclone " + name, GENERAL_CHANNEL);
}
+void AdminHandler::savePosition(const std::string &name) const
+{
+ if (name.empty() || (localPlayer && name == localPlayer->getName()))
+ chatHandler->talk("@save", GENERAL_CHANNEL);
+ else
+ chatHandler->talk("#save " + name, GENERAL_CHANNEL);
+}
+
} // namespace EAthena
diff --git a/src/net/eathena/adminhandler.h b/src/net/eathena/adminhandler.h
index 1808231b5..d0212a027 100644
--- a/src/net/eathena/adminhandler.h
+++ b/src/net/eathena/adminhandler.h
@@ -108,6 +108,8 @@ class AdminHandler final : public Ea::AdminHandler
void spawnEvilClone(const std::string &name) const override final;
+ void savePosition(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 a0c6e5457..f9180a7d8 100644
--- a/src/net/tmwa/adminhandler.cpp
+++ b/src/net/tmwa/adminhandler.cpp
@@ -198,4 +198,8 @@ void AdminHandler::spawnEvilClone(const std::string &name A_UNUSED) const
{
}
+void AdminHandler::savePosition(const std::string &name A_UNUSED) const
+{
+}
+
} // namespace TmwAthena
diff --git a/src/net/tmwa/adminhandler.h b/src/net/tmwa/adminhandler.h
index 94025716a..0aaa64f17 100644
--- a/src/net/tmwa/adminhandler.h
+++ b/src/net/tmwa/adminhandler.h
@@ -118,6 +118,9 @@ class AdminHandler final : public Ea::AdminHandler
void spawnEvilClone(const std::string &name) const override final
A_CONST;
+
+ void savePosition(const std::string &name) const override final
+ A_CONST;
};
} // namespace TmwAthena