Horizon Official Technical Documentation
Horizon::Zone::Assets::Storage Class Reference

#include <Storage.hpp>

Public Member Functions

 Storage (std::shared_ptr< Horizon::Zone::Units::Player > player, int32_t storage_id, std::string name, uint32_t max_storage)
 
virtual ~Storage ()
 
int32_t load ()
 
int32_t save ()
 
int16_t get_free_index ()
 
int32_t get_storage_id ()
 
std::string name ()
 
int32_t max_storage ()
 
std::shared_ptr< Horizon::Zone::Units::Playerplayer ()
 
storage_add_item_result_type add_item (std::shared_ptr< item_entry_data > item, int amount)
 
storage_remove_item_result_type remove_item (int32_t index, int amount)
 
std::shared_ptr< item_entry_dataget_item (int32_t storage_index)
 
storage_add_item_result_type add_item_from_inventory (int16_t inventory_index, int amount)
 
storage_to_inventory_result_type add_item_to_inventory (int storage_index, int amount)
 
void notify_all ()
 
void notify_normal ()
 
void notify_equips ()
 

Private Types

typedef std::vector< std::shared_ptr< item_entry_data > > storage_type
 

Private Attributes

int32_t _storage_id { 0 }
 
std::string _name {""}
 
int32_t _max_storage { 0 }
 
std::weak_ptr< Horizon::Zone::Units::Player_player
 
storage_type _storage_items
 
storage_type _saved_storage_items
 

Member Typedef Documentation

◆ storage_type

typedef std::vector<std::shared_ptr<item_entry_data> > Horizon::Zone::Assets::Storage::storage_type
private

Constructor & Destructor Documentation

◆ Storage()

Storage::Storage ( std::shared_ptr< Horizon::Zone::Units::Player player,
int32_t  storage_id,
std::string  name,
uint32_t  max_storage 
)
44{
45}
int32_t _max_storage
Definition: Storage.hpp:100
std::string _name
Definition: Storage.hpp:99
std::weak_ptr< Horizon::Zone::Units::Player > _player
Definition: Storage.hpp:101
int32_t max_storage()
Definition: Storage.hpp:82
std::shared_ptr< Horizon::Zone::Units::Player > player()
Definition: Storage.hpp:83
int32_t _storage_id
Definition: Storage.hpp:98
std::string name()
Definition: Storage.hpp:81

◆ ~Storage()

Storage::~Storage ( )
virtual
48{
49}

Member Function Documentation

◆ add_item()

Horizon::Zone::storage_add_item_result_type Storage::add_item ( std::shared_ptr< item_entry_data item,
int  amount 
)
85{
86 if (amount == 0)
88
89 // Check if item is stackable
90 if (item->is_stackable()) {
91 // Check if item exists in inventory.
92 auto storitem = std::find_if(_storage_items.begin(), _storage_items.end(),
93 [&item] (std::shared_ptr<item_entry_data> storeit) {
94 if (storeit == nullptr)
95 return false;
96 return (storeit->amount < MAX_STORAGE_STACK_LIMIT && *storeit == *item);
97 }
98 );
99 // If item was found in inventory...
100 if (storitem != _storage_items.end()) {
101 std::shared_ptr<item_entry_data> store_item = *storitem;
102 // Check if amount exeeds stack size.
103 if (store_item->amount + amount > MAX_STORAGE_STACK_LIMIT) {
104 // Add appropriately
105 int left_amt = store_item->amount - MAX_STORAGE_STACK_LIMIT;
106 store_item->amount += left_amt;
107 item->amount -= left_amt;
108 if (amount - left_amt > 0)
109 add_item_from_inventory(item->index.inventory, amount - left_amt);
111 } else {
112 store_item->amount += amount;
113 }
114 player()->get_session()->clif()->notify_storage_add_item(store_item, amount);
115 } else {
116 int16_t index = get_free_index();
117
118 std::shared_ptr<item_entry_data> item_new_stack = std::make_shared<item_entry_data>(*item);
119 item_new_stack->amount = amount;
120 item_new_stack->storage_type = ITEM_STORE_STORAGE;
121 item_new_stack->index.storage = index + 1;
122 _storage_items[index] = item_new_stack;
123 player()->get_session()->clif()->notify_storage_add_item(item_new_stack, amount);
124 }
125 } else {
126 int16_t index = get_free_index();
127
128 item->amount = 1;
129 item->storage_type = ITEM_STORE_STORAGE;
130 item->index.storage = index + 1;
131 _storage_items[index] = item;
132 player()->get_session()->clif()->notify_storage_add_item(item, 1);
133 }
134
136}
#define MAX_STORAGE_STACK_LIMIT
Definition: ItemDefinitions.hpp:67
@ ITEM_STORE_STORAGE
Definition: ItemDefinitions.hpp:406
int16_t get_free_index()
Definition: Storage.cpp:51
storage_type _storage_items
Definition: Storage.hpp:102
storage_add_item_result_type add_item_from_inventory(int16_t inventory_index, int amount)
Definition: Storage.cpp:62
@ STORAGE_ADD_SUCCESS
Definition: Storage.hpp:50
@ STORAGE_ADD_INVALID
Success.
Definition: Storage.hpp:51

