mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-04-26 16:46:31 +00:00
fix: mission states being incorrect after world load (#1750)
This commit is contained in:
parent
20d5a9b6d8
commit
bc0f3d9163
@ -512,7 +512,7 @@ void MissionComponent::LoadFromXml(const tinyxml2::XMLDocument& doc) {
|
|||||||
|
|
||||||
auto* mission = new Mission(this, missionId);
|
auto* mission = new Mission(this, missionId);
|
||||||
|
|
||||||
mission->LoadFromXml(*doneM);
|
mission->LoadFromXmlDone(*doneM);
|
||||||
|
|
||||||
doneM = doneM->NextSiblingElement();
|
doneM = doneM->NextSiblingElement();
|
||||||
|
|
||||||
@ -527,9 +527,9 @@ void MissionComponent::LoadFromXml(const tinyxml2::XMLDocument& doc) {
|
|||||||
|
|
||||||
currentM->QueryAttribute("id", &missionId);
|
currentM->QueryAttribute("id", &missionId);
|
||||||
|
|
||||||
auto* mission = new Mission(this, missionId);
|
auto* mission = m_Missions.contains(missionId) ? m_Missions[missionId] : new Mission(this, missionId);
|
||||||
|
|
||||||
mission->LoadFromXml(*currentM);
|
mission->LoadFromXmlCur(*currentM);
|
||||||
|
|
||||||
if (currentM->QueryAttribute("o", &missionOrder) == tinyxml2::XML_SUCCESS && mission->IsMission()) {
|
if (currentM->QueryAttribute("o", &missionOrder) == tinyxml2::XML_SUCCESS && mission->IsMission()) {
|
||||||
mission->SetUniqueMissionOrderID(missionOrder);
|
mission->SetUniqueMissionOrderID(missionOrder);
|
||||||
@ -565,20 +565,23 @@ void MissionComponent::UpdateXml(tinyxml2::XMLDocument& doc) {
|
|||||||
auto* mission = pair.second;
|
auto* mission = pair.second;
|
||||||
|
|
||||||
if (mission) {
|
if (mission) {
|
||||||
const auto complete = mission->IsComplete();
|
const auto completions = mission->GetCompletions();
|
||||||
|
|
||||||
auto* m = doc.NewElement("m");
|
auto* m = doc.NewElement("m");
|
||||||
|
|
||||||
if (complete) {
|
if (completions > 0) {
|
||||||
mission->UpdateXml(*m);
|
mission->UpdateXmlDone(*m);
|
||||||
|
|
||||||
done->LinkEndChild(m);
|
done->LinkEndChild(m);
|
||||||
|
|
||||||
continue;
|
if (mission->IsComplete()) continue;
|
||||||
|
|
||||||
|
m = doc.NewElement("m");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mission->IsMission()) m->SetAttribute("o", mission->GetUniqueMissionOrderID());
|
if (mission->IsMission()) m->SetAttribute("o", mission->GetUniqueMissionOrderID());
|
||||||
|
|
||||||
mission->UpdateXml(*m);
|
mission->UpdateXmlCur(*m);
|
||||||
|
|
||||||
cur->LinkEndChild(m);
|
cur->LinkEndChild(m);
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,7 @@ Mission::Mission(MissionComponent* missionComponent, const uint32_t missionId) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mission::LoadFromXml(const tinyxml2::XMLElement& element) {
|
void Mission::LoadFromXmlDone(const tinyxml2::XMLElement& element) {
|
||||||
// Start custom XML
|
// Start custom XML
|
||||||
if (element.Attribute("state") != nullptr) {
|
if (element.Attribute("state") != nullptr) {
|
||||||
m_State = static_cast<eMissionState>(std::stoul(element.Attribute("state")));
|
m_State = static_cast<eMissionState>(std::stoul(element.Attribute("state")));
|
||||||
@ -76,11 +76,15 @@ void Mission::LoadFromXml(const tinyxml2::XMLElement& element) {
|
|||||||
m_Completions = std::stoul(element.Attribute("cct"));
|
m_Completions = std::stoul(element.Attribute("cct"));
|
||||||
|
|
||||||
m_Timestamp = std::stoul(element.Attribute("cts"));
|
m_Timestamp = std::stoul(element.Attribute("cts"));
|
||||||
|
|
||||||
if (IsComplete()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Mission::LoadFromXmlCur(const tinyxml2::XMLElement& element) {
|
||||||
|
// Start custom XML
|
||||||
|
if (element.Attribute("state") != nullptr) {
|
||||||
|
m_State = static_cast<eMissionState>(std::stoul(element.Attribute("state")));
|
||||||
|
}
|
||||||
|
// End custom XML
|
||||||
|
|
||||||
auto* task = element.FirstChildElement();
|
auto* task = element.FirstChildElement();
|
||||||
|
|
||||||
@ -132,7 +136,7 @@ void Mission::LoadFromXml(const tinyxml2::XMLElement& element) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mission::UpdateXml(tinyxml2::XMLElement& element) {
|
void Mission::UpdateXmlDone(tinyxml2::XMLElement& element) {
|
||||||
// Start custom XML
|
// Start custom XML
|
||||||
element.SetAttribute("state", static_cast<unsigned int>(m_State));
|
element.SetAttribute("state", static_cast<unsigned int>(m_State));
|
||||||
// End custom XML
|
// End custom XML
|
||||||
@ -141,15 +145,21 @@ void Mission::UpdateXml(tinyxml2::XMLElement& element) {
|
|||||||
|
|
||||||
element.SetAttribute("id", static_cast<unsigned int>(info.id));
|
element.SetAttribute("id", static_cast<unsigned int>(info.id));
|
||||||
|
|
||||||
if (m_Completions > 0) {
|
element.SetAttribute("cct", static_cast<unsigned int>(m_Completions));
|
||||||
element.SetAttribute("cct", static_cast<unsigned int>(m_Completions));
|
|
||||||
|
|
||||||
element.SetAttribute("cts", static_cast<unsigned int>(m_Timestamp));
|
element.SetAttribute("cts", static_cast<unsigned int>(m_Timestamp));
|
||||||
|
}
|
||||||
|
|
||||||
if (IsComplete()) {
|
void Mission::UpdateXmlCur(tinyxml2::XMLElement& element) {
|
||||||
return;
|
// Start custom XML
|
||||||
}
|
element.SetAttribute("state", static_cast<unsigned int>(m_State));
|
||||||
}
|
// End custom XML
|
||||||
|
|
||||||
|
element.DeleteChildren();
|
||||||
|
|
||||||
|
element.SetAttribute("id", static_cast<unsigned int>(info.id));
|
||||||
|
|
||||||
|
if (IsComplete()) return;
|
||||||
|
|
||||||
for (auto* task : m_Tasks) {
|
for (auto* task : m_Tasks) {
|
||||||
if (task->GetType() == eMissionTaskType::COLLECTION ||
|
if (task->GetType() == eMissionTaskType::COLLECTION ||
|
||||||
|
@ -28,8 +28,13 @@ public:
|
|||||||
Mission(MissionComponent* missionComponent, uint32_t missionId);
|
Mission(MissionComponent* missionComponent, uint32_t missionId);
|
||||||
~Mission();
|
~Mission();
|
||||||
|
|
||||||
void LoadFromXml(const tinyxml2::XMLElement& element);
|
// XML functions to load and save completed mission state to xml
|
||||||
void UpdateXml(tinyxml2::XMLElement& element);
|
void LoadFromXmlDone(const tinyxml2::XMLElement& element);
|
||||||
|
void UpdateXmlDone(tinyxml2::XMLElement& element);
|
||||||
|
|
||||||
|
// XML functions to load and save current mission state and task data to xml
|
||||||
|
void LoadFromXmlCur(const tinyxml2::XMLElement& element);
|
||||||
|
void UpdateXmlCur(tinyxml2::XMLElement& element);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the ID of this mission
|
* Returns the ID of this mission
|
||||||
|
Loading…
x
Reference in New Issue
Block a user