|
20 | 20 | #include "item/ID.h" |
21 | 21 | #include "item/Link.h" |
22 | 22 | #include "item/Location.h" |
| 23 | +#include "item/Record.h" |
23 | 24 |
|
24 | 25 | #include <cstdint> |
25 | 26 | #include <cstdio> |
26 | 27 | #include <cstring> |
27 | 28 |
|
28 | 29 | namespace Item::Info { |
29 | 30 |
|
30 | | -using GetItemRecord_t = const uint8_t *(__thiscall *)(void *cache, uint32_t itemID, |
31 | | - const uint64_t *guid, void *callback, |
32 | | - void *userData, bool requestIfMissing); |
33 | | - |
34 | 31 | static const char *PushedOrEmpty(const char *s) { return (s != nullptr && s[0] != 0) ? s : ""; } |
35 | 32 |
|
36 | 33 | static int CurrentLocaleIndex() { return *reinterpret_cast<int *>(Offsets::VAR_LOCALE_INDEX); } |
37 | 34 |
|
38 | | -static const uint8_t *FetchItemRecord(uint32_t itemID) { |
39 | | - auto fn = reinterpret_cast<GetItemRecord_t>(Offsets::FUN_DBCACHE_ITEMSTATS_GET_RECORD); |
40 | | - auto *cache = reinterpret_cast<void *>(Offsets::VAR_ITEMDB_CACHE); |
41 | | - const uint64_t zeroGuid = 0; |
42 | | - return fn(cache, itemID, &zeroGuid, nullptr, nullptr, false); |
43 | | -} |
44 | | - |
45 | 35 | static const char *LookupItemClassName(uint32_t classID) { |
46 | 36 | return PushedOrEmpty(DBC::LocalizedField( |
47 | 37 | Offsets::VAR_ITEMCLASS_RECORDS, Offsets::VAR_ITEMCLASS_COUNT, |
@@ -114,7 +104,7 @@ static int __fastcall Script_GetItemInfoInstant(void *L) { |
114 | 104 |
|
115 | 105 | Game::Lua::PushNumber(L, static_cast<double>(itemID)); |
116 | 106 |
|
117 | | - const uint8_t *record = FetchItemRecord(static_cast<uint32_t>(itemID)); |
| 107 | + const uint8_t *record = Item::PeekRecord(static_cast<uint32_t>(itemID)); |
118 | 108 | if (record == nullptr) { |
119 | 109 | for (int i = 0; i < 6; ++i) |
120 | 110 | Game::Lua::PushNil(L); |
@@ -150,7 +140,7 @@ static int __fastcall Script_GetItemInfoInstant(void *L) { |
150 | 140 | static int PushIconForItemID(void *L, int itemID) { |
151 | 141 | if (itemID <= 0) |
152 | 142 | return 0; |
153 | | - const uint8_t *record = FetchItemRecord(static_cast<uint32_t>(itemID)); |
| 143 | + const uint8_t *record = Item::PeekRecord(static_cast<uint32_t>(itemID)); |
154 | 144 | if (record == nullptr) |
155 | 145 | return 0; |
156 | 146 | const uint32_t displayInfoID = *reinterpret_cast<const uint32_t *>( |
@@ -229,7 +219,7 @@ static int __fastcall Script_C_Item_GetItemFamily(void *L) { |
229 | 219 | const int itemID = Item::Arg::ResolveItemID(L, 1); |
230 | 220 | if (itemID <= 0) |
231 | 221 | return 0; |
232 | | - const uint8_t *record = FetchItemRecord(static_cast<uint32_t>(itemID)); |
| 222 | + const uint8_t *record = Item::PeekRecord(static_cast<uint32_t>(itemID)); |
233 | 223 | if (record == nullptr) { |
234 | 224 | Item::Data::WarmCache(static_cast<uint32_t>(itemID)); |
235 | 225 | return 0; |
@@ -264,7 +254,7 @@ static int __fastcall Script_C_Item_GetItemInfo(void *L) { |
264 | 254 | if (itemID <= 0) |
265 | 255 | return 0; |
266 | 256 |
|
267 | | - const uint8_t *record = FetchItemRecord(static_cast<uint32_t>(itemID)); |
| 257 | + const uint8_t *record = Item::PeekRecord(static_cast<uint32_t>(itemID)); |
268 | 258 | if (record == nullptr) { |
269 | 259 | Item::Data::WarmCache(static_cast<uint32_t>(itemID)); |
270 | 260 | return 0; // nil this call; GET_ITEM_INFO_RECEIVED fires when ready |
|
0 commit comments