References _storage_items, add_item_from_inventory(), get_free_index(), ITEM_STORE_STORAGE, MAX_STORAGE_STACK_LIMIT, player(), Horizon::Zone::STORAGE_ADD_INVALID, and Horizon::Zone::STORAGE_ADD_SUCCESS.

Referenced by add_item_from_inventory().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ add_item_from_inventory()

Horizon::Zone::storage_add_item_result_type Storage::add_item_from_inventory ( int16_t  inventory_index,
int  amount 
)
63{
64 std::shared_ptr<item_entry_data> item = player()->inventory()->get_item(inventory_index);
65
66 if (item == nullptr)
68
69 if (amount == 0)
71
72 if (_storage_items.size() >= _max_storage)
74
75 if (item->amount > MAX_STORAGE_STACK_LIMIT)
77
79 player()->inventory()->remove_item(inventory_index, amount, item_deletion_reason_type::ITEM_DEL_TOSTORAGE);
80
82}
@ ITEM_DEL_TOSTORAGE
Material changed.
Definition: ItemDefinitions.hpp:314
storage_add_item_result_type add_item(std::shared_ptr< item_entry_data > item, int amount)
Definition: Storage.cpp:84
@ STORAGE_ADD_OVER_STACK_LIMIT
Max amount reached.
Definition: Storage.hpp:55
@ STORAGE_ADD_OVER_QUANTITY
No free place found.
Definition: Storage.hpp:54

References _max_storage, _storage_items, add_item(), ITEM_DEL_TOSTORAGE, MAX_STORAGE_STACK_LIMIT, player(), Horizon::Zone::STORAGE_ADD_INVALID, Horizon::Zone::STORAGE_ADD_OVER_QUANTITY, Horizon::Zone::STORAGE_ADD_OVER_STACK_LIMIT, and Horizon::Zone::STORAGE_ADD_SUCCESS.

Referenced by add_item().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ add_item_to_inventory()

Horizon::Zone::storage_to_inventory_result_type Storage::add_item_to_inventory ( int  storage_index,
int  amount 
)
139{
140 std::shared_ptr<item_entry_data> item = get_item(storage_index);
141
142 if (item == nullptr)
144
145 if (amount > MAX_STORAGE_STACK_LIMIT)
147
149 player()->get_session()->clif()->notify_storage_remove_item(storage_index, amount);
150 else
152
153 player()->inventory()->add_item(item, amount);
154
156}
storage_remove_item_result_type remove_item(int32_t index, int amount)
Definition: Storage.cpp:170
std::shared_ptr< item_entry_data > get_item(int32_t storage_index)
Definition: Storage.cpp:157
@ STORAGE_REMOVE_SUCCESS
Definition: Storage.hpp:59
@ STORAGE_TO_INVENTORY_INVALID
Success.
Definition: Storage.hpp:42
@ STORAGE_TO_INVENTORY_OVER_STACK_LIMIT
Max amount reached.
Definition: Storage.hpp:46
@ STORAGE_TO_INVENTORY_SUCCESS
Definition: Storage.hpp:41

References get_item(), MAX_STORAGE_STACK_LIMIT, player(), remove_item(), Horizon::Zone::STORAGE_REMOVE_SUCCESS, Horizon::Zone::STORAGE_TO_INVENTORY_INVALID, Horizon::Zone::STORAGE_TO_INVENTORY_OVER_STACK_LIMIT, and Horizon::Zone::STORAGE_TO_INVENTORY_SUCCESS.

