From 1fa54edf7853906f58090d0f4098ce888348ff93 Mon Sep 17 00:00:00 2001 From: korenkonder Date: Sun, 5 May 2024 15:26:52 +0300 Subject: [PATCH] Customize Item: Added `get_chara_item` --- src/CRE/customize_item_table.cpp | 34 ++++++++++++++++++++++++++++++++ src/CRE/customize_item_table.hpp | 6 ++++-- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/CRE/customize_item_table.cpp b/src/CRE/customize_item_table.cpp index 7d4c0df9..98fe0680 100644 --- a/src/CRE/customize_item_table.cpp +++ b/src/CRE/customize_item_table.cpp @@ -38,6 +38,7 @@ struct customize_item_data_handler { ~customize_item_data_handler(); void add_all_customize_items(); + void get_chara_item(const std::string& name, chara_index& chara_index, int32_t& item_no); void add_customize_items(); bool get_customize_item(int32_t id, customize_item_data& data); int32_t get_customize_item_obj_id(int32_t id); @@ -118,6 +119,11 @@ void customize_item_data_handler_data_add_all_customize_items() { customize_item_data_handler_data->add_all_customize_items(); } +void customize_item_table_handler_data_get_chara_item( + const std::string& name, chara_index& chara_index, int32_t& item_no) { + customize_item_data_handler_data->get_chara_item(name, chara_index, item_no); +} + bool customize_item_data_handler_data_get_customize_item(int32_t id, customize_item_data& data) { return customize_item_data_handler_data->get_customize_item(id, data); } @@ -308,6 +314,34 @@ void customize_item_data_handler::add_all_customize_items() { add_customize_items(); } +void customize_item_data_handler::get_chara_item( + const std::string& name, chara_index& chara_index, int32_t& item_no) { + size_t pos = name.find('_'); + if (pos < 6) + return; + + ::chara_index _chara_index = CHARA_MAX; + int32_t _item_no = atoi(name.substr(6, pos - 6).c_str()); + if (!_item_no) + return; + + item_no = _item_no; + + std::string chara(name.substr(0, 3)); + if (chara.compare("CMN")) + _chara_index = chara_index_get_from_chara_name(chara.c_str()); + else + for (const auto& i : customize_item_table_handler_data_get_customize_items()) + if (i.first == item_no) { + if (_chara_index == CHARA_MAX) + _chara_index = CHARA_MIKU; + break; + } + + if (_chara_index != CHARA_MAX) + chara_index = _chara_index; +} + void customize_item_data_handler::add_customize_items() { customize_items.clear(); diff --git a/src/CRE/customize_item_table.hpp b/src/CRE/customize_item_table.hpp index 58e9ce2a..37183e89 100644 --- a/src/CRE/customize_item_table.hpp +++ b/src/CRE/customize_item_table.hpp @@ -54,6 +54,8 @@ extern void customize_item_table_handler_data_free(); extern void customize_item_data_handler_data_init(); extern void customize_item_data_handler_data_add_all_customize_items(); -bool customize_item_data_handler_data_get_customize_item(int32_t id, customize_item_data& data); -int32_t customize_item_data_handler_data_get_customize_item_obj_id(int32_t id); +extern void customize_item_table_handler_data_get_chara_item( + const std::string& name, chara_index& chara_index, int32_t& item_no); +extern bool customize_item_data_handler_data_get_customize_item(int32_t id, customize_item_data& data); +extern int32_t customize_item_data_handler_data_get_customize_item_obj_id(int32_t id); extern void customize_item_data_handler_data_free();