[Zone] Zone State Improvements (Continued) (#4768)

* [Zone] Zone State Improvements (Continued)

* Ignore a few events when we resume from suspend

* Add is_zone field

* Update database_update_manifest.cpp

* Update database_update_manifest.cpp

* Update database_update_manifest.cpp

* Update zone_save_state.cpp

* Update zone_save_state.cpp

* Add Zone Variables

* Update methods

* Update zone_save_state.cpp

* Update zone_save_state.cpp

---------

Co-authored-by: Kinglykrab <kinglykrab@gmail.com>
This commit is contained in:
Chris Miles
2025-03-11 01:14:09 -05:00
committed by GitHub
parent 051ce3736f
commit 30c39194a3
10 changed files with 377 additions and 103 deletions
@@ -23,6 +23,7 @@ public:
uint32_t zone_id;
uint32_t instance_id;
int8_t is_corpse;
int8_t is_zone;
int32_t decay_in_seconds;
uint32_t npc_id;
uint32_t spawn2_id;
@@ -61,6 +62,7 @@ public:
"zone_id",
"instance_id",
"is_corpse",
"is_zone",
"decay_in_seconds",
"npc_id",
"spawn2_id",
@@ -95,6 +97,7 @@ public:
"zone_id",
"instance_id",
"is_corpse",
"is_zone",
"decay_in_seconds",
"npc_id",
"spawn2_id",
@@ -163,6 +166,7 @@ public:
e.zone_id = 0;
e.instance_id = 0;
e.is_corpse = 0;
e.is_zone = 0;
e.decay_in_seconds = 0;
e.npc_id = 0;
e.spawn2_id = 0;
@@ -227,30 +231,31 @@ public:
e.zone_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.instance_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.is_corpse = row[3] ? static_cast<int8_t>(atoi(row[3])) : 0;
e.decay_in_seconds = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.npc_id = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.spawn2_id = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.spawngroup_id = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.x = row[8] ? strtof(row[8], nullptr) : 0;
e.y = row[9] ? strtof(row[9], nullptr) : 0;
e.z = row[10] ? strtof(row[10], nullptr) : 0;
e.heading = row[11] ? strtof(row[11], nullptr) : 0;
e.respawn_time = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
e.variance = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.grid = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
e.current_waypoint = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
e.path_when_zone_idle = row[16] ? static_cast<int16_t>(atoi(row[16])) : 0;
e.condition_id = row[17] ? static_cast<uint16_t>(strtoul(row[17], nullptr, 10)) : 0;
e.condition_min_value = row[18] ? static_cast<int16_t>(atoi(row[18])) : 0;
e.enabled = row[19] ? static_cast<int16_t>(atoi(row[19])) : 1;
e.anim = row[20] ? static_cast<uint16_t>(strtoul(row[20], nullptr, 10)) : 0;
e.loot_data = row[21] ? row[21] : "";
e.entity_variables = row[22] ? row[22] : "";
e.buffs = row[23] ? row[23] : "";
e.hp = row[24] ? strtoll(row[24], nullptr, 10) : 0;
e.mana = row[25] ? strtoll(row[25], nullptr, 10) : 0;
e.endurance = row[26] ? strtoll(row[26], nullptr, 10) : 0;
e.created_at = strtoll(row[27] ? row[27] : "-1", nullptr, 10);
e.is_zone = row[4] ? static_cast<int8_t>(atoi(row[4])) : 0;
e.decay_in_seconds = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.npc_id = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.spawn2_id = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.spawngroup_id = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.x = row[9] ? strtof(row[9], nullptr) : 0;
e.y = row[10] ? strtof(row[10], nullptr) : 0;
e.z = row[11] ? strtof(row[11], nullptr) : 0;
e.heading = row[12] ? strtof(row[12], nullptr) : 0;
e.respawn_time = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.variance = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
e.grid = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.current_waypoint = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
e.path_when_zone_idle = row[17] ? static_cast<int16_t>(atoi(row[17])) : 0;
e.condition_id = row[18] ? static_cast<uint16_t>(strtoul(row[18], nullptr, 10)) : 0;
e.condition_min_value = row[19] ? static_cast<int16_t>(atoi(row[19])) : 0;
e.enabled = row[20] ? static_cast<int16_t>(atoi(row[20])) : 1;
e.anim = row[21] ? static_cast<uint16_t>(strtoul(row[21], nullptr, 10)) : 0;
e.loot_data = row[22] ? row[22] : "";
e.entity_variables = row[23] ? row[23] : "";
e.buffs = row[24] ? row[24] : "";
e.hp = row[25] ? strtoll(row[25], nullptr, 10) : 0;
e.mana = row[26] ? strtoll(row[26], nullptr, 10) : 0;
e.endurance = row[27] ? strtoll(row[27], nullptr, 10) : 0;
e.created_at = strtoll(row[28] ? row[28] : "-1", nullptr, 10);
return e;
}
@@ -287,30 +292,31 @@ public:
v.push_back(columns[1] + " = " + std::to_string(e.zone_id));
v.push_back(columns[2] + " = " + std::to_string(e.instance_id));
v.push_back(columns[3] + " = " + std::to_string(e.is_corpse));
v.push_back(columns[4] + " = " + std::to_string(e.decay_in_seconds));
v.push_back(columns[5] + " = " + std::to_string(e.npc_id));
v.push_back(columns[6] + " = " + std::to_string(e.spawn2_id));
v.push_back(columns[7] + " = " + std::to_string(e.spawngroup_id));
v.push_back(columns[8] + " = " + std::to_string(e.x));
v.push_back(columns[9] + " = " + std::to_string(e.y));
v.push_back(columns[10] + " = " + std::to_string(e.z));
v.push_back(columns[11] + " = " + std::to_string(e.heading));
v.push_back(columns[12] + " = " + std::to_string(e.respawn_time));
v.push_back(columns[13] + " = " + std::to_string(e.variance));
v.push_back(columns[14] + " = " + std::to_string(e.grid));
v.push_back(columns[15] + " = " + std::to_string(e.current_waypoint));
v.push_back(columns[16] + " = " + std::to_string(e.path_when_zone_idle));
v.push_back(columns[17] + " = " + std::to_string(e.condition_id));
v.push_back(columns[18] + " = " + std::to_string(e.condition_min_value));
v.push_back(columns[19] + " = " + std::to_string(e.enabled));
v.push_back(columns[20] + " = " + std::to_string(e.anim));
v.push_back(columns[21] + " = '" + Strings::Escape(e.loot_data) + "'");
v.push_back(columns[22] + " = '" + Strings::Escape(e.entity_variables) + "'");
v.push_back(columns[23] + " = '" + Strings::Escape(e.buffs) + "'");
v.push_back(columns[24] + " = " + std::to_string(e.hp));
v.push_back(columns[25] + " = " + std::to_string(e.mana));
v.push_back(columns[26] + " = " + std::to_string(e.endurance));
v.push_back(columns[27] + " = FROM_UNIXTIME(" + (e.created_at > 0 ? std::to_string(e.created_at) : "null") + ")");
v.push_back(columns[4] + " = " + std::to_string(e.is_zone));
v.push_back(columns[5] + " = " + std::to_string(e.decay_in_seconds));
v.push_back(columns[6] + " = " + std::to_string(e.npc_id));
v.push_back(columns[7] + " = " + std::to_string(e.spawn2_id));
v.push_back(columns[8] + " = " + std::to_string(e.spawngroup_id));
v.push_back(columns[9] + " = " + std::to_string(e.x));
v.push_back(columns[10] + " = " + std::to_string(e.y));
v.push_back(columns[11] + " = " + std::to_string(e.z));
v.push_back(columns[12] + " = " + std::to_string(e.heading));
v.push_back(columns[13] + " = " + std::to_string(e.respawn_time));
v.push_back(columns[14] + " = " + std::to_string(e.variance));
v.push_back(columns[15] + " = " + std::to_string(e.grid));
v.push_back(columns[16] + " = " + std::to_string(e.current_waypoint));
v.push_back(columns[17] + " = " + std::to_string(e.path_when_zone_idle));
v.push_back(columns[18] + " = " + std::to_string(e.condition_id));
v.push_back(columns[19] + " = " + std::to_string(e.condition_min_value));
v.push_back(columns[20] + " = " + std::to_string(e.enabled));
v.push_back(columns[21] + " = " + std::to_string(e.anim));
v.push_back(columns[22] + " = '" + Strings::Escape(e.loot_data) + "'");
v.push_back(columns[23] + " = '" + Strings::Escape(e.entity_variables) + "'");
v.push_back(columns[24] + " = '" + Strings::Escape(e.buffs) + "'");
v.push_back(columns[25] + " = " + std::to_string(e.hp));
v.push_back(columns[26] + " = " + std::to_string(e.mana));
v.push_back(columns[27] + " = " + std::to_string(e.endurance));
v.push_back(columns[28] + " = FROM_UNIXTIME(" + (e.created_at > 0 ? std::to_string(e.created_at) : "null") + ")");
auto results = db.QueryDatabase(
fmt::format(
@@ -336,6 +342,7 @@ public:
v.push_back(std::to_string(e.zone_id));
v.push_back(std::to_string(e.instance_id));
v.push_back(std::to_string(e.is_corpse));
v.push_back(std::to_string(e.is_zone));
v.push_back(std::to_string(e.decay_in_seconds));
v.push_back(std::to_string(e.npc_id));
v.push_back(std::to_string(e.spawn2_id));
@@ -393,6 +400,7 @@ public:
v.push_back(std::to_string(e.zone_id));
v.push_back(std::to_string(e.instance_id));
v.push_back(std::to_string(e.is_corpse));
v.push_back(std::to_string(e.is_zone));
v.push_back(std::to_string(e.decay_in_seconds));
v.push_back(std::to_string(e.npc_id));
v.push_back(std::to_string(e.spawn2_id));
@@ -454,30 +462,31 @@ public:
e.zone_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.instance_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.is_corpse = row[3] ? static_cast<int8_t>(atoi(row[3])) : 0;
e.decay_in_seconds = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.npc_id = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.spawn2_id = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.spawngroup_id = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.x = row[8] ? strtof(row[8], nullptr) : 0;
e.y = row[9] ? strtof(row[9], nullptr) : 0;
e.z = row[10] ? strtof(row[10], nullptr) : 0;
e.heading = row[11] ? strtof(row[11], nullptr) : 0;
e.respawn_time = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
e.variance = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.grid = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
e.current_waypoint = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
e.path_when_zone_idle = row[16] ? static_cast<int16_t>(atoi(row[16])) : 0;
e.condition_id = row[17] ? static_cast<uint16_t>(strtoul(row[17], nullptr, 10)) : 0;
e.condition_min_value = row[18] ? static_cast<int16_t>(atoi(row[18])) : 0;
e.enabled = row[19] ? static_cast<int16_t>(atoi(row[19])) : 1;
e.anim = row[20] ? static_cast<uint16_t>(strtoul(row[20], nullptr, 10)) : 0;
e.loot_data = row[21] ? row[21] : "";
e.entity_variables = row[22] ? row[22] : "";
e.buffs = row[23] ? row[23] : "";
e.hp = row[24] ? strtoll(row[24], nullptr, 10) : 0;
e.mana = row[25] ? strtoll(row[25], nullptr, 10) : 0;
e.endurance = row[26] ? strtoll(row[26], nullptr, 10) : 0;
e.created_at = strtoll(row[27] ? row[27] : "-1", nullptr, 10);
e.is_zone = row[4] ? static_cast<int8_t>(atoi(row[4])) : 0;
e.decay_in_seconds = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.npc_id = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.spawn2_id = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.spawngroup_id = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.x = row[9] ? strtof(row[9], nullptr) : 0;
e.y = row[10] ? strtof(row[10], nullptr) : 0;
e.z = row[11] ? strtof(row[11], nullptr) : 0;
e.heading = row[12] ? strtof(row[12], nullptr) : 0;
e.respawn_time = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.variance = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
e.grid = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.current_waypoint = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
e.path_when_zone_idle = row[17] ? static_cast<int16_t>(atoi(row[17])) : 0;
e.condition_id = row[18] ? static_cast<uint16_t>(strtoul(row[18], nullptr, 10)) : 0;
e.condition_min_value = row[19] ? static_cast<int16_t>(atoi(row[19])) : 0;
e.enabled = row[20] ? static_cast<int16_t>(atoi(row[20])) : 1;
e.anim = row[21] ? static_cast<uint16_t>(strtoul(row[21], nullptr, 10)) : 0;
e.loot_data = row[22] ? row[22] : "";
e.entity_variables = row[23] ? row[23] : "";
e.buffs = row[24] ? row[24] : "";
e.hp = row[25] ? strtoll(row[25], nullptr, 10) : 0;
e.mana = row[26] ? strtoll(row[26], nullptr, 10) : 0;
e.endurance = row[27] ? strtoll(row[27], nullptr, 10) : 0;
e.created_at = strtoll(row[28] ? row[28] : "-1", nullptr, 10);
all_entries.push_back(e);
}
@@ -506,30 +515,31 @@ public:
e.zone_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
e.instance_id = row[2] ? static_cast<uint32_t>(strtoul(row[2], nullptr, 10)) : 0;
e.is_corpse = row[3] ? static_cast<int8_t>(atoi(row[3])) : 0;
e.decay_in_seconds = row[4] ? static_cast<int32_t>(atoi(row[4])) : 0;
e.npc_id = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
e.spawn2_id = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.spawngroup_id = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.x = row[8] ? strtof(row[8], nullptr) : 0;
e.y = row[9] ? strtof(row[9], nullptr) : 0;
e.z = row[10] ? strtof(row[10], nullptr) : 0;
e.heading = row[11] ? strtof(row[11], nullptr) : 0;
e.respawn_time = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
e.variance = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.grid = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
e.current_waypoint = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
e.path_when_zone_idle = row[16] ? static_cast<int16_t>(atoi(row[16])) : 0;
e.condition_id = row[17] ? static_cast<uint16_t>(strtoul(row[17], nullptr, 10)) : 0;
e.condition_min_value = row[18] ? static_cast<int16_t>(atoi(row[18])) : 0;
e.enabled = row[19] ? static_cast<int16_t>(atoi(row[19])) : 1;
e.anim = row[20] ? static_cast<uint16_t>(strtoul(row[20], nullptr, 10)) : 0;
e.loot_data = row[21] ? row[21] : "";
e.entity_variables = row[22] ? row[22] : "";
e.buffs = row[23] ? row[23] : "";
e.hp = row[24] ? strtoll(row[24], nullptr, 10) : 0;
e.mana = row[25] ? strtoll(row[25], nullptr, 10) : 0;
e.endurance = row[26] ? strtoll(row[26], nullptr, 10) : 0;
e.created_at = strtoll(row[27] ? row[27] : "-1", nullptr, 10);
e.is_zone = row[4] ? static_cast<int8_t>(atoi(row[4])) : 0;
e.decay_in_seconds = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
e.npc_id = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.spawn2_id = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.spawngroup_id = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.x = row[9] ? strtof(row[9], nullptr) : 0;
e.y = row[10] ? strtof(row[10], nullptr) : 0;
e.z = row[11] ? strtof(row[11], nullptr) : 0;
e.heading = row[12] ? strtof(row[12], nullptr) : 0;
e.respawn_time = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
e.variance = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
e.grid = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
e.current_waypoint = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
e.path_when_zone_idle = row[17] ? static_cast<int16_t>(atoi(row[17])) : 0;
e.condition_id = row[18] ? static_cast<uint16_t>(strtoul(row[18], nullptr, 10)) : 0;
e.condition_min_value = row[19] ? static_cast<int16_t>(atoi(row[19])) : 0;
e.enabled = row[20] ? static_cast<int16_t>(atoi(row[20])) : 1;
e.anim = row[21] ? static_cast<uint16_t>(strtoul(row[21], nullptr, 10)) : 0;
e.loot_data = row[22] ? row[22] : "";
e.entity_variables = row[23] ? row[23] : "";
e.buffs = row[24] ? row[24] : "";
e.hp = row[25] ? strtoll(row[25], nullptr, 10) : 0;
e.mana = row[26] ? strtoll(row[26], nullptr, 10) : 0;
e.endurance = row[27] ? strtoll(row[27], nullptr, 10) : 0;
e.created_at = strtoll(row[28] ? row[28] : "-1", nullptr, 10);
all_entries.push_back(e);
}
@@ -608,6 +618,7 @@ public:
v.push_back(std::to_string(e.zone_id));
v.push_back(std::to_string(e.instance_id));
v.push_back(std::to_string(e.is_corpse));
v.push_back(std::to_string(e.is_zone));
v.push_back(std::to_string(e.decay_in_seconds));
v.push_back(std::to_string(e.npc_id));
v.push_back(std::to_string(e.spawn2_id));
@@ -658,6 +669,7 @@ public:
v.push_back(std::to_string(e.zone_id));
v.push_back(std::to_string(e.instance_id));
v.push_back(std::to_string(e.is_corpse));
v.push_back(std::to_string(e.is_zone));
v.push_back(std::to_string(e.decay_in_seconds));
v.push_back(std::to_string(e.npc_id));
v.push_back(std::to_string(e.spawn2_id));