+ Here is the call graph for this function:

◆ get_free_index()

int16_t Storage::get_free_index ( )
52{
53 for (auto i = _storage_items.begin(); i != _storage_items.end(); i++) {
54 if (*i == nullptr)
55 return std::distance(_storage_items.begin(), i);
56 }
57
58 _storage_items.resize(_storage_items.size() + 1);
59
60 return _storage_items.size() - 1;
61}

References _storage_items.

Referenced by add_item().

+ Here is the caller graph for this function:

◆ get_item()

std::shared_ptr< item_entry_data > Storage::get_item ( int32_t  storage_index)
158{
159 if (storage_index - 1 < 0)
160 return nullptr;
161
162 if (_storage_items.size() - 1 < storage_index - 1) {
163 HLog(error) << "Storage::get_item: Attempted to get item from storage index " << storage_index << " but storage size is " << _storage_items.size();
164 return nullptr;
165 }
166
167 return _storage_items[storage_index - 1];
168}
#define HLog(type)
Definition: Logger.hpp:122

References _storage_items, and HLog.

Referenced by add_item_to_inventory(), and remove_item().

+ Here is the caller graph for this function:

◆ get_storage_id()

int32_t Horizon::Zone::Assets::Storage::get_storage_id ( )
inline
80{ return _storage_id; }

References _storage_id.

◆ load()

