1 #include "info-reader/vault-reader.h"
2 #include "info-reader/info-reader-util.h"
3 #include "info-reader/parse-error-types.h"
4 #include "main/angband-headers.h"
5 #include "room/rooms-vault.h"
6 #include "util/string-processor.h"
9 * @brief Vault定義 (VaultDefinitions)のパース関数
14 errr parse_vaults_info(std::string_view buf, angband_header *)
16 static vault_type *v_ptr = nullptr;
17 const auto &tokens = str_split(buf, ':', false, 5);
19 if (tokens[0] == "N") {
21 if (tokens.size() < 3) {
22 return PARSE_ERROR_TOO_FEW_ARGUMENTS;
24 if (tokens[1].size() == 0 || tokens[2].size() == 0) {
25 return PARSE_ERROR_GENERIC;
28 auto i = std::stoi(tokens[1]);
30 return PARSE_ERROR_NON_SEQUENTIAL_RECORDS;
32 if (i >= static_cast<int>(vaults_info.size())) {
33 vaults_info.resize(i + 1);
37 v_ptr = &vaults_info[i];
38 v_ptr->idx = static_cast<int16_t>(i);
39 v_ptr->name = std::string(tokens[2]);
41 return PARSE_ERROR_MISSING_RECORD_HEADER;
42 } else if (tokens[0] == "D") {
44 if (tokens.size() < 2 || tokens[1].size() == 0) {
45 return PARSE_ERROR_TOO_FEW_ARGUMENTS;
48 v_ptr->text.append(buf.substr(2));
49 } else if (tokens[0] == "X") {
50 // X:type:rate:height:width
51 if (tokens.size() < 5) {
52 return PARSE_ERROR_TOO_FEW_ARGUMENTS;
55 info_set_value(v_ptr->typ, tokens[1]);
56 info_set_value(v_ptr->rat, tokens[2]);
57 info_set_value(v_ptr->hgt, tokens[3]);
58 info_set_value(v_ptr->wid, tokens[4]);
60 return PARSE_ERROR_UNDEFINED_DIRECTIVE;
63 return PARSE_ERROR_NONE;