From 97c93ca55accb477b18e2bd03b20419dac4afc06 Mon Sep 17 00:00:00 2001 From: Valorith Date: Fri, 10 Feb 2023 19:54:29 -0500 Subject: [PATCH] Add XP Events --- zone/embparser.cpp | 14 +++++++++++++- zone/event_codes.h | 2 ++ zone/exp.cpp | 11 +++++++++++ zone/lua_general.cpp | 2 ++ zone/lua_parser.cpp | 4 ++++ zone/lua_parser_events.cpp | 24 ++++++++++++++++++++++++ zone/lua_parser_events.h | 18 ++++++++++++++++++ 7 files changed, 74 insertions(+), 1 deletion(-) diff --git a/zone/embparser.cpp b/zone/embparser.cpp index 3818f151a..033a97e2b 100644 --- a/zone/embparser.cpp +++ b/zone/embparser.cpp @@ -161,6 +161,8 @@ const char *QuestEventSubroutines[_LargestEventID] = { "EVENT_TASK_BEFORE_UPDATE", "EVENT_AA_BUY", "EVENT_AA_GAIN", + "EVENT_AAXP_GAIN", + "EVENT_XP_GAIN", "EVENT_PAYLOAD", "EVENT_LEVEL_DOWN", "EVENT_GM_COMMAND", @@ -2080,10 +2082,20 @@ void PerlembParser::ExportEventVariables( } case EVENT_AA_GAIN: { - ExportVar(package_name.c_str(), "aa_gained", data); + ExportVar(package_name.c_str(), "aa_gained", extradata); break; } + case EVENT_AAXP_GAIN: { + ExportVar(package_name.c_str(), "aaxp_value", extradata); + break; + } + + case EVENT_XP_GAIN: { + ExportVar(package_name.c_str(), "xp_value", extradata); + break; + } + case EVENT_INSPECT: { ExportVar(package_name.c_str(), "target_id", extradata); if (extra_pointers && extra_pointers->size() == 1) { diff --git a/zone/event_codes.h b/zone/event_codes.h index d0cf7e6aa..db1fbbfd8 100644 --- a/zone/event_codes.h +++ b/zone/event_codes.h @@ -106,6 +106,8 @@ typedef enum { EVENT_TASK_BEFORE_UPDATE, EVENT_AA_BUY, EVENT_AA_GAIN, + EVENT_AAXP_GAIN, + EVENT_XP_GAIN, EVENT_PAYLOAD, EVENT_LEVEL_DOWN, EVENT_GM_COMMAND, diff --git a/zone/exp.cpp b/zone/exp.cpp index 41bb5cfc9..6d9d3da6e 100644 --- a/zone/exp.cpp +++ b/zone/exp.cpp @@ -804,6 +804,17 @@ void Client::SetEXP(uint64 set_exp, uint64 set_aaxp, bool isrezzexp) { } } + if (m_pp.exp != set_exp) { + const auto xp_value = set_exp - m_pp.exp; + const auto export_string = fmt::format("{}",xp_value); + parse->EventPlayer(EVENT_XP_GAIN, this,export_string, xp_value); + } + if (m_pp.expAA != set_aaxp) { + const auto aaxp_value = set_aaxp - m_pp.expAA; + const auto export_string = fmt::format("{}",aaxp_value); + parse->EventPlayer(EVENT_AAXP_GAIN, this, export_string, aaxp_value); + } + //set the client's EXP and AAEXP m_pp.exp = set_exp; m_pp.expAA = set_aaxp; diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index d12eb0be5..0614729a3 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -4737,6 +4737,8 @@ luabind::scope lua_register_events() { luabind::value("task_before_update", static_cast(EVENT_TASK_BEFORE_UPDATE)), luabind::value("aa_buy", static_cast(EVENT_AA_BUY)), luabind::value("aa_gain", static_cast(EVENT_AA_GAIN)), + luabind::value("aaxp_gain", static_cast(EVENT_AAXP_GAIN)), + luabind::value("xp_gain", static_cast(EVENT_XP_GAIN)), luabind::value("payload", static_cast(EVENT_PAYLOAD)), 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 ebf95f424..189178d33 100644 --- a/zone/lua_parser.cpp +++ b/zone/lua_parser.cpp @@ -148,6 +148,8 @@ const char *LuaEvents[_LargestEventID] = { "event_task_before_update", "event_aa_buy", "event_aa_gain", + "event_aaxp_gain", + "event_xp_gain", "event_payload", "event_level_down", "event_gm_command", @@ -275,6 +277,8 @@ LuaParser::LuaParser() { PlayerArgumentDispatch[EVENT_INSPECT] = handle_player_inspect; PlayerArgumentDispatch[EVENT_AA_BUY] = handle_player_aa_buy; PlayerArgumentDispatch[EVENT_AA_GAIN] = handle_player_aa_gain; + PlayerArgumentDispatch[EVENT_AAXP_GAIN] = handle_player_aaxp_gain; + PlayerArgumentDispatch[EVENT_XP_GAIN] = handle_player_xp_gain; PlayerArgumentDispatch[EVENT_PAYLOAD] = handle_player_payload; PlayerArgumentDispatch[EVENT_LEVEL_UP] = handle_player_level_up; PlayerArgumentDispatch[EVENT_LEVEL_DOWN] = handle_player_level_down; diff --git a/zone/lua_parser_events.cpp b/zone/lua_parser_events.cpp index ad7a12c5f..9c6ca23c7 100644 --- a/zone/lua_parser_events.cpp +++ b/zone/lua_parser_events.cpp @@ -1181,6 +1181,30 @@ void handle_player_aa_gain( lua_setfield(L, -2, "aa_gained"); } +void handle_player_aaxp_gain( + QuestInterface *parse, + lua_State* L, + Client* client, + std::string data, + uint32 extra_data, + std::vector *extra_pointers +) { + lua_pushinteger(L, Strings::ToInt(data)); + lua_setfield(L, -2, "aaxp_value"); +} + +void handle_player_xp_gain( + QuestInterface *parse, + lua_State* L, + Client* client, + std::string data, + uint32 extra_data, + std::vector *extra_pointers +) { + lua_pushinteger(L, Strings::ToInt(data)); + lua_setfield(L, -2, "xp_value"); +} + void handle_player_level_up( QuestInterface *parse, lua_State* L, diff --git a/zone/lua_parser_events.h b/zone/lua_parser_events.h index b8399548b..7f2c89405 100644 --- a/zone/lua_parser_events.h +++ b/zone/lua_parser_events.h @@ -608,6 +608,24 @@ void handle_player_aa_gain( std::vector *extra_pointers ); +void handle_player_aaxp_gain( + QuestInterface *parse, + lua_State* L, + Client* client, + std::string data, + uint32 extra_data, + std::vector *extra_pointers +); + +void handle_player_xp_gain( + QuestInterface *parse, + lua_State* L, + Client* client, + std::string data, + uint32 extra_data, + std::vector *extra_pointers +); + void handle_player_payload( QuestInterface *parse, lua_State* L,