int32_t Storage::load ( )
320{
321 std::shared_ptr<boost::mysql::tcp_ssl_connection> conn = sZone->get_database_connection();
322
323 try {
324 boost::mysql::statement stmt = conn->prepare_statement("SELECT `item_id`, `amount`, `equip_location_mask`, `refine_level`, `slot_item_id_0`,"
325 "`slot_item_id_1`, `slot_item_id_2`, `slot_item_id_3`, `hire_expire_date`, `element_type`, `opt_idx0`, `opt_val0`, `opt_idx1`, `opt_val1`,"
326 "`opt_idx2`, `opt_val2`, `opt_idx3`, `opt_val3`, `opt_idx4`, `opt_val4`, `is_identified`, `is_broken`, `is_favorite`, `bind_type`, `unique_id`"
327 " FROM `storage` WHERE `account_id` = ? AND `storage_id` = ?");
328 auto b1 = stmt.bind(player()->account()._account_id, _storage_id);
329 boost::mysql::results results;
330 conn->execute(b1, results);
331
332 if (_storage_items.size() != 0) {
333 HLog(warning) << "Attempt to synchronize the saved storage, which should be empty at the time of load or re-load, size: " << _storage_items.size();
334 return 0;
335 }
336
337 int storage_index = 1;
338 for (auto r : results.rows()) {
340
341 std::shared_ptr<const item_config_data> d = ItemDB->get_item_by_id(r[0].as_uint64());
342
344 i.index.storage = storage_index++;
345 i.item_id = r[0].as_uint64();
346 i.type = d->type;
347 i.amount = r[1].as_uint64();
348 i.current_equip_location_mask = r[2].as_uint64();
349 i.actual_equip_location_mask = d->equip_location_mask;
350 i.refine_level = r[3].as_uint64();
351 i.config = d;
352
353 i.slot_item_id[0] = r[4].as_int64();
354 i.slot_item_id[1] = r[5].as_int64();
355 i.slot_item_id[2] = r[6].as_int64();
356 i.slot_item_id[3] = r[7].as_int64();
357
358 i.hire_expire_date = r[8].as_uint64();
359 i.sprite_id = d->sprite_id;
360
361 i.ele_type = (element_type)(int)r[9].as_uint64();
362
363 if (r[10].as_uint64()) {
364 i.option_data[0].set_index(r[10].as_uint64());
365 i.option_data[0].set_value(r[11].as_int64());
366 i.option_count = 1;
367 }
368
369 if (r[12].as_uint64()) {
370 i.option_data[1].set_index(r[12].as_uint64());
371 i.option_data[1].set_value(r[13].as_int64());
372 i.option_count = 2;
373 }
374
375 if (r[14].as_uint64()) {
376 i.option_data[2].set_index(r[14].as_uint64());
377 i.option_data[2].set_value(r[15].as_int64());
378 i.option_count = 3;
379 }
380
381 if (r[16].as_uint64()) {
382 i.option_data[3].set_index(r[16].as_uint64());
383 i.option_data[3].set_value(r[17].as_int64());
384 i.option_count = 4;
385 }
386
387 if (r[18].as_uint64()) {
388 i.option_data[4].set_index(r[18].as_uint64());
389 i.option_data[4].set_value(r[19].as_int64());
390 i.option_count = 5;
391 }
392
393 i.info.is_identified = r[20].as_int64();
394 i.info.is_broken = r[21].as_uint64();
395 i.info.is_favorite = r[22].as_uint64();
396
397 i.bind_type = (item_bind_type)(int)r[23].as_uint64(); // int16_t
398 i.unique_id = r[24].as_uint64();
399
400 std::shared_ptr<item_entry_data> item = std::make_shared<item_entry_data>(i);
401
402 _saved_storage_items.push_back(item);
403 _storage_items.push_back(item);
404 }
405 }
406 catch (boost::mysql::error_with_diagnostics &error) {
407 HLog(error) << "Storage::load:" << error.what();
408 return false;
409 }
410 catch (std::exception& error) {
411 HLog(error) << "Storage::load:" << error.what();
412 return false;
413 }
414
415 HLog(info) << "Loaded Storage (" << _name << ") for (Account ID: " << player()->account()._account_id << ") with " << _storage_items.size() << " items.";
416
417 return _storage_items.size();
418}
#define ItemDB
Definition: ItemDB.hpp:119
item_bind_type
Definition: ItemDefinitions.hpp:286
element_type
Definition: UnitDefinitions.hpp:970
#define sZone
Definition: Zone.hpp:247
storage_type _saved_storage_items
Definition: Storage.hpp:102
unsigned is_favorite
Definition: ItemDefinitions.hpp:568
unsigned is_broken
Definition: ItemDefinitions.hpp:567
unsigned is_identified
Definition: ItemDefinitions.hpp:566
void set_index(int idx)
Definition: ItemDefinitions.hpp:555
void set_value(int val)
Definition: ItemDefinitions.hpp:558
Structure used to store and convey item data in the state machine and in communication with the clien...
Definition: ItemDefinitions.hpp:414
uint32_t actual_equip_location_mask
Definition: ItemDefinitions.hpp:539
uint16_t sprite_id
Definition: ItemDefinitions.hpp:549
uint64_t unique_id
Definition: ItemDefinitions.hpp:572
struct item_entry_data::options option_data[MAX_ITEM_OPTIONS]
uint8_t option_count
Definition: ItemDefinitions.hpp:552
uint32_t current_equip_location_mask
Definition: ItemDefinitions.hpp:538
uint16_t storage
Definition: ItemDefinitions.hpp:525
element_type ele_type
Definition: ItemDefinitions.hpp:551
item_bind_type bind_type
Definition: ItemDefinitions.hpp:571
uint32_t slot_item_id[MAX_ITEM_SLOTS]
Definition: ItemDefinitions.hpp:544
item_type type
Definition: ItemDefinitions.hpp:536
uint32_t item_id
Definition: ItemDefinitions.hpp:532
union item_entry_data::@131 index
uint32_t hire_expire_date
Definition: ItemDefinitions.hpp:548
std::shared_ptr< const item_config_data > config
Definition: ItemDefinitions.hpp:574
uint8_t refine_level
Definition: ItemDefinitions.hpp:540
struct item_entry_data::item_entry_info info
uint16_t amount
Definition: ItemDefinitions.hpp:537
item_storage_type storage_type
Definition: ItemDefinitions.hpp:528

References _name, _saved_storage_items, _storage_id, _storage_items, item_entry_data::actual_equip_location_mask, item_entry_data::amount, item_entry_data::bind_type, item_entry_data::config, item_entry_data::current_equip_location_mask, item_entry_data::ele_type, item_entry_data::hire_expire_date, HLog, item_entry_data::index, item_entry_data::info, item_entry_data::item_entry_info::is_broken, item_entry_data::item_entry_info::is_favorite, item_entry_data::item_entry_info::is_identified, item_entry_data::item_id, ITEM_STORE_STORAGE, ItemDB, item_entry_data::option_count, item_entry_data::option_data, player(), item_entry_data::refine_level, item_entry_data::options::set_index(), item_entry_data::options::set_value(), item_entry_data::slot_item_id, item_entry_data::sprite_id, item_entry_data::storage, item_entry_data::storage_type, sZone, item_entry_data::type, and item_entry_data::unique_id.

