From ba53b4144eefd99d4c3385cd64da314177fd4b1a Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" <277429+mackal@users.noreply.github.com> Date: Sat, 3 Sep 2022 12:07:46 -0400 Subject: [PATCH] [Cleanup] Rework Lua QuestReward to not use try/catch blocks (#2417) Quest system will catch any errors and result it in being reported where these weren't --- zone/lua_client.cpp | 112 +++++++++++--------------------------------- 1 file changed, 27 insertions(+), 85 deletions(-) diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index a89d41cab..af73b7d2c 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -1683,110 +1683,52 @@ void Lua_Client::QuestReward(Lua_Mob target, luabind::adl::object reward) { QuestReward_Struct quest_reward; quest_reward.mob_id = 0; quest_reward.target_id = self->GetID(); - quest_reward.copper = 0; - quest_reward.silver = 0; - quest_reward.gold = 0; - quest_reward.platinum = 0; - quest_reward.exp_reward = 0; + quest_reward.copper = luabind::type(reward["copper"]) != LUA_TNIL ? luabind::object_cast(reward["copper"]) : 0; + quest_reward.silver = luabind::type(reward["silver"]) != LUA_TNIL ? luabind::object_cast(reward["silver"]) : 0; + quest_reward.gold = luabind::type(reward["gold"]) != LUA_TNIL ? luabind::object_cast(reward["gold"]) : 0; + quest_reward.platinum = luabind::type(reward["platinum"]) != LUA_TNIL ? luabind::object_cast(reward["platinum"]) : 0; + quest_reward.exp_reward = luabind::type(reward["exp"]) != LUA_TNIL ? luabind::object_cast(reward["exp"]) : 0; quest_reward.faction = 0; quest_reward.faction_mod = 0; bool faction = false; std::fill(std::begin(quest_reward.item_id), std::end(quest_reward.item_id), -1); - auto cur = reward["copper"]; - if (luabind::type(cur) != LUA_TNIL) { - try { - quest_reward.copper = luabind::object_cast(cur); - } catch (luabind::cast_failed &) { - } - } - - cur = reward["silver"]; - if (luabind::type(cur) != LUA_TNIL) { - try { - quest_reward.silver = luabind::object_cast(cur); - } catch (luabind::cast_failed &) { - } - } - - cur = reward["gold"]; - if (luabind::type(cur) != LUA_TNIL) { - try { - quest_reward.gold = luabind::object_cast(cur); - } catch (luabind::cast_failed &) { - } - } - - cur = reward["platinum"]; - if (luabind::type(cur) != LUA_TNIL) { - try { - quest_reward.platinum = luabind::object_cast(cur); - } catch (luabind::cast_failed &) { - } - } - - cur = reward["itemid"]; - if (luabind::type(cur) != LUA_TNIL) { - try { - quest_reward.item_id[0] = luabind::object_cast(cur); - } catch (luabind::cast_failed &) { - } + auto item_id = reward["itemid"]; + if (luabind::type(item_id) != LUA_TNIL) { + quest_reward.item_id[0] = luabind::object_cast(item_id); } // if you define both an itemid and items table, the itemid is thrown away // should we error? - cur = reward["items"]; - if (luabind::type(cur) == LUA_TTABLE) { - try { - // assume they defined a compatible table - for (int i = 1; i <= QUESTREWARD_COUNT; ++i) { - auto item = cur[i]; - int cur_value = -1; - if (luabind::type(item) != LUA_TNIL) { - try { - cur_value = luabind::object_cast(item); - } catch (luabind::cast_failed &) { - } - } else { - break; - } - quest_reward.item_id[i - 1] = cur_value; + auto items = reward["items"]; + if (luabind::type(items) == LUA_TTABLE) { + // assume they defined a compatible table + for (int i = 1; i <= QUESTREWARD_COUNT; ++i) { + auto item = items[i]; + int cur_value = -1; + if (luabind::type(item) != LUA_TNIL) { + cur_value = luabind::object_cast(item); + } else { + break; } - } catch (luabind::cast_failed &) { + quest_reward.item_id[i - 1] = cur_value; } } - cur = reward["exp"]; - if (luabind::type(cur) != LUA_TNIL) { - try { - quest_reward.exp_reward = luabind::object_cast(cur); - } catch (luabind::cast_failed &) { - } - } - - cur = reward["faction"]; - if (luabind::type(cur) != LUA_TNIL) { + auto lua_faction = reward["faction"]; + if (luabind::type(lua_faction) != LUA_TNIL) { // if it's a table it will be {faction, faction_mod} - if (luabind::type(cur) == LUA_TTABLE) { - auto item = cur[1]; + if (luabind::type(lua_faction) == LUA_TTABLE) { + auto item = lua_faction[1]; if (luabind::type(item) != LUA_TNIL) { - try { - quest_reward.faction = luabind::object_cast(item); - } catch (luabind::cast_failed &) { - } + quest_reward.faction = luabind::object_cast(item); } - item = cur[2]; + item = lua_faction[2]; if (luabind::type(item) != LUA_TNIL) { - try { - quest_reward.faction_mod = luabind::object_cast(item); - } catch (luabind::cast_failed &) { - } + quest_reward.faction_mod = luabind::object_cast(item); } } else { - try { - faction = luabind::object_cast(cur); - } catch (luabind::cast_failed &) { - } + faction = luabind::object_cast(lua_faction); } }