From 46f993ef71494561a172a278acf76a8ae738ab73 Mon Sep 17 00:00:00 2001 From: Alex King <89047260+Kinglykrab@users.noreply.github.com> Date: Sun, 11 Dec 2022 14:08:38 -0500 Subject: [PATCH] [Quest API] Add EVENT_GM_COMMAND to Perl/Lua. (#2634) # Perl - Add `EVENT_GM_COMMAND`, exports `$message`. # Lua - Add `event_gm_command`, exports `e.message`. # Notes - Only parses with real GM commands such as `#reload quest`. --- zone/command.cpp | 2 ++ zone/embparser.cpp | 6 ++++++ zone/event_codes.h | 1 + zone/lua_general.cpp | 3 ++- zone/lua_parser.cpp | 4 +++- zone/lua_parser_events.cpp | 12 ++++++++++++ zone/lua_parser_events.h | 9 +++++++++ 7 files changed, 35 insertions(+), 2 deletions(-) diff --git a/zone/command.cpp b/zone/command.cpp index 563090242..0894f21d6 100644 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -602,6 +602,8 @@ int command_realdispatch(Client *c, std::string message, bool ignore_status) return -1; } + parse->EventPlayer(EVENT_GM_COMMAND, c, message, 0); + cur->function(c, &sep); // Dispatch C++ Command return 0; diff --git a/zone/embparser.cpp b/zone/embparser.cpp index ed0cde2bd..c3fd6e186 100644 --- a/zone/embparser.cpp +++ b/zone/embparser.cpp @@ -165,6 +165,7 @@ const char *QuestEventSubroutines[_LargestEventID] = { "EVENT_AA_GAIN", "EVENT_PAYLOAD", "EVENT_LEVEL_DOWN", + "EVENT_GM_COMMAND", #ifdef BOTS "EVENT_SPELL_EFFECT_BOT", "EVENT_SPELL_EFFECT_BUFF_TIC_BOT", @@ -1998,6 +1999,11 @@ void PerlembParser::ExportEventVariables( break; } + case EVENT_GM_COMMAND: { + ExportVar(package_name.c_str(), "message", data); + break; + } + default: { break; } diff --git a/zone/event_codes.h b/zone/event_codes.h index 482372348..af576cdda 100644 --- a/zone/event_codes.h +++ b/zone/event_codes.h @@ -108,6 +108,7 @@ typedef enum { EVENT_AA_GAIN, EVENT_PAYLOAD, EVENT_LEVEL_DOWN, + EVENT_GM_COMMAND, #ifdef BOTS EVENT_SPELL_EFFECT_BOT, EVENT_SPELL_EFFECT_BUFF_TIC_BOT, diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index aec467025..eae0de5b3 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -4554,7 +4554,8 @@ luabind::scope lua_register_events() { luabind::value("aa_buy", static_cast(EVENT_AA_BUY)), luabind::value("aa_gain", static_cast(EVENT_AA_GAIN)), luabind::value("payload", static_cast(EVENT_PAYLOAD)), - luabind::value("level_down", static_cast(EVENT_LEVEL_DOWN)) + luabind::value("level_down", static_cast(EVENT_LEVEL_DOWN)), + luabind::value("gm_command", static_cast(EVENT_GM_COMMAND)) ]; } diff --git a/zone/lua_parser.cpp b/zone/lua_parser.cpp index 46d578e3b..32a0f19ad 100644 --- a/zone/lua_parser.cpp +++ b/zone/lua_parser.cpp @@ -151,7 +151,8 @@ const char *LuaEvents[_LargestEventID] = { "event_aa_buy", "event_aa_gain", "event_payload", - "event_level_down" + "event_level_down", + "event_gm_command" }; extern Zone *zone; @@ -265,6 +266,7 @@ LuaParser::LuaParser() { PlayerArgumentDispatch[EVENT_PAYLOAD] = handle_player_payload; PlayerArgumentDispatch[EVENT_LEVEL_UP] = handle_player_level_up; PlayerArgumentDispatch[EVENT_LEVEL_DOWN] = handle_player_level_down; + PlayerArgumentDispatch[EVENT_GM_COMMAND] = handle_player_gm_command; ItemArgumentDispatch[EVENT_ITEM_CLICK] = handle_item_click; ItemArgumentDispatch[EVENT_ITEM_CLICK_CAST] = handle_item_click; diff --git a/zone/lua_parser_events.cpp b/zone/lua_parser_events.cpp index b5bf0e609..428d29d44 100644 --- a/zone/lua_parser_events.cpp +++ b/zone/lua_parser_events.cpp @@ -1116,6 +1116,18 @@ void handle_player_level_down( lua_setfield(L, -2, "levels_lost"); } +void handle_player_gm_command( + QuestInterface *parse, + lua_State* L, + Client* client, + std::string data, + uint32 extra_data, + std::vector *extra_pointers +) { + lua_pushstring(L, data.c_str()); + lua_setfield(L, -2, "message"); +} + // Item void handle_item_click( QuestInterface *parse, diff --git a/zone/lua_parser_events.h b/zone/lua_parser_events.h index b811604a1..4da70367a 100644 --- a/zone/lua_parser_events.h +++ b/zone/lua_parser_events.h @@ -609,6 +609,15 @@ void handle_player_level_down( std::vector *extra_pointers ); +void handle_player_gm_command( + QuestInterface *parse, + lua_State* L, + Client* client, + std::string data, + uint32 extra_data, + std::vector *extra_pointers +); + // Item void handle_item_click(