+ Here is the call graph for this function:

◆ max_storage()

int32_t Horizon::Zone::Assets::Storage::max_storage ( )
inline
82{ return _max_storage; }

References _max_storage.

◆ name()

std::string Horizon::Zone::Assets::Storage::name ( )
inline
81{ return _name; }

References _name.

◆ notify_all()

void Storage::notify_all ( )
192{
193 player()->get_session()->clif()->notify_inventory_start(INVTYPE_STORAGE, _name);
194 if (_storage_items.size()) {
197 }
198 player()->get_session()->clif()->notify_storage_size(_storage_items.size(), _max_storage);
199 player()->get_session()->clif()->notify_inventory_end(INVTYPE_STORAGE);
200 player()->set_current_storage_id(_storage_id);
201}
@ INVTYPE_STORAGE
Definition: ClientDefinitions.hpp:908
void notify_normal()
Definition: Storage.cpp:203
void notify_equips()
Definition: Storage.cpp:217

References _max_storage, _name, _storage_id, _storage_items, INVTYPE_STORAGE, notify_equips(), notify_normal(), and player().

Referenced by Horizon::Zone::PlayerComponent::sync_data_types().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ notify_equips()

void Storage::notify_equips ( )
218{
219 std::vector<std::shared_ptr<const item_entry_data>> equipments;
220
221 for (auto eit = _storage_items.begin(); eit != _storage_items.end(); eit++) {
222 if ((*eit) == nullptr)
223 continue;
224 if ((*eit)->is_equipment())
225 equipments.push_back(*eit);
226 }
227
228 player()->get_session()->clif()->notify_storage_equip_items(_name, equipments);
229}

References _name, _storage_items, and player().

Referenced by notify_all().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ notify_normal()

void Storage::notify_normal ( )
204{
205 std::vector<std::shared_ptr<const item_entry_data>> normal_items;
206
207 for (auto nit = _storage_items.begin(); nit != _storage_items.end(); nit++) {
208 if ((*nit) == nullptr)
209 continue;
210 if ((*nit)->is_equipment() == false)
211 normal_items.push_back(*nit);
212 }
213
214 player()->get_session()->clif()->notify_storage_normal_items(_name, normal_items);
215}

References _name, _storage_items, and player().

Referenced by notify_all().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ player()

std::shared_ptr< Horizon::Zone::Units::Player > Horizon::Zone::Assets::Storage::player ( )
inline
83{ return _player.lock(); }

References _player.

Referenced by add_item(), add_item_from_inventory(), add_item_to_inventory(), load(), notify_all(), notify_equips(), notify_normal(), and save().

+ Here is the caller graph for this function:

◆ remove_item()

Horizon::Zone::storage_remove_item_result_type Storage::remove_item ( int32_t  index,
int  amount 
)
171{
172 std::shared_ptr<item_entry_data> item = get_item(storage_index);
173
174 if (item == nullptr)
176
177 if (item->amount < amount)
179
180 if (amount > item->amount)
182
183 item->amount -= amount;
184
185 if (item->amount == 0)
186 _storage_items[storage_index - 1] = nullptr;
187
189}
@ STORAGE_REMOVE_INVALID
Success.
Definition: Storage.hpp:60

References _storage_items, get_item(), Horizon::Zone::STORAGE_REMOVE_INVALID, and Horizon::Zone::STORAGE_REMOVE_SUCCESS.

Referenced by add_item_to_inventory().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ save()

