Browse Source

Adjust getMapZone
* Change the lookup method for getMapZone to utilize the value stored in the map_data rather than looking through map_zone memory bringing faster results.

aleos 10 months ago
parent
commit
394d502e1b
2 changed files with 19 additions and 24 deletions
  1. 17 22
      src/map/map.cpp
  2. 2 2
      src/map/map.hpp

+ 17 - 22
src/map/map.cpp

@@ -223,7 +223,7 @@ uint64 MapZoneDatabase::parseBodyNode(const ryml::NodeRef& node) {
 
 	if (!exists) {
 		zone = std::make_shared<c_map_zone>();
-		zone->id = zone_id;
+		zone->id = static_cast<e_map_type>(zone_id);
 	}
 
 	if (this->nodeExists(node, "DisabledCommands")) {
@@ -537,27 +537,6 @@ void MapZoneDatabase::loadingFinished() {
 	}
 }
 
-/**
- * Get the zone to a map.
- * @param map_id: Map ID
- * @return e_map_type on success or MAPTYPE_UNUSED otherwise
- */
-e_map_type MapZoneDatabase::getMapZone(int16 map_id) {
-	map_data *mapdata = map_getmapdata(map_id);
-
-	if (mapdata == nullptr) {
-		ShowError("MapZoneDatabase::getMapZone: Unknown map ID %d, skipping.\n", map_id);
-		return MAPTYPE_UNUSED;
-	}
-
-	for (const auto &zone : map_zone_db) {
-		if (util::vector_exists(zone.second->maps, map_id))
-			return static_cast<e_map_type>(zone.second->id);
-	}
-
-	return MAPTYPE_UNUSED;
-}
-
 /**
  * Set the zone to a map.
  * @param map_id: Map ID
@@ -600,6 +579,22 @@ bool MapZoneDatabase::setZone(int16 map_id, e_map_type zone) {
 
 MapZoneDatabase map_zone_db;
 
+/**
+ * Get the zone to a map.
+ * @param map_id: Map ID
+ * @return e_map_type on success or MAPTYPE_UNUSED otherwise
+ */
+e_map_type c_map_zone_data::getMapZone(int16 map_id) {
+	map_data *mapdata = map_getmapdata(map_id);
+
+	if (mapdata == nullptr) {
+		ShowError("MapZoneDatabase::getMapZone: Unknown map ID %d, skipping.\n", map_id);
+		return MAPTYPE_UNUSED;
+	}
+
+	return mapdata->zone->id;
+}
+
 /**
  * Check if a command is disabled on a map based on group level.
  * @param name: Command name

+ 2 - 2
src/map/map.hpp

@@ -815,13 +815,14 @@ struct iwall_data {
 
 class c_map_zone_data {
 public:
-	uint16 id;
+	e_map_type id;
 	std::unordered_map<std::string, uint16> disabled_commands;
 	std::unordered_map<uint16, std::pair<uint16, uint16>> disabled_skills;
 	std::unordered_map<t_itemid, uint16> disabled_items;
 	std::unordered_map<sc_type, uint16> disabled_statuses;
 	std::unordered_map<int32, uint16> restricted_jobs;
 
+	e_map_type getMapZone(int16 map_id);
 	bool isCommandDisabled(std::string name, map_session_data &sd);
 	bool isSkillDisabled(uint16 skill_id, block_list &bl);
 	bool isItemDisabled(t_itemid nameid, map_session_data &sd);
@@ -905,7 +906,6 @@ public:
 	void loadingFinished() override;
 
 	// Others
-	e_map_type getMapZone(int16 map_id);
 	bool setZone(int16 map_id, e_map_type zone);
 };