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.cpp8
-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.h2
11 files changed, 41 insertions, 0 deletions
diff --git a/src/actions/commands.cpp b/src/actions/commands.cpp
index c317af86a..13bb0b622 100644
--- a/src/actions/commands.cpp
+++ b/src/actions/commands.cpp
@@ -1387,4 +1387,13 @@ impHandler(commandRandomWarp)
return true;
}
+impHandler(commandGotoNpc)
+{
+ const std::string args = event.args;
+ if (args.empty())
+ return false;
+ adminHandler->gotoNpc(args);
+ return true;
+}
+
} // namespace Actions
diff --git a/src/actions/commands.h b/src/actions/commands.h
index bf7ebe03c..f1dc28356 100644
--- a/src/actions/commands.h
+++ b/src/actions/commands.h
@@ -119,6 +119,7 @@ namespace Actions
decHandler(commandSavePosition);
decHandler(commandLoadPosition);
decHandler(commandRandomWarp);
+ decHandler(commandGotoNpc);
} // namespace Actions
#undef decHandler
diff --git a/src/dyetool/actions/commands.cpp b/src/dyetool/actions/commands.cpp
index 2b09fc90a..79c03a746 100644
--- a/src/dyetool/actions/commands.cpp
+++ b/src/dyetool/actions/commands.cpp
@@ -119,5 +119,6 @@ impHandlerVoid(commandSpawnEvilClone)
impHandlerVoid(commandSavePosition)
impHandlerVoid(commandLoadPosition)
impHandlerVoid(commandRandomWarp)
+impHandlerVoid(commandGotoNpc)
} // namespace Actions
diff --git a/src/enums/input/inputaction.h b/src/enums/input/inputaction.h
index 261e7319c..29d8b9362 100644
--- a/src/enums/input/inputaction.h
+++ b/src/enums/input/inputaction.h
@@ -648,6 +648,7 @@ enumStart(InputAction)
COMMAND_SAVE_POSITION,
COMMAND_LOAD_POSITION,
COMMAND_RANDOM_WARP,
+ COMMAND_GOTO_NPC,
TOTAL
}
enumEnd(InputAction);
diff --git a/src/gui/popups/popupmenu.cpp b/src/gui/popups/popupmenu.cpp
index 903720de4..cb46084d2 100644
--- a/src/gui/popups/popupmenu.cpp
+++ b/src/gui/popups/popupmenu.cpp
@@ -2842,6 +2842,14 @@ void PopupMenu::showNpcGMCommands()
// TRANSLATORS: popup menu item
// TRANSLATORS: kick player
mBrowserBox->addRow("/kick :'BEINGID'", _("Kick"));
+ const bool legacy = Net::getNetworkType() == ServerType::TMWATHENA;
+ if (!legacy)
+ {
+ mBrowserBox->addRow("##3---");
+ // TRANSLATORS: popup menu item
+ // TRANSLATORS: warp to npc
+ mBrowserBox->addRow("/gotonpc 'NAME'", _("Goto"));
+ }
}
}
diff --git a/src/input/inputactionmap.h b/src/input/inputactionmap.h
index 38768dbe1..3a90e4a5d 100644
--- a/src/input/inputactionmap.h
+++ b/src/input/inputactionmap.h
@@ -5377,6 +5377,12 @@ static const InputActionData inputActionData
"randomwarp|jump",
UseArgs_true,
Protected_true},
+ {"keyCommandGotoNpc",
+ defaultAction(&Actions::commandGotoNpc),
+ InputCondition::INGAME,
+ "gotonpc|warptonpc",
+ UseArgs_true,
+ Protected_true},
};
#undef defaultAction
diff --git a/src/net/adminhandler.h b/src/net/adminhandler.h
index 2ac37ffed..94acc54f5 100644
--- a/src/net/adminhandler.h
+++ b/src/net/adminhandler.h
@@ -140,6 +140,8 @@ class AdminHandler notfinal
virtual void loadPosition(const std::string &name) const = 0;
virtual void randomWarp(const std::string &name) const = 0;
+
+ virtual void gotoNpc(const std::string &name) const = 0;
};
} // namespace Net
diff --git a/src/net/eathena/adminhandler.cpp b/src/net/eathena/adminhandler.cpp
index b647f92b0..f1742315b 100644
--- a/src/net/eathena/adminhandler.cpp
+++ b/src/net/eathena/adminhandler.cpp
@@ -265,4 +265,9 @@ void AdminHandler::randomWarp(const std::string &name) const
Gm::runCharCommand("jump", name);
}
+void AdminHandler::gotoNpc(const std::string &name) const
+{
+ Gm::runCommand("tonpc", name);
+}
+
} // namespace EAthena
diff --git a/src/net/eathena/adminhandler.h b/src/net/eathena/adminhandler.h
index c7f997590..0ddc8b348 100644
--- a/src/net/eathena/adminhandler.h
+++ b/src/net/eathena/adminhandler.h
@@ -114,6 +114,8 @@ class AdminHandler final : public Ea::AdminHandler
void randomWarp(const std::string &name) const override final;
+ void gotoNpc(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 363cd2552..76bec8fc5 100644
--- a/src/net/tmwa/adminhandler.cpp
+++ b/src/net/tmwa/adminhandler.cpp
@@ -207,4 +207,8 @@ void AdminHandler::randomWarp(const std::string &name A_UNUSED) const
{
}
+void AdminHandler::gotoNpc(const std::string &name A_UNUSED) const
+{
+}
+
} // namespace TmwAthena
diff --git a/src/net/tmwa/adminhandler.h b/src/net/tmwa/adminhandler.h
index 88bd007f8..bdb7e1037 100644
--- a/src/net/tmwa/adminhandler.h
+++ b/src/net/tmwa/adminhandler.h
@@ -126,6 +126,8 @@ class AdminHandler final : public Ea::AdminHandler
A_CONST;
void randomWarp(const std::string &name) const override final A_CONST;
+
+ void gotoNpc(const std::string &name) const override final A_CONST;
};
} // namespace TmwAthena