int32_t Storage::save ( )
232{
233 int32_t changes = 0;
234
235 _saved_storage_items.clear();
236
237 std::copy(_storage_items.begin(), _storage_items.end(), std::inserter(_saved_storage_items, _saved_storage_items.end()));
238
239 std::shared_ptr<boost::mysql::tcp_ssl_connection> conn = sZone->get_database_connection();
240
241 try {
242 boost::mysql::statement stmt = conn->prepare_statement("DELETE FROM `storage` WHERE `account_id` = ? AND `storage_id` = ?");
243 auto b1 = stmt.bind(player()->account()._account_id, _storage_id);
244 boost::mysql::results results;
245 conn->execute(b1, results);
246
247 boost::format fmt_ctx = boost::format("INSERT INTO `storage` (`account_id`, `storage_id`, `item_id`, `amount`, `equip_location_mask`,"
248 "`is_identified`, `refine_level`, `element_type`, `slot_item_id_0`, `slot_item_id_1`, `slot_item_id_2`, `slot_item_id_3`, `opt_idx0`, `opt_val0`,"
249 "`opt_idx1`, `opt_val1`, `opt_idx2`, `opt_val2`, `opt_idx3`, `opt_val3`, `opt_idx4`, `opt_val4`, `hire_expire_date`, `is_favorite`, `is_broken`, `bind_type`, `unique_id`"
250 "VALUES ");
251
252 int count = 0;
253 for (auto mit_i = _saved_storage_items.begin(); mit_i != _saved_storage_items.end(); mit_i++) {
254 std::shared_ptr<const item_entry_data> mit = *mit_i;
255
256 if (mit == nullptr)
257 continue;
258
259 if (count != 0) {
260 std::string str = fmt_ctx.str();
261 fmt_ctx = boost::format(str.append(", "));
262 }
263
264 boost::format new_fmt = boost::format("(%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%)")
265 % player()->account()._account_id
266 % (int)_storage_id
267 % (int)mit->item_id
268 % (int)mit->amount
269 % (int)mit->current_equip_location_mask
270 % (int)mit->info.is_identified
271 % (int)mit->refine_level
272 % (int)mit->ele_type
273 % (int)mit->slot_item_id[0]
274 % (int)mit->slot_item_id[1]
275 % (int)mit->slot_item_id[2]
276 % (int)mit->slot_item_id[3]
277 % (int)mit->option_data[0].get_index()
278 % (int)mit->option_data[0].get_value()
279 % (int)mit->option_data[1].get_index()
280 % (int)mit->option_data[1].get_value()
281 % (int)mit->option_data[2].get_index()
282 % (int)mit->option_data[2].get_value()
283 % (int)mit->option_data[3].get_index()
284 % (int)mit->option_data[3].get_value()
285 % (int)mit->option_data[4].get_index()
286 % (int)mit->option_data[4].get_value()
287 % (int)mit->hire_expire_date
288 % (int)mit->info.is_favorite
289 % (int)mit->info.is_broken
290 % (int)mit->bind_type
291 % (int64_t)mit->unique_id;
292
293 std::string str_str = fmt_ctx.str() + new_fmt.str();
294 fmt_ctx = boost::format(str_str);
295 count++;
296 }
297
298 if (count) {
299 boost::mysql::results results;
300 conn->execute(fmt_ctx.str(), results);
301 }
302
303 changes = count;
304 }
305 catch (boost::mysql::error_with_diagnostics &error) {
306 HLog(error) << "Storage::save:" << error.what();
307 return false;
308 }
309 catch (std::exception& error) {
310 HLog(error) << "Storage::save:" << error.what();
311 return false;
312 }
313
314 HLog(info) << "Saved Storage (" << _name << ") for (Account ID: " << player()->account()._account_id << ") with " << changes << " changes.";
315
316 return changes;
317}
size_t count(GridTypeListContainer< SPECIFIC_TYPE > const &elements, SPECIFIC_TYPE *)
Definition: GridReferenceContainer.hpp:100

References _name, _saved_storage_items, _storage_id, _storage_items, GridTypeListIterator::count(), HLog, player(), and sZone.

+ Here is the call graph for this function:

Member Data Documentation

◆ _max_storage

int32_t Horizon::Zone::Assets::Storage::_max_storage { 0 }
private

◆ _name

std::string Horizon::Zone::Assets::Storage::_name {""}
private

◆ _player

std::weak_ptr<Horizon::Zone::Units::Player> Horizon::Zone::Assets::Storage::_player
private

Referenced by player().

◆ _saved_storage_items

storage_type Horizon::Zone::Assets::Storage::_saved_storage_items
private

Referenced by load(), and save().

◆ _storage_id

int32_t Horizon::Zone::Assets::Storage::_storage_id { 0 }
private

Referenced by get_storage_id(), load(), notify_all(), and save().

◆ _storage_items

storage_type Horizon::Zone::Assets::Storage::_storage_items
private

The documentation for this class was generated from the following files: