diff options
Diffstat (limited to 'tools/datapacker/container.cpp')
-rw-r--r-- | tools/datapacker/container.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tools/datapacker/container.cpp b/tools/datapacker/container.cpp index 29fa1a5..bb58ec5 100644 --- a/tools/datapacker/container.cpp +++ b/tools/datapacker/container.cpp | |||
@@ -246,6 +246,46 @@ uint64_t Container::FindOrAddMastery(std::optional<std::string> map_name, | |||
246 | } | 246 | } |
247 | } | 247 | } |
248 | 248 | ||
249 | uint64_t Container::FindOrAddKeyholder( | ||
250 | std::optional<std::string> map_name, std::optional<std::string> room_name, | ||
251 | std::string keyholder_name, std::optional<std::string> map_fallback, | ||
252 | std::optional<std::string> room_fallback) { | ||
253 | if (!map_name) { | ||
254 | if (!map_fallback) { | ||
255 | std::cout << "No map name provided for " << keyholder_name << std::endl; | ||
256 | map_name = "global"; | ||
257 | } else { | ||
258 | map_name = map_fallback; | ||
259 | } | ||
260 | } | ||
261 | |||
262 | if (!room_name) { | ||
263 | if (!room_fallback) { | ||
264 | std::cout << "No room name provided for " << keyholder_name << std::endl; | ||
265 | room_name = "global"; | ||
266 | } else { | ||
267 | room_name = room_fallback; | ||
268 | } | ||
269 | } | ||
270 | |||
271 | auto& room_container = | ||
272 | keyholder_id_by_map_room_keyholder_names_[*map_name][*room_name]; | ||
273 | auto it = room_container.find(keyholder_name); | ||
274 | if (it == room_container.end()) { | ||
275 | uint64_t new_id = all_objects_.keyholders_size(); | ||
276 | Keyholder* keyholder = all_objects_.add_keyholders(); | ||
277 | keyholder->set_id(new_id); | ||
278 | keyholder->set_room_id(FindOrAddRoom(map_name, *room_name, std::nullopt)); | ||
279 | keyholder->set_name(keyholder_name); | ||
280 | |||
281 | room_container[keyholder_name] = new_id; | ||
282 | |||
283 | return new_id; | ||
284 | } else { | ||
285 | return it->second; | ||
286 | } | ||
287 | } | ||
288 | |||
249 | uint64_t Container::FindOrAddDoor(std::optional<std::string> map_name, | 289 | uint64_t Container::FindOrAddDoor(std::optional<std::string> map_name, |
250 | std::string door_name, | 290 | std::string door_name, |
251 | std::optional<std::string> map_fallback) { | 291 | std::optional<std::string> map_fallback) { |