diff --git a/L2BotDll/Versions/Interlude/Factories/ItemFactory.h b/L2BotDll/Versions/Interlude/Factories/ItemFactory.h index a1806c2..c4dd1f5 100644 --- a/L2BotDll/Versions/Interlude/Factories/ItemFactory.h +++ b/L2BotDll/Versions/Interlude/Factories/ItemFactory.h @@ -12,7 +12,6 @@ #include "Domain/Entities/ShieldItem.h" #include "Domain/DTO/ItemData.h" #include "../Helpers/EnchantHelper.h" -#include "Domain/Exceptions.h" using namespace L2Bot::Domain; @@ -23,13 +22,13 @@ namespace Interlude private: struct BaseData { - uint32_t objectId; - uint32_t itemId; - int32_t mana; - std::wstring name; - std::wstring iconName; - std::wstring description; - uint16_t weight; + uint32_t objectId = 0; + uint32_t itemId = 0; + int32_t mana = 0; + std::wstring name = L""; + std::wstring iconName = L""; + std::wstring description = L""; + uint16_t weight = 0; }; struct EtcData : public BaseData @@ -94,7 +93,7 @@ namespace Interlude //FIXME during first start data may be undefined const auto data = GetItemData(itemInfo.itemId); if (!data) { - throw RuntimeException(std::format(L"cannot load ItemData for item {}", itemInfo.itemId)); + return nullptr; } switch (data->dataType) @@ -113,7 +112,7 @@ namespace Interlude //FIXME during first start data may be undefined const auto data = GetItemData(itemInfo.itemId); if (!data) { - throw RuntimeException(std::format(L"cannot load ItemData for item {}", itemInfo.itemId)); + return; } switch (data->dataType) @@ -318,7 +317,7 @@ namespace Interlude { const auto data = GetItemData(itemInfo.itemId); if (!data) { - throw RuntimeException(std::format(L"cannot load ItemData for item {}", itemInfo.itemId)); + return BaseData(); } const auto nameEntry = m_FName.GetEntry(data->nameIndex); const auto iconEntry = m_FName.GetEntry(data->iconNameIndex); diff --git a/L2BotDll/Versions/Interlude/Factories/SkillFactory.h b/L2BotDll/Versions/Interlude/Factories/SkillFactory.h index c60069c..878badc 100644 --- a/L2BotDll/Versions/Interlude/Factories/SkillFactory.h +++ b/L2BotDll/Versions/Interlude/Factories/SkillFactory.h @@ -7,7 +7,6 @@ #include "../GameStructs/FName.h" #include "../../../Common/Common.h" #include "Domain/Entities/Skill.h" -#include "Domain/Exceptions.h" using namespace L2Bot::Domain; @@ -18,14 +17,14 @@ namespace Interlude private: struct Data { - uint32_t skillId; - uint8_t level; - bool isActive; - uint8_t cost; - int16_t range; - std::wstring name; - std::wstring description; - std::wstring iconName; + uint32_t skillId = 0; + uint8_t level = 0; + bool isActive = false; + uint8_t cost = 0; + int16_t range = 0; + std::wstring name = L""; + std::wstring description = L""; + std::wstring iconName = L""; }; public: @@ -42,6 +41,10 @@ namespace Interlude { const auto& data = GetData(skillId, level, isActive); + if (data.skillId == 0) { + return nullptr; + } + return std::make_shared( data.skillId, data.level, @@ -51,13 +54,17 @@ namespace Interlude data.name, data.description, data.iconName - ); + ); } void Update(std::shared_ptr& skill, const uint32_t skillId, const uint32_t level, const uint32_t isActive) const { const auto& data = GetData(skillId, level, isActive); + if (data.skillId == 0) { + return; + } + skill->Update( data.level, data.isActive, @@ -74,7 +81,7 @@ namespace Interlude { const auto data = m_L2GameData.GetMSData(skillId, level); if (!data) { - throw RuntimeException(std::format(L"cannot load MSData for skill {}", skillId)); + return Data(); } const auto iconEntry = m_FName.GetEntry(data->iconNameIndex); diff --git a/L2BotDll/Versions/Interlude/Repositories/ItemRepository.h b/L2BotDll/Versions/Interlude/Repositories/ItemRepository.h index a4e55d7..8dbe328 100644 --- a/L2BotDll/Versions/Interlude/Repositories/ItemRepository.h +++ b/L2BotDll/Versions/Interlude/Repositories/ItemRepository.h @@ -121,7 +121,7 @@ namespace Interlude if (m_Items.find(data.objectId) == m_Items.end()) { - auto item = m_Factory.Create(data); + const auto item = m_Factory.Create(data); if (item) { m_Items[data.objectId] = item; } @@ -197,6 +197,7 @@ namespace Interlude Services::ServiceLocator::GetInstance().GetEventDispatcher()->Subscribe(Events::OnEndItemListEvent::name, [this](const Events::Event& evt) { OnEndItemList(evt); }); + m_NetworkHandler.RequestItemList(); } private: diff --git a/L2BotDll/Versions/Interlude/Repositories/SkillRepository.h b/L2BotDll/Versions/Interlude/Repositories/SkillRepository.h index 8fc79d0..2f3c7be 100644 --- a/L2BotDll/Versions/Interlude/Repositories/SkillRepository.h +++ b/L2BotDll/Versions/Interlude/Repositories/SkillRepository.h @@ -120,11 +120,14 @@ namespace Interlude if (m_Skills.find(skillId) == m_Skills.end()) { - m_Skills[skillId] = m_Factory.Create( + const auto newSkill = m_Factory.Create( skillInfo[2], skillInfo[1], skillInfo[0] ); + if (newSkill) { + m_Skills[skillId] = newSkill; + } } else {