mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-11-22 21:47:24 +00:00
move logic to Item
This commit is contained in:
parent
787237c930
commit
693a2fef35
@ -38,38 +38,6 @@
|
|||||||
#include "CDObjectSkillsTable.h"
|
#include "CDObjectSkillsTable.h"
|
||||||
#include "CDSkillBehaviorTable.h"
|
#include "CDSkillBehaviorTable.h"
|
||||||
|
|
||||||
namespace {
|
|
||||||
const std::map<std::string, std::string> ExtraSettingSaveAbbreviations = {
|
|
||||||
{ "assemblyPartLOTs", "ma" },
|
|
||||||
{ "blueprintID", "b" },
|
|
||||||
{ "userModelID", "ui" },
|
|
||||||
{ "userModelName", "un" },
|
|
||||||
{ "userModelDesc", "ud" },
|
|
||||||
{ "userModelHasBhvr", "ub" },
|
|
||||||
{ "userModelBehaviors", "ubh" },
|
|
||||||
{ "userModelBehaviorSourceID", "ubs" },
|
|
||||||
{ "userModelPhysicsType", "up" },
|
|
||||||
{ "userModelMod", "um" },
|
|
||||||
{ "userModelOpt", "uo" },
|
|
||||||
{ "reforgedLOT", "rl" },
|
|
||||||
};
|
|
||||||
|
|
||||||
const std::map<std::string, std::string> ExtraSettingLoadAbbreviations = {
|
|
||||||
{ "ma", "assemblyPartLOTs" },
|
|
||||||
{ "b", "blueprintID" },
|
|
||||||
{ "ui", "userModelID" },
|
|
||||||
{ "un", "userModelName" },
|
|
||||||
{ "ud", "userModelDesc" },
|
|
||||||
{ "ub", "userModelHasBhvr" },
|
|
||||||
{ "ubh", "userModelBehaviors" },
|
|
||||||
{ "ubs", "userModelBehaviorSourceID" },
|
|
||||||
{ "up", "userModelPhysicsType" },
|
|
||||||
{ "um", "userModelMod" },
|
|
||||||
{ "uo", "userModelOpt" },
|
|
||||||
{ "rl", "reforgedLOT" },
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
InventoryComponent::InventoryComponent(Entity* parent) : Component(parent) {
|
InventoryComponent::InventoryComponent(Entity* parent) : Component(parent) {
|
||||||
this->m_Dirty = true;
|
this->m_Dirty = true;
|
||||||
this->m_Equipped = {};
|
this->m_Equipped = {};
|
||||||
@ -592,7 +560,7 @@ void InventoryComponent::LoadXml(const tinyxml2::XMLDocument& document) {
|
|||||||
|
|
||||||
auto* item = new Item(id, lot, inventory, slot, count, bound, {}, parent, subKey);
|
auto* item = new Item(id, lot, inventory, slot, count, bound, {}, parent, subKey);
|
||||||
|
|
||||||
LoadItemConfigXml(*itemElement, item);
|
item->LoadConfigXml(*itemElement);
|
||||||
|
|
||||||
if (equipped) {
|
if (equipped) {
|
||||||
const auto info = Inventory::FindItemComponent(lot);
|
const auto info = Inventory::FindItemComponent(lot);
|
||||||
@ -698,7 +666,7 @@ void InventoryComponent::UpdateXml(tinyxml2::XMLDocument& document) {
|
|||||||
itemElement->SetAttribute("parent", item->GetParent());
|
itemElement->SetAttribute("parent", item->GetParent());
|
||||||
// End custom xml
|
// End custom xml
|
||||||
|
|
||||||
SaveItemConfigXml(*itemElement, item);
|
item->SaveConfigXml(*itemElement);
|
||||||
|
|
||||||
bagElement->LinkEndChild(itemElement);
|
bagElement->LinkEndChild(itemElement);
|
||||||
}
|
}
|
||||||
@ -1635,35 +1603,3 @@ bool InventoryComponent::SetSkill(BehaviorSlot slot, uint32_t skillId) {
|
|||||||
m_Skills.insert_or_assign(slot, skillId);
|
m_Skills.insert_or_assign(slot, skillId);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InventoryComponent::SaveItemConfigXml(tinyxml2::XMLElement& i, const Item* const item) const {
|
|
||||||
tinyxml2::XMLElement* x = nullptr;
|
|
||||||
|
|
||||||
for (const auto* config : item->GetConfig()) {
|
|
||||||
const auto& key = GeneralUtils::UTF16ToWTF8(config->GetKey());
|
|
||||||
const auto saveKey = ExtraSettingSaveAbbreviations.find(key);
|
|
||||||
if (saveKey == ExtraSettingSaveAbbreviations.end()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!x) {
|
|
||||||
x = i.InsertNewChildElement("x");
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto dataToSave = config->GetString(false);
|
|
||||||
x->SetAttribute(saveKey->second.c_str(), dataToSave.c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void InventoryComponent::LoadItemConfigXml(const tinyxml2::XMLElement& i, Item* const item) {
|
|
||||||
const auto* x = i.FirstChildElement("x");
|
|
||||||
if (!x) return;
|
|
||||||
|
|
||||||
for (const auto& pair : ExtraSettingLoadAbbreviations) {
|
|
||||||
const auto* data = x->Attribute(pair.first.c_str());
|
|
||||||
if (!data) continue;
|
|
||||||
|
|
||||||
const auto value = pair.second + "=" + data;
|
|
||||||
item->GetConfig().push_back(LDFBaseData::DataFromString(value));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -477,10 +477,6 @@ private:
|
|||||||
* @param document the xml doc to load from
|
* @param document the xml doc to load from
|
||||||
*/
|
*/
|
||||||
void UpdatePetXml(tinyxml2::XMLDocument& document);
|
void UpdatePetXml(tinyxml2::XMLDocument& document);
|
||||||
|
|
||||||
void SaveItemConfigXml(tinyxml2::XMLElement& i, const Item* const item) const;
|
|
||||||
|
|
||||||
void LoadItemConfigXml(const tinyxml2::XMLElement& i, Item* const item);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -27,6 +27,38 @@
|
|||||||
#include "CDComponentsRegistryTable.h"
|
#include "CDComponentsRegistryTable.h"
|
||||||
#include "CDPackageComponentTable.h"
|
#include "CDPackageComponentTable.h"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
const std::map<std::string, std::string> ExtraSettingSaveAbbreviations = {
|
||||||
|
{ "assemblyPartLOTs", "ma" },
|
||||||
|
{ "blueprintID", "b" },
|
||||||
|
{ "userModelID", "ui" },
|
||||||
|
{ "userModelName", "un" },
|
||||||
|
{ "userModelDesc", "ud" },
|
||||||
|
{ "userModelHasBhvr", "ub" },
|
||||||
|
{ "userModelBehaviors", "ubh" },
|
||||||
|
{ "userModelBehaviorSourceID", "ubs" },
|
||||||
|
{ "userModelPhysicsType", "up" },
|
||||||
|
{ "userModelMod", "um" },
|
||||||
|
{ "userModelOpt", "uo" },
|
||||||
|
{ "reforgedLOT", "rl" },
|
||||||
|
};
|
||||||
|
|
||||||
|
const std::map<std::string, std::string> ExtraSettingLoadAbbreviations = {
|
||||||
|
{ "ma", "assemblyPartLOTs" },
|
||||||
|
{ "b", "blueprintID" },
|
||||||
|
{ "ui", "userModelID" },
|
||||||
|
{ "un", "userModelName" },
|
||||||
|
{ "ud", "userModelDesc" },
|
||||||
|
{ "ub", "userModelHasBhvr" },
|
||||||
|
{ "ubh", "userModelBehaviors" },
|
||||||
|
{ "ubs", "userModelBehaviorSourceID" },
|
||||||
|
{ "up", "userModelPhysicsType" },
|
||||||
|
{ "um", "userModelMod" },
|
||||||
|
{ "uo", "userModelOpt" },
|
||||||
|
{ "rl", "reforgedLOT" },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
Item::Item(const LWOOBJID id, const LOT lot, Inventory* inventory, const uint32_t slot, const uint32_t count, const bool bound, const std::vector<LDFBaseData*>& config, const LWOOBJID parent, LWOOBJID subKey, eLootSourceType lootSourceType) {
|
Item::Item(const LWOOBJID id, const LOT lot, Inventory* inventory, const uint32_t slot, const uint32_t count, const bool bound, const std::vector<LDFBaseData*>& config, const LWOOBJID parent, LWOOBJID subKey, eLootSourceType lootSourceType) {
|
||||||
if (!Inventory::IsValidItem(lot)) {
|
if (!Inventory::IsValidItem(lot)) {
|
||||||
return;
|
return;
|
||||||
@ -255,7 +287,7 @@ bool Item::Consume() {
|
|||||||
|
|
||||||
auto skills = skillsTable->Query([this](const CDObjectSkills entry) {
|
auto skills = skillsTable->Query([this](const CDObjectSkills entry) {
|
||||||
return entry.objectTemplate == static_cast<uint32_t>(lot);
|
return entry.objectTemplate == static_cast<uint32_t>(lot);
|
||||||
});
|
});
|
||||||
|
|
||||||
auto success = false;
|
auto success = false;
|
||||||
|
|
||||||
@ -519,3 +551,35 @@ Item::~Item() {
|
|||||||
|
|
||||||
config.clear();
|
config.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Item::SaveConfigXml(tinyxml2::XMLElement& i) const {
|
||||||
|
tinyxml2::XMLElement* x = nullptr;
|
||||||
|
|
||||||
|
for (const auto* config : this->config) {
|
||||||
|
const auto& key = GeneralUtils::UTF16ToWTF8(config->GetKey());
|
||||||
|
const auto saveKey = ExtraSettingSaveAbbreviations.find(key);
|
||||||
|
if (saveKey == ExtraSettingSaveAbbreviations.end()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!x) {
|
||||||
|
x = i.InsertNewChildElement("x");
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto dataToSave = config->GetString(false);
|
||||||
|
x->SetAttribute(saveKey->second.c_str(), dataToSave.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Item::LoadConfigXml(const tinyxml2::XMLElement& i) {
|
||||||
|
const auto* x = i.FirstChildElement("x");
|
||||||
|
if (!x) return;
|
||||||
|
|
||||||
|
for (const auto& pair : ExtraSettingLoadAbbreviations) {
|
||||||
|
const auto* data = x->Attribute(pair.first.c_str());
|
||||||
|
if (!data) continue;
|
||||||
|
|
||||||
|
const auto value = pair.second + "=" + data;
|
||||||
|
config.push_back(LDFBaseData::DataFromString(value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -9,6 +9,10 @@
|
|||||||
#include "eInventoryType.h"
|
#include "eInventoryType.h"
|
||||||
#include "eLootSourceType.h"
|
#include "eLootSourceType.h"
|
||||||
|
|
||||||
|
namespace tinyxml2 {
|
||||||
|
class XMLElement;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An item that can be stored in an inventory and optionally consumed or equipped
|
* An item that can be stored in an inventory and optionally consumed or equipped
|
||||||
* TODO: ideally this should be a component
|
* TODO: ideally this should be a component
|
||||||
@ -220,6 +224,10 @@ public:
|
|||||||
*/
|
*/
|
||||||
void RemoveFromInventory();
|
void RemoveFromInventory();
|
||||||
|
|
||||||
|
void SaveConfigXml(tinyxml2::XMLElement& i) const;
|
||||||
|
|
||||||
|
void LoadConfigXml(const tinyxml2::XMLElement& i);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* The object ID of this item
|
* The object ID of this item
|
||||||
|
Loading…
Reference in New Issue
Block a user