1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
#include "KingSystem/Resource/Actor/resResourceShop.h"
namespace ksys::res {
bool Shop::parse_(u8* data, size_t, sead::Heap* heap) {
mTableNum.init(0, "TableNum", "テーブルの数", &mObj);
addObj(&mObj, "Header");
if (!data)
return true;
applyResParameterArchive(agl::utl::ResParameterArchive{data});
const s32 num_tables = mTableNum.ref();
if (num_tables < 1)
return true;
mTables.allocBufferAssert(num_tables, heap);
const agl::utl::ResParameterArchive archive{data};
const auto root = archive.getRootList();
const auto header_obj = root.getResParameterObj(0);
for (s32 i = 0; i < num_tables; ++i) {
sead::FormatFixedSafeString<64> name;
name.format("Table%02d", i + 1);
mTables[i].name.init("", name, "テーブル名", &mObj);
}
mObj.applyResParameterObj(header_obj);
for (s32 i = 0; i < num_tables; ++i) {
const auto obj = root.getResParameterObj(i + 1);
mTables[i].column_num.init(0, "ColumnNum", "行数", &mTables[i].obj);
addObj(&mTables[i].obj, mTables[i].name.ref());
applyResParameterArchive(agl::utl::ResParameterArchive{data});
mTables[i].obj.applyResParameterObj(obj);
if (mTables[i].column_num.ref() > 0) {
mTables[i].items.allocBufferAssert(mTables[i].column_num.ref(), heap);
}
}
for (s32 i = 0; i < num_tables; ++i) {
parseTable_(i);
}
applyResParameterArchive(agl::utl::ResParameterArchive{data});
return true;
}
void Shop::parseTable_(const s32& table_idx) {
const s32 num = mTables[table_idx].column_num.ref();
for (s32 i = 0; i < num; ++i) {
sead::FormatFixedSafeString<64> name;
name.format("ItemSort%03d", i + 1);
mTables[table_idx].items[i].sort_value.init(0, name, "ソート値", &mTables[table_idx].obj);
sead::FormatFixedSafeString<64> name2;
name2.format("ItemName%03d", i + 1);
mTables[table_idx].items[i].name.init("", name2, "アイテム名", &mTables[table_idx].obj);
sead::FormatFixedSafeString<64> name3;
name3.format("ItemNum%03d", i + 1);
mTables[table_idx].items[i].num_stock.init(0, name3, "販売個数", &mTables[table_idx].obj);
sead::FormatFixedSafeString<64> name4;
name4.format("ItemAdjustPrice%03d", i + 1);
mTables[table_idx].items[i].price_adjustment.init(0, name4, "値段調整値",
&mTables[table_idx].obj);
sead::FormatFixedSafeString<64> name5;
name5.format("ItemLookGetFlg%03d", i + 1);
mTables[table_idx].items[i].demo_flag.init(false, name5, "ゲットフラグを見るか",
&mTables[table_idx].obj);
sead::FormatFixedSafeString<64> name6;
name6.format("ItemAmount%03d", i + 1);
mTables[table_idx].items[i].price.init(0, name6, "価値", &mTables[table_idx].obj);
}
}
s32 Shop::findTableIndex(const sead::SafeString& table_name) const {
if (!mTables.isBufferReady())
return -1;
const s32 num = mTableNum.ref();
for (s32 i = 0; i < num; ++i) {
if (mTables[i].name.ref() == table_name)
return i;
}
return -1;
}
s32 Shop::findTableIndexOrNormal(const sead::SafeString& table_name) const {
if (!mTables.isBufferReady())
return -1;
s32 normal_idx = -1;
const s32 num = mTableNum.ref();
for (s32 i = 0; i < num; ++i) {
if (mTables[i].name.ref() == table_name)
return i;
if (normal_idx < 0 && mTables[i].name.ref() == "Normal")
normal_idx = i;
}
return normal_idx;
}
} // namespace ksys::res
|