From 2da7ddad5777d23c6b150f2f50a776082dab84d1 Mon Sep 17 00:00:00 2001 From: Alex King <89047260+Kinglykrab@users.noreply.github.com> Date: Mon, 31 Jul 2023 20:59:56 -0400 Subject: [PATCH] [Bug Fix] Fix NPC Cast Events not parsing properly. (#3518) * [Bug Fix] Fix NPC Cast Events not parsing properly. # Notes - We were not using separated values. * Update lua_parser_events.cpp --- zone/lua_parser_events.cpp | 94 +++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 51 deletions(-) diff --git a/zone/lua_parser_events.cpp b/zone/lua_parser_events.cpp index 089201512..ca351b4a6 100644 --- a/zone/lua_parser_events.cpp +++ b/zone/lua_parser_events.cpp @@ -231,7 +231,7 @@ void handle_npc_hate( l_mob_o.push(L); lua_setfield(L, -2, "other"); - lua_pushboolean(L, Strings::ToInt(data) == 0 ? false : true); + lua_pushboolean(L, Strings::ToBool(data)); lua_setfield(L, -2, "joined"); } @@ -301,8 +301,8 @@ void handle_npc_death( lua_pushinteger(L, Strings::ToInt(sep.arg[1])); lua_setfield(L, -2, "damage"); - int spell_id = Strings::ToInt(sep.arg[2]); - if(IsValidSpell(spell_id)) { + const uint32 spell_id = Strings::ToUnsignedInt(sep.arg[2]); + if (IsValidSpell(spell_id)) { Lua_Spell l_spell(&spells[spell_id]); luabind::adl::object l_spell_o = luabind::adl::object(L, l_spell); l_spell_o.push(L); @@ -317,16 +317,14 @@ void handle_npc_death( lua_pushinteger(L, Strings::ToInt(sep.arg[3])); lua_setfield(L, -2, "skill_id"); - if (extra_pointers && extra_pointers->size() >= 1) - { + if (extra_pointers && extra_pointers->size() >= 1) { Lua_Corpse l_corpse(std::any_cast(extra_pointers->at(0))); luabind::adl::object l_corpse_o = luabind::adl::object(L, l_corpse); l_corpse_o.push(L); lua_setfield(L, -2, "corpse"); } - if (extra_pointers && extra_pointers->size() >= 2) - { + if (extra_pointers && extra_pointers->size() >= 2) { Lua_NPC l_npc(std::any_cast(extra_pointers->at(1))); luabind::adl::object l_npc_o = luabind::adl::object(L, l_npc); l_npc_o.push(L); @@ -343,18 +341,19 @@ void handle_npc_cast( uint32 extra_data, std::vector *extra_pointers ) { - int spell_id = Strings::ToInt(data); - if(IsValidSpell(spell_id)) { - Lua_Spell l_spell(&spells[spell_id]); - luabind::adl::object l_spell_o = luabind::adl::object(L, l_spell); - l_spell_o.push(L); - lua_setfield(L, -2, "spell"); - } else { - Lua_Spell l_spell(nullptr); - luabind::adl::object l_spell_o = luabind::adl::object(L, l_spell); - l_spell_o.push(L); - lua_setfield(L, -2, "spell"); - } + Seperator sep(data.c_str()); + + const uint32 spell_id = Strings::ToUnsignedInt(sep.arg[0]); + Lua_Spell l_spell(IsValidSpell(spell_id) ? &spells[spell_id] : nullptr); + luabind::adl::object l_spell_o = luabind::adl::object(L, l_spell); + l_spell_o.push(L); + lua_setfield(L, -2, "spell"); + + lua_pushinteger(L, Strings::ToUnsignedInt(sep.arg[1])); + lua_setfield(L, -2, "caster_id"); + + lua_pushinteger(L, Strings::ToUnsignedInt(sep.arg[2])); + lua_setfield(L, -2, "caster_level"); } void handle_npc_area( @@ -462,16 +461,16 @@ void handle_npc_damage( lua_pushnumber(L, Strings::ToInt(sep.arg[3])); lua_setfield(L, -2, "skill_id"); - lua_pushboolean(L, Strings::ToInt(sep.arg[4]) == 0 ? false : true); + lua_pushboolean(L, Strings::ToBool(sep.arg[4])); lua_setfield(L, -2, "is_damage_shield"); - lua_pushboolean(L, Strings::ToInt(sep.arg[5]) == 0 ? false : true); + lua_pushboolean(L, Strings::ToBool(sep.arg[5])); lua_setfield(L, -2, "is_avoidable"); lua_pushnumber(L, Strings::ToInt(sep.arg[6])); lua_setfield(L, -2, "buff_slot"); - lua_pushboolean(L, Strings::ToInt(sep.arg[7]) == 0 ? false : true); + lua_pushboolean(L, Strings::ToBool(sep.arg[7])); lua_setfield(L, -2, "is_buff_tic"); lua_pushnumber(L, Strings::ToInt(sep.arg[8])); @@ -711,10 +710,10 @@ void handle_player_cast( lua_setfield(L, -2, "spell"); - lua_pushinteger(L, Strings::ToInt(sep.arg[1])); + lua_pushinteger(L, Strings::ToUnsignedInt(sep.arg[1])); lua_setfield(L, -2, "caster_id"); - lua_pushinteger(L, Strings::ToInt(sep.arg[2])); + lua_pushinteger(L, Strings::ToUnsignedInt(sep.arg[2])); lua_setfield(L, -2, "caster_level"); } @@ -933,7 +932,7 @@ void handle_player_respawn( lua_pushinteger(L, Strings::ToInt(data)); lua_setfield(L, -2, "option"); - lua_pushboolean(L, extra_data == 1 ? true : false); + lua_pushboolean(L, Strings::ToBool(std::to_string(extra_data))); lua_setfield(L, -2, "resurrect"); } @@ -950,7 +949,7 @@ void handle_player_packet( l_packet_o.push(L); lua_setfield(L, -2, "packet"); - lua_pushboolean(L, extra_data == 1 ? true : false); + lua_pushboolean(L, Strings::ToBool(std::to_string(extra_data))); lua_setfield(L, -2, "connecting"); } @@ -1270,16 +1269,16 @@ void handle_player_damage( lua_pushnumber(L, Strings::ToInt(sep.arg[3])); lua_setfield(L, -2, "skill_id"); - lua_pushboolean(L, Strings::ToInt(sep.arg[4]) == 0 ? false : true); + lua_pushboolean(L, Strings::ToBool(sep.arg[4])); lua_setfield(L, -2, "is_damage_shield"); - lua_pushboolean(L, Strings::ToInt(sep.arg[5]) == 0 ? false : true); + lua_pushboolean(L, Strings::ToBool(sep.arg[5])); lua_setfield(L, -2, "is_avoidable"); lua_pushnumber(L, Strings::ToInt(sep.arg[6])); lua_setfield(L, -2, "buff_slot"); - lua_pushboolean(L, Strings::ToInt(sep.arg[7]) == 0 ? false : true); + lua_pushboolean(L, Strings::ToBool(sep.arg[7])); lua_setfield(L, -2, "is_buff_tic"); lua_pushnumber(L, Strings::ToInt(sep.arg[8])); @@ -1606,7 +1605,7 @@ void handle_spell_event( Lua_Mob l_mob(mob); luabind::adl::object l_mob_o = luabind::adl::object(L, l_mob); l_mob_o.push(L); - } else if(client) { + } else if (client) { Lua_Mob l_client(client); luabind::adl::object l_client_o = luabind::adl::object(L, l_client); l_client_o.push(L); @@ -1623,13 +1622,13 @@ void handle_spell_event( Seperator sep(data.c_str()); - lua_pushinteger(L, Strings::ToInt(sep.arg[0])); + lua_pushinteger(L, Strings::ToUnsignedInt(sep.arg[0])); lua_setfield(L, -2, "caster_id"); lua_pushinteger(L, Strings::ToInt(sep.arg[1])); lua_setfield(L, -2, "tics_remaining"); - lua_pushinteger(L, Strings::ToInt(sep.arg[2])); + lua_pushinteger(L, Strings::ToUnsignedInt(sep.arg[2])); lua_setfield(L, -2, "caster_level"); lua_pushinteger(L, Strings::ToInt(sep.arg[3])); @@ -1655,7 +1654,7 @@ void handle_translocate_finish( Lua_Mob l_mob(mob); luabind::adl::object l_mob_o = luabind::adl::object(L, l_mob); l_mob_o.push(L); - } else if(client) { + } else if (client) { Lua_Mob l_client(client); luabind::adl::object l_client_o = luabind::adl::object(L, l_client); l_client_o.push(L); @@ -1945,23 +1944,16 @@ void handle_bot_cast( ) { Seperator sep(data.c_str()); - int spell_id = Strings::ToInt(sep.arg[0]); - if (IsValidSpell(spell_id)) { - Lua_Spell l_spell(&spells[spell_id]); - luabind::adl::object l_spell_o = luabind::adl::object(L, l_spell); - l_spell_o.push(L); - } else { - Lua_Spell l_spell(nullptr); - luabind::adl::object l_spell_o = luabind::adl::object(L, l_spell); - l_spell_o.push(L); - } - + const uint32 spell_id = Strings::ToUnsignedInt(sep.arg[0]); + Lua_Spell l_spell(IsValidSpell(spell_id) ? &spells[spell_id] : nullptr); + luabind::adl::object l_spell_o = luabind::adl::object(L, l_spell); + l_spell_o.push(L); lua_setfield(L, -2, "spell"); - lua_pushinteger(L, Strings::ToInt(sep.arg[1])); + lua_pushinteger(L, Strings::ToUnsignedInt(sep.arg[1])); lua_setfield(L, -2, "caster_id"); - lua_pushinteger(L, Strings::ToInt(sep.arg[2])); + lua_pushinteger(L, Strings::ToUnsignedInt(sep.arg[2])); lua_setfield(L, -2, "caster_level"); } @@ -1979,7 +1971,7 @@ void handle_bot_combat( l_mob_o.push(L); lua_setfield(L, -2, "other"); - lua_pushboolean(L, Strings::ToInt(data) == 0 ? false : true); + lua_pushboolean(L, Strings::ToBool(data)); lua_setfield(L, -2, "joined"); } @@ -2003,7 +1995,7 @@ void handle_bot_death( lua_pushinteger(L, Strings::ToInt(sep.arg[1])); lua_setfield(L, -2, "damage"); - int spell_id = Strings::ToInt(sep.arg[2]); + const uint32 spell_id = Strings::ToUnsignedInt(sep.arg[2]); if (IsValidSpell(spell_id)) { Lua_Spell l_spell(&spells[spell_id]); luabind::adl::object l_spell_o = luabind::adl::object(L, l_spell); @@ -2257,16 +2249,16 @@ void handle_bot_damage( lua_pushnumber(L, Strings::ToInt(sep.arg[3])); lua_setfield(L, -2, "skill_id"); - lua_pushboolean(L, Strings::ToInt(sep.arg[4]) == 0 ? false : true); + lua_pushboolean(L, Strings::ToBool(sep.arg[4])); lua_setfield(L, -2, "is_damage_shield"); - lua_pushboolean(L, Strings::ToInt(sep.arg[5]) == 0 ? false : true); + lua_pushboolean(L, Strings::ToBool(sep.arg[5])); lua_setfield(L, -2, "is_avoidable"); lua_pushnumber(L, Strings::ToInt(sep.arg[6])); lua_setfield(L, -2, "buff_slot"); - lua_pushboolean(L, Strings::ToInt(sep.arg[7]) == 0 ? false : true); + lua_pushboolean(L, Strings::ToBool(sep.arg[7])); lua_setfield(L, -2, "is_buff_tic"); lua_pushnumber(L, Strings::ToInt(sep.arg[8]));