/* core/item.cc This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #include "sys/sys.h" #include "core/application.h" #include "core/item.h" namespace core { /* ---- class Item ------------------------------------------------- */ // Note: initializing the timestamp with 1 instead of 0 is a small hack // since cient-side inventory timestamps are initialized at 0, setting // the item timestamp to 0 would prevent the client from updating // the trade window the first time it is opened on a base Item::Item(const Info *info) { item_info = info; item_amount = 0; item_flags = 0; item_id = 0; item_price = info->price(); set_timestamp(game() ? game()->timestamp() : 1); } Item::~Item() { item_info = 0; item_amount = 0; item_flags = 0; item_price = 0; item_id = 0; } void Item::set_info(const Info *info) { item_info = info; } void Item::set_id(const unsigned int id) { item_id = id; } void Item::set_flags(const unsigned int flags) { item_flags = flags; set_timestamp(game() ? game()->timestamp() : 1); } void Item::set_flag(Flags flag) { item_flags |= flag; set_timestamp(game() ? game()->timestamp() : 1); } void Item::unset_flag(Flags flag) { item_flags &= ~flag; set_timestamp(game() ? game()->timestamp() : 1); } void Item::set_amount(const long amount) { item_amount = amount; set_timestamp(game() ? game()->timestamp() : 1); } void Item::inc_amount(const long amount) { item_amount += amount; set_timestamp(game() ? game()->timestamp() : 1); } void Item::dec_amount(const long amount) { item_amount -= amount; set_timestamp(game() ? game()->timestamp() : 1); } void Item::set_price(const long price) { item_price = price; set_timestamp(game() ? game()->timestamp() : 1); } void Item::set_timestamp(const unsigned long timestamp) { item_timestamp = timestamp; } void Item::serialize_server_update(std::ostream & os) const { os << amount() << " " << price() << " " << flags() << " "; } void Item::receive_server_update(std::istream &is) { is >> item_amount; is >> item_price; is >> item_flags; } } // namespace core