mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-15 00:01:28 +00:00
[Scaling] Add support for pipe-separated zone IDs and versions (#3015)
* [Scaling] Add support for pipe-separated zone IDs and versions # Notes - Allows `|` separated zone IDs and instance versions within the scaling data. - Loads scaling data on zone bootup as well, without needing to repop for it to initialize. * Cleanup
This commit is contained in:
parent
83ea9816b8
commit
c21d47f450
@ -22,8 +22,8 @@ public:
|
|||||||
struct NpcScaleGlobalBase {
|
struct NpcScaleGlobalBase {
|
||||||
int32_t type;
|
int32_t type;
|
||||||
int32_t level;
|
int32_t level;
|
||||||
uint32_t zone_id;
|
std::string zone_id_list;
|
||||||
int32_t instance_version;
|
std::string instance_version_list;
|
||||||
int32_t ac;
|
int32_t ac;
|
||||||
int32_t hp;
|
int32_t hp;
|
||||||
int32_t accuracy;
|
int32_t accuracy;
|
||||||
@ -62,8 +62,8 @@ public:
|
|||||||
return {
|
return {
|
||||||
"type",
|
"type",
|
||||||
"level",
|
"level",
|
||||||
"zone_id",
|
"zone_id_list",
|
||||||
"instance_version",
|
"instance_version_list",
|
||||||
"ac",
|
"ac",
|
||||||
"hp",
|
"hp",
|
||||||
"accuracy",
|
"accuracy",
|
||||||
@ -98,8 +98,8 @@ public:
|
|||||||
return {
|
return {
|
||||||
"type",
|
"type",
|
||||||
"level",
|
"level",
|
||||||
"zone_id",
|
"zone_id_list",
|
||||||
"instance_version",
|
"instance_version_list",
|
||||||
"ac",
|
"ac",
|
||||||
"hp",
|
"hp",
|
||||||
"accuracy",
|
"accuracy",
|
||||||
@ -168,8 +168,8 @@ public:
|
|||||||
|
|
||||||
e.type = 0;
|
e.type = 0;
|
||||||
e.level = 0;
|
e.level = 0;
|
||||||
e.zone_id = 0;
|
e.zone_id_list = "";
|
||||||
e.instance_version = -1;
|
e.instance_version_list = "";
|
||||||
e.ac = 0;
|
e.ac = 0;
|
||||||
e.hp = 0;
|
e.hp = 0;
|
||||||
e.accuracy = 0;
|
e.accuracy = 0;
|
||||||
@ -234,8 +234,8 @@ public:
|
|||||||
|
|
||||||
e.type = static_cast<int32_t>(atoi(row[0]));
|
e.type = static_cast<int32_t>(atoi(row[0]));
|
||||||
e.level = static_cast<int32_t>(atoi(row[1]));
|
e.level = static_cast<int32_t>(atoi(row[1]));
|
||||||
e.zone_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
|
e.zone_id_list = row[2] ? row[2] : "";
|
||||||
e.instance_version = static_cast<int32_t>(atoi(row[3]));
|
e.instance_version_list = row[3] ? row[3] : "";
|
||||||
e.ac = static_cast<int32_t>(atoi(row[4]));
|
e.ac = static_cast<int32_t>(atoi(row[4]));
|
||||||
e.hp = static_cast<int32_t>(atoi(row[5]));
|
e.hp = static_cast<int32_t>(atoi(row[5]));
|
||||||
e.accuracy = static_cast<int32_t>(atoi(row[6]));
|
e.accuracy = static_cast<int32_t>(atoi(row[6]));
|
||||||
@ -297,8 +297,8 @@ public:
|
|||||||
|
|
||||||
v.push_back(columns[0] + " = " + std::to_string(e.type));
|
v.push_back(columns[0] + " = " + std::to_string(e.type));
|
||||||
v.push_back(columns[1] + " = " + std::to_string(e.level));
|
v.push_back(columns[1] + " = " + std::to_string(e.level));
|
||||||
v.push_back(columns[2] + " = " + std::to_string(e.zone_id));
|
v.push_back(columns[2] + " = '" + Strings::Escape(e.zone_id_list) + "'");
|
||||||
v.push_back(columns[3] + " = " + std::to_string(e.instance_version));
|
v.push_back(columns[3] + " = '" + Strings::Escape(e.instance_version_list) + "'");
|
||||||
v.push_back(columns[4] + " = " + std::to_string(e.ac));
|
v.push_back(columns[4] + " = " + std::to_string(e.ac));
|
||||||
v.push_back(columns[5] + " = " + std::to_string(e.hp));
|
v.push_back(columns[5] + " = " + std::to_string(e.hp));
|
||||||
v.push_back(columns[6] + " = " + std::to_string(e.accuracy));
|
v.push_back(columns[6] + " = " + std::to_string(e.accuracy));
|
||||||
@ -348,8 +348,8 @@ public:
|
|||||||
|
|
||||||
v.push_back(std::to_string(e.type));
|
v.push_back(std::to_string(e.type));
|
||||||
v.push_back(std::to_string(e.level));
|
v.push_back(std::to_string(e.level));
|
||||||
v.push_back(std::to_string(e.zone_id));
|
v.push_back("'" + Strings::Escape(e.zone_id_list) + "'");
|
||||||
v.push_back(std::to_string(e.instance_version));
|
v.push_back("'" + Strings::Escape(e.instance_version_list) + "'");
|
||||||
v.push_back(std::to_string(e.ac));
|
v.push_back(std::to_string(e.ac));
|
||||||
v.push_back(std::to_string(e.hp));
|
v.push_back(std::to_string(e.hp));
|
||||||
v.push_back(std::to_string(e.accuracy));
|
v.push_back(std::to_string(e.accuracy));
|
||||||
@ -407,8 +407,8 @@ public:
|
|||||||
|
|
||||||
v.push_back(std::to_string(e.type));
|
v.push_back(std::to_string(e.type));
|
||||||
v.push_back(std::to_string(e.level));
|
v.push_back(std::to_string(e.level));
|
||||||
v.push_back(std::to_string(e.zone_id));
|
v.push_back("'" + Strings::Escape(e.zone_id_list) + "'");
|
||||||
v.push_back(std::to_string(e.instance_version));
|
v.push_back("'" + Strings::Escape(e.instance_version_list) + "'");
|
||||||
v.push_back(std::to_string(e.ac));
|
v.push_back(std::to_string(e.ac));
|
||||||
v.push_back(std::to_string(e.hp));
|
v.push_back(std::to_string(e.hp));
|
||||||
v.push_back(std::to_string(e.accuracy));
|
v.push_back(std::to_string(e.accuracy));
|
||||||
@ -470,8 +470,8 @@ public:
|
|||||||
|
|
||||||
e.type = static_cast<int32_t>(atoi(row[0]));
|
e.type = static_cast<int32_t>(atoi(row[0]));
|
||||||
e.level = static_cast<int32_t>(atoi(row[1]));
|
e.level = static_cast<int32_t>(atoi(row[1]));
|
||||||
e.zone_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
|
e.zone_id_list = row[2] ? row[2] : "";
|
||||||
e.instance_version = static_cast<int32_t>(atoi(row[3]));
|
e.instance_version_list = row[3] ? row[3] : "";
|
||||||
e.ac = static_cast<int32_t>(atoi(row[4]));
|
e.ac = static_cast<int32_t>(atoi(row[4]));
|
||||||
e.hp = static_cast<int32_t>(atoi(row[5]));
|
e.hp = static_cast<int32_t>(atoi(row[5]));
|
||||||
e.accuracy = static_cast<int32_t>(atoi(row[6]));
|
e.accuracy = static_cast<int32_t>(atoi(row[6]));
|
||||||
@ -524,8 +524,8 @@ public:
|
|||||||
|
|
||||||
e.type = static_cast<int32_t>(atoi(row[0]));
|
e.type = static_cast<int32_t>(atoi(row[0]));
|
||||||
e.level = static_cast<int32_t>(atoi(row[1]));
|
e.level = static_cast<int32_t>(atoi(row[1]));
|
||||||
e.zone_id = static_cast<uint32_t>(strtoul(row[2], nullptr, 10));
|
e.zone_id_list = row[2] ? row[2] : "";
|
||||||
e.instance_version = static_cast<int32_t>(atoi(row[3]));
|
e.instance_version_list = row[3] ? row[3] : "";
|
||||||
e.ac = static_cast<int32_t>(atoi(row[4]));
|
e.ac = static_cast<int32_t>(atoi(row[4]));
|
||||||
e.hp = static_cast<int32_t>(atoi(row[5]));
|
e.hp = static_cast<int32_t>(atoi(row[5]));
|
||||||
e.accuracy = static_cast<int32_t>(atoi(row[6]));
|
e.accuracy = static_cast<int32_t>(atoi(row[6]));
|
||||||
|
|||||||
@ -42,7 +42,7 @@
|
|||||||
* Manifest: https://github.com/EQEmu/Server/blob/master/utils/sql/db_update_manifest.txt
|
* Manifest: https://github.com/EQEmu/Server/blob/master/utils/sql/db_update_manifest.txt
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define CURRENT_BINARY_DATABASE_VERSION 9221
|
#define CURRENT_BINARY_DATABASE_VERSION 9222
|
||||||
#define CURRENT_BINARY_BOTS_DATABASE_VERSION 9038
|
#define CURRENT_BINARY_BOTS_DATABASE_VERSION 9038
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -475,6 +475,7 @@
|
|||||||
9219|2023_01_29_merchant_status_requirements.sql|SHOW COLUMNS FROM merchantlist LIKE 'min_status'|empty|
|
9219|2023_01_29_merchant_status_requirements.sql|SHOW COLUMNS FROM merchantlist LIKE 'min_status'|empty|
|
||||||
9220|2022_12_19_player_events_tables.sql|SHOW TABLES LIKE 'player_event_logs'|empty|
|
9220|2022_12_19_player_events_tables.sql|SHOW TABLES LIKE 'player_event_logs'|empty|
|
||||||
9221|2023_02_24_npc_scaling_zone_id_instance_version.sql|SHOW COLUMNS FROM `npc_scale_global_base` LIKE 'zone_id'|empty|
|
9221|2023_02_24_npc_scaling_zone_id_instance_version.sql|SHOW COLUMNS FROM `npc_scale_global_base` LIKE 'zone_id'|empty|
|
||||||
|
9222|2023_02_28_npc_scaling_zone_list_version_list.sql|SHOW COLUMNS FROM `npc_scale_global_base` LIKE 'zone_id_list'|empty|
|
||||||
|
|
||||||
# Upgrade conditions:
|
# Upgrade conditions:
|
||||||
# This won't be needed after this system is implemented, but it is used database that are not
|
# This won't be needed after this system is implemented, but it is used database that are not
|
||||||
|
|||||||
@ -0,0 +1,5 @@
|
|||||||
|
ALTER TABLE `npc_scale_global_base`
|
||||||
|
CHANGE COLUMN `zone_id` `zone_id_list` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT 0 AFTER `level`,
|
||||||
|
CHANGE COLUMN `instance_version` `instance_version_list` text CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT 0 AFTER `zone_id_list`,
|
||||||
|
DROP PRIMARY KEY,
|
||||||
|
ADD PRIMARY KEY (`type`, `level`, `zone_id_list`(255), `instance_version_list`(255)) USING BTREE;
|
||||||
@ -216,12 +216,17 @@ bool NpcScaleManager::LoadScaleData()
|
|||||||
{
|
{
|
||||||
auto rows = NpcScaleGlobalBaseRepository::All(content_db);
|
auto rows = NpcScaleGlobalBaseRepository::All(content_db);
|
||||||
for (const auto &s : rows) {
|
for (const auto &s : rows) {
|
||||||
|
if (
|
||||||
|
s.zone_id_list.empty() ||
|
||||||
|
s.instance_version_list.empty()
|
||||||
|
) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
global_npc_scale scale_data;
|
global_npc_scale scale_data;
|
||||||
|
|
||||||
scale_data.type = s.type;
|
scale_data.type = s.type;
|
||||||
scale_data.level = s.level;
|
scale_data.level = s.level;
|
||||||
scale_data.zone_id = s.zone_id;
|
|
||||||
scale_data.instance_version = s.instance_version;
|
|
||||||
scale_data.ac = s.ac;
|
scale_data.ac = s.ac;
|
||||||
scale_data.hp = s.hp;
|
scale_data.hp = s.hp;
|
||||||
scale_data.accuracy = s.accuracy;
|
scale_data.accuracy = s.accuracy;
|
||||||
@ -252,6 +257,13 @@ bool NpcScaleManager::LoadScaleData()
|
|||||||
scale_data.special_abilities = s.special_abilities;
|
scale_data.special_abilities = s.special_abilities;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const auto has_multiple_zones = Strings::Contains(s.zone_id_list, "|");
|
||||||
|
const auto has_multiple_versions = Strings::Contains(s.instance_version_list, "|");
|
||||||
|
|
||||||
|
if (!has_multiple_zones && !has_multiple_versions) {
|
||||||
|
scale_data.zone_id = std::stoul(s.zone_id_list);
|
||||||
|
scale_data.instance_version = static_cast<uint16>(std::stoul(s.instance_version_list));
|
||||||
|
|
||||||
npc_global_base_scaling_data.insert(
|
npc_global_base_scaling_data.insert(
|
||||||
std::make_pair(
|
std::make_pair(
|
||||||
std::make_tuple(
|
std::make_tuple(
|
||||||
@ -263,6 +275,70 @@ bool NpcScaleManager::LoadScaleData()
|
|||||||
scale_data
|
scale_data
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
} else if (has_multiple_zones && !has_multiple_versions) {
|
||||||
|
scale_data.instance_version = static_cast<uint16>(std::stoul(s.instance_version_list));
|
||||||
|
|
||||||
|
const auto zones = Strings::Split(s.zone_id_list, "|");
|
||||||
|
|
||||||
|
for (const auto &z : zones) {
|
||||||
|
scale_data.zone_id = std::stoul(z);
|
||||||
|
|
||||||
|
npc_global_base_scaling_data.insert(
|
||||||
|
std::make_pair(
|
||||||
|
std::make_tuple(
|
||||||
|
scale_data.type,
|
||||||
|
scale_data.level,
|
||||||
|
scale_data.zone_id,
|
||||||
|
scale_data.instance_version
|
||||||
|
),
|
||||||
|
scale_data
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else if (!has_multiple_zones && has_multiple_versions) {
|
||||||
|
scale_data.zone_id = std::stoul(s.zone_id_list);
|
||||||
|
|
||||||
|
const auto versions = Strings::Split(s.instance_version_list, "|");
|
||||||
|
|
||||||
|
for (const auto &v : versions) {
|
||||||
|
scale_data.instance_version = static_cast<uint16>(std::stoul(v));
|
||||||
|
|
||||||
|
npc_global_base_scaling_data.insert(
|
||||||
|
std::make_pair(
|
||||||
|
std::make_tuple(
|
||||||
|
scale_data.type,
|
||||||
|
scale_data.level,
|
||||||
|
scale_data.zone_id,
|
||||||
|
scale_data.instance_version
|
||||||
|
),
|
||||||
|
scale_data
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else if (has_multiple_zones && has_multiple_versions) {
|
||||||
|
const auto zones = Strings::Split(s.zone_id_list, "|");
|
||||||
|
const auto versions = Strings::Split(s.instance_version_list, "|");
|
||||||
|
|
||||||
|
for (const auto &z : zones) {
|
||||||
|
scale_data.zone_id = std::stoul(z);
|
||||||
|
|
||||||
|
for (const auto &v : versions) {
|
||||||
|
scale_data.instance_version = static_cast<uint16>(std::stoul(v));
|
||||||
|
|
||||||
|
npc_global_base_scaling_data.insert(
|
||||||
|
std::make_pair(
|
||||||
|
std::make_tuple(
|
||||||
|
scale_data.type,
|
||||||
|
scale_data.level,
|
||||||
|
scale_data.zone_id,
|
||||||
|
scale_data.instance_version
|
||||||
|
),
|
||||||
|
scale_data
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LogInfo("Loaded [{}] global scaling data entries", Strings::Commify(rows.size()));
|
LogInfo("Loaded [{}] global scaling data entries", Strings::Commify(rows.size()));
|
||||||
|
|||||||
@ -1218,6 +1218,8 @@ bool Zone::Init(bool is_static) {
|
|||||||
LoadGrids();
|
LoadGrids();
|
||||||
LoadTickItems();
|
LoadTickItems();
|
||||||
|
|
||||||
|
npc_scale_manager->LoadScaleData();
|
||||||
|
|
||||||
// logging origination information
|
// logging origination information
|
||||||
LogSys.origination_info.zone_short_name = zone->short_name;
|
LogSys.origination_info.zone_short_name = zone->short_name;
|
||||||
LogSys.origination_info.zone_long_name = zone->long_name;
|
LogSys.origination_info.zone_long_name = zone->long_name;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user