From 9e836a9780453e32d06d685e477cc78622ff0cdc Mon Sep 17 00:00:00 2001 From: hg <4683435+hgtw@users.noreply.github.com> Date: Sat, 29 Oct 2022 19:49:48 -0400 Subject: [PATCH] [Feature] Add player /inspect quest event (#2508) Returning non-zero from EVENT_INSPECT will prevent default message --- zone/client_packet.cpp | 8 +++++++- zone/embparser.cpp | 8 +++++++- zone/event_codes.h | 1 + zone/lua_general.cpp | 3 ++- zone/lua_parser.cpp | 4 +++- zone/lua_parser_events.cpp | 7 +++++++ zone/lua_parser_events.h | 2 ++ 7 files changed, 29 insertions(+), 4 deletions(-) diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 10ecdbfd1..5aa55e397 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -9155,7 +9155,13 @@ void Client::Handle_OP_LDoNInspect(const EQApplicationPacket *app) { Mob * target = GetTarget(); if (target && target->GetClass() == LDON_TREASURE && !target->IsAura()) - Message(Chat::Yellow, "%s", target->GetCleanName()); + { + std::vector args = { target }; + if (parse->EventPlayer(EVENT_INSPECT, this, "", target->GetID(), &args) == 0) + { + Message(Chat::Yellow, "%s", target->GetCleanName()); + } + } } void Client::Handle_OP_LDoNOpen(const EQApplicationPacket *app) diff --git a/zone/embparser.cpp b/zone/embparser.cpp index d90b960b7..14c0c7dc4 100644 --- a/zone/embparser.cpp +++ b/zone/embparser.cpp @@ -158,7 +158,8 @@ const char *QuestEventSubroutines[_LargestEventID] = { "EVENT_ALT_CURRENCY_MERCHANT_BUY", "EVENT_ALT_CURRENCY_MERCHANT_SELL", "EVENT_MERCHANT_BUY", - "EVENT_MERCHANT_SELL" + "EVENT_MERCHANT_SELL", + "EVENT_INSPECT", }; PerlembParser::PerlembParser() : perl(nullptr) @@ -1734,6 +1735,11 @@ void PerlembParser::ExportEventVariables( break; } + case EVENT_INSPECT: { + ExportVar(package_name.c_str(), "target_id", extradata); + break; + } + default: { break; } diff --git a/zone/event_codes.h b/zone/event_codes.h index 012caa9a2..9230f9fa4 100644 --- a/zone/event_codes.h +++ b/zone/event_codes.h @@ -102,6 +102,7 @@ typedef enum { EVENT_ALT_CURRENCY_MERCHANT_SELL, EVENT_MERCHANT_BUY, EVENT_MERCHANT_SELL, + EVENT_INSPECT, _LargestEventID } QuestEventID; diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 09a24e85e..a705f245e 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -4306,7 +4306,8 @@ luabind::scope lua_register_events() { luabind::value("alt_currency_merchant_buy", static_cast(EVENT_ALT_CURRENCY_MERCHANT_BUY)), luabind::value("alt_currency_merchant_sell", static_cast(EVENT_ALT_CURRENCY_MERCHANT_SELL)), luabind::value("merchant_buy", static_cast(EVENT_MERCHANT_BUY)), - luabind::value("merchant_sell", static_cast(EVENT_MERCHANT_SELL)) + luabind::value("merchant_sell", static_cast(EVENT_MERCHANT_SELL)), + luabind::value("inspect", static_cast(EVENT_INSPECT)) ]; } diff --git a/zone/lua_parser.cpp b/zone/lua_parser.cpp index 965eae44f..91aaad096 100644 --- a/zone/lua_parser.cpp +++ b/zone/lua_parser.cpp @@ -145,7 +145,8 @@ const char *LuaEvents[_LargestEventID] = { "event_alt_currency_merchant_buy", "event_alt_currency_merchant_sell", "event_merchant_buy", - "event_merchant_sell" + "event_merchant_sell", + "event_inspect", }; extern Zone *zone; @@ -245,6 +246,7 @@ LuaParser::LuaParser() { PlayerArgumentDispatch[EVENT_ALT_CURRENCY_MERCHANT_SELL] = handle_player_alt_currency_merchant; PlayerArgumentDispatch[EVENT_MERCHANT_BUY] = handle_player_merchant; PlayerArgumentDispatch[EVENT_MERCHANT_SELL] = handle_player_merchant; + PlayerArgumentDispatch[EVENT_INSPECT] = handle_player_inspect; 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 9396d116c..99083fdfe 100644 --- a/zone/lua_parser_events.cpp +++ b/zone/lua_parser_events.cpp @@ -619,6 +619,13 @@ void handle_player_consider_corpse(QuestInterface* parse, lua_State* L, Client* lua_setfield(L, -2, "corpse_entity_id"); } +void handle_player_inspect(QuestInterface* parse, lua_State* L, Client* client, std::string data, uint32 extra_data, std::vector* extra_pointers) { + Lua_Mob l_mob(std::any_cast(extra_pointers->at(0))); + luabind::adl::object l_mob_o = luabind::adl::object(L, l_mob); + l_mob_o.push(L); + lua_setfield(L, -2, "other"); +} + //Item void handle_item_click(QuestInterface *parse, lua_State* L, Client* client, EQ::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, std::vector *extra_pointers) { diff --git a/zone/lua_parser_events.h b/zone/lua_parser_events.h index d70050a20..9814b92b2 100644 --- a/zone/lua_parser_events.h +++ b/zone/lua_parser_events.h @@ -123,6 +123,8 @@ void handle_player_alt_currency_merchant(QuestInterface* parse, lua_State* L, Cl std::vector* extra_pointers); void handle_player_merchant(QuestInterface* parse, lua_State* L, Client* client, std::string data, uint32 extra_data, std::vector* extra_pointers); +void handle_player_inspect(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, + std::vector *extra_pointers); //Item void handle_item_click(QuestInterface *parse, lua_State* L, Client* client, EQ::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,