From c178f03a26416ceca1ab9c962f43007aac6104e1 Mon Sep 17 00:00:00 2001 From: aleos Date: Wed, 17 Jan 2024 16:09:36 -0500 Subject: [PATCH] Convert s_map_zone_data storage to shared_ptr --- src/map/atcommand.cpp | 4 ++-- src/map/itemdb.cpp | 2 +- src/map/map.cpp | 18 +++++++----------- src/map/map.hpp | 2 +- src/map/pc.cpp | 2 +- src/map/skill.cpp | 2 +- src/map/status.cpp | 6 +++--- 7 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/map/atcommand.cpp b/src/map/atcommand.cpp index 8b97f04e12..158cf81fd1 100644 --- a/src/map/atcommand.cpp +++ b/src/map/atcommand.cpp @@ -4422,7 +4422,7 @@ ACMD_FUNC(mapinfo) { struct map_data *mapdata = map_getmapdata(m_id); - sprintf(atcmd_output, msg_txt(sd,1040), mapname, script_get_constant_str("MAPTYPE_", mapdata->zone.id), mapdata->users, mapdata->npc_num, chat_num, vend_num); // Map: %s (Zone: %s) | Players: %d | NPCs: %d | Chats: %d | Vendings: %d + sprintf(atcmd_output, msg_txt(sd,1040), mapname, script_get_constant_str("MAPTYPE_", mapdata->zone->id), mapdata->users, mapdata->npc_num, chat_num, vend_num); // Map: %s (Zone: %s) | Players: %d | NPCs: %d | Chats: %d | Vendings: %d clif_displaymessage(fd, atcmd_output); clif_displaymessage(fd, msg_txt(sd,1041)); // ------ Map Flags ------ @@ -11573,7 +11573,7 @@ bool is_atcommand(const int fd, map_session_data* sd, const char* message, int t struct map_data *mapdata = map_getmapdata(sd->bl.m); - if (mapdata->zone.isCommandDisabled(info->command, pc_get_group_level(sd))) { + if (mapdata->zone->isCommandDisabled(info->command, pc_get_group_level(sd))) { clif_messagecolor(&sd->bl, color_table[COLOR_RED], msg_txt(sd, 832), false, SELF); // This command is disabled on this map. return true; } diff --git a/src/map/itemdb.cpp b/src/map/itemdb.cpp index d43095b240..ce328dfe14 100644 --- a/src/map/itemdb.cpp +++ b/src/map/itemdb.cpp @@ -4207,7 +4207,7 @@ bool itemdb_isNoEquip(map_session_data &sd, t_itemid nameid) { if (!mapdata) return true; - if (mapdata->zone.isItemDisabled(nameid, pc_get_group_level(&sd))) + if (mapdata->zone->isItemDisabled(nameid, pc_get_group_level(&sd))) return true; return false; } diff --git a/src/map/map.cpp b/src/map/map.cpp index b7223fa38c..9a1c40985d 100644 --- a/src/map/map.cpp +++ b/src/map/map.cpp @@ -515,17 +515,13 @@ void MapZoneDatabase::loadingFinished() { if (mapdata == nullptr) continue; - mapdata->zone.id = zone.second->id; - mapdata->zone.disabled_commands = zone.second->disabled_commands; - mapdata->zone.disabled_items = zone.second->disabled_items; - mapdata->zone.disabled_skills = zone.second->disabled_skills; - mapdata->zone.disabled_statuses = zone.second->disabled_statuses; - mapdata->zone.restricted_jobs = zone.second->restricted_jobs; - - // Clear previous mapflags - mapdata->initMapFlags(); - mapdata->skill_damage.clear(); - mapdata->skill_duration.clear(); + mapdata->zone = std::make_shared(); + mapdata->zone->id = zone.second->id; + mapdata->zone->disabled_commands = zone.second->disabled_commands; + mapdata->zone->disabled_items = zone.second->disabled_items; + mapdata->zone->disabled_skills = zone.second->disabled_skills; + mapdata->zone->disabled_statuses = zone.second->disabled_statuses; + mapdata->zone->restricted_jobs = zone.second->restricted_jobs; // Apply mapflags from Map Zone DB for (const auto &flag : zone.second->mapflags) { diff --git a/src/map/map.hpp b/src/map/map.hpp index 6251d9b389..664c9aaddc 100644 --- a/src/map/map.hpp +++ b/src/map/map.hpp @@ -845,7 +845,7 @@ struct map_data { std::unordered_map skill_damage; // Used for single skill damage adjustment std::unordered_map skill_duration; - s_map_zone_data zone; + std::shared_ptr zone; struct npc_data *npc[MAX_NPC_PER_MAP]; struct spawn_data *moblist[MAX_MOB_LIST_PER_MAP]; // [Wizputer] diff --git a/src/map/pc.cpp b/src/map/pc.cpp index e850eac6cd..1dfc034d22 100755 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -15144,7 +15144,7 @@ bool pc_job_can_entermap(enum e_job jobid, int m, int group_lv) { map_data *mapdata = map_getmapdata(m); - if (mapdata != nullptr && mapdata->zone.isJobRestricted(jobid, group_lv)) + if (mapdata != nullptr && mapdata->zone->isJobRestricted(jobid, group_lv)) return false; return true; diff --git a/src/map/skill.cpp b/src/map/skill.cpp index a336a54756..8662e9fa98 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -869,7 +869,7 @@ bool skill_isNotOk(uint16 skill_id, map_session_data *sd) uint32 skill_nocast = skill_get_nocast(skill_id); // Check skill restrictions [Celest] - if (mapdata != nullptr && mapdata->zone.isSkillDisabled(skill_id, sd->bl.type, pc_get_group_level(sd))) { + if (mapdata != nullptr && mapdata->zone->isSkillDisabled(skill_id, sd->bl.type, pc_get_group_level(sd))) { clif_msg(sd, SKILL_CANT_USE_AREA); // This skill cannot be used within this area return true; } diff --git a/src/map/status.cpp b/src/map/status.cpp index 81b9ee9f75..9f395bbff7 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -1944,7 +1944,7 @@ bool status_check_skilluse(struct block_list *src, struct block_list *target, ui map_data *mapdata = map_getmapdata(src->m); map_session_data *sd = (TBL_PC *)src; - if (mapdata != nullptr && mapdata->zone.isSkillDisabled(skill_id, src->type, (sd != nullptr) ? pc_get_group_level(sd) : 0 )) { + if (mapdata != nullptr && mapdata->zone->isSkillDisabled(skill_id, src->type, (sd != nullptr) ? pc_get_group_level(sd) : 0 )) { if (sd != nullptr) clif_msg(sd, SKILL_CANT_USE_AREA); // This skill cannot be used within this area return false; @@ -9981,7 +9981,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty map_data *mapdata = map_getmapdata(bl->m); map_session_data *sd = BL_CAST(BL_PC, bl); - if (mapdata != nullptr && mapdata->zone.isStatusDisabled(type, bl->type, (sd != nullptr) ? pc_get_group_level(sd) : 0)) + if (mapdata != nullptr && mapdata->zone->isStatusDisabled(type, bl->type, (sd != nullptr) ? pc_get_group_level(sd) : 0)) return 0; if (sc->getSCE(SC_GRAVITYCONTROL)) @@ -15372,7 +15372,7 @@ void status_change_clear_onChangeMap(block_list *bl) map_session_data *sd = (TBL_PC *)bl; - if (mapdata->zone.isStatusDisabled(type, bl->type, (sd != nullptr) ? pc_get_group_level(sd) : 0)) + if (mapdata->zone->isStatusDisabled(type, bl->type, (sd != nullptr) ? pc_get_group_level(sd) : 0)) status_change_end(bl, type); } }