Otclient 1.0  14/8/2020
item.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010-2020 OTClient <https://github.com/edubart/otclient>
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20  * THE SOFTWARE.
21  */
22 
23 #ifndef ITEM_H
24 #define ITEM_H
25 
26 #include <framework/global.h>
27 
28 #include "effect.h"
29 #include "itemtype.h"
30 #include "thing.h"
31 
33 {
34  ATTR_END = 0,
35  //ATTR_DESCRIPTION = 1,
36  //ATTR_EXT_FILE = 2,
40  ATTR_TEXT = 6,
41  ATTR_DESC = 7,
43  ATTR_ITEM = 9,
45  //ATTR_EXT_SPAWN_FILE = 11,
47  //ATTR_EXT_HOUSE_FILE = 13,
49  ATTR_COUNT = 15,
58  ATTR_NAME = 30,
64  ATTR_ARMOR = 37,
72 };
73 
74 // @bindclass
75 #pragma pack(push,1) // disable memory alignment
76 class Item : public Thing
77 {
78 public:
79  Item();
80  virtual ~Item() {}
81 
82  static ItemPtr create(int id);
83  static ItemPtr createFromOtb(int id);
84 
85  void draw(const Point& dest, float scaleFactor, bool animate, int redrawFlag = Otc::ReDrawThing, LightView* lightView = nullptr) override;
86 
87  void setId(uint32 id) override;
88  void setOtbId(uint16 id);
89  void setCountOrSubType(int value) { m_countOrSubType = value; }
90  void setCount(int count) { m_countOrSubType = count; }
91  void setSubType(int subType) { m_countOrSubType = subType; }
92  void setColor(const Color& c) { m_color = c; }
93 
94  int getCountOrSubType() { return m_countOrSubType; }
95  int getSubType();
96  int getCount();
97  uint32 getId() override { return m_clientId; }
98  uint16 getClientId() { return m_clientId; }
99  uint16 getServerId() { return m_serverId; }
100  std::string getName();
101  bool isValid();
102 
103  void unserializeItem(const BinaryTreePtr& in);
104  void serializeItem(const OutputBinaryTreePtr& out);
105 
106  void setDepotId(uint16 depotId) { m_attribs.set(ATTR_DEPOT_ID, depotId); }
107  uint16 getDepotId() { return m_attribs.get<uint16>(ATTR_DEPOT_ID); }
108 
109  void setDoorId(uint8 doorId) { m_attribs.set(ATTR_HOUSEDOORID, doorId); }
110  uint8 getDoorId() { return m_attribs.get<uint8>(ATTR_HOUSEDOORID); }
111 
112  uint16 getUniqueId() { return m_attribs.get<uint16>(ATTR_ACTION_ID); }
113  uint16 getActionId() { return m_attribs.get<uint16>(ATTR_UNIQUE_ID); }
114  void setActionId(uint16 actionId) { m_attribs.set(ATTR_ACTION_ID, actionId); }
115  void setUniqueId(uint16 uniqueId) { m_attribs.set(ATTR_UNIQUE_ID, uniqueId); }
116 
117  std::string getText() { return m_attribs.get<std::string>(ATTR_TEXT); }
118  std::string getDescription() { return m_attribs.get<std::string>(ATTR_DESC); }
119  void setDescription(const std::string& desc) { m_attribs.set(ATTR_DESC, desc); }
120  void setText(const std::string& txt) { m_attribs.set(ATTR_TEXT, txt); }
121 
123  void setTeleportDestination(const Position& pos) { m_attribs.set(ATTR_TELE_DEST, pos); }
124 
125  void setAsync(bool enable) { m_async = enable; }
126 
127  bool isHouseDoor() { return m_attribs.has(ATTR_HOUSEDOORID); }
128  bool isDepot() { return m_attribs.has(ATTR_DEPOT_ID); }
129  bool isContainer() override { return m_attribs.has(ATTR_CONTAINER_ITEMS); }
130  bool isDoor() { return m_attribs.has(ATTR_HOUSEDOORID); }
131  bool isTeleport() { return m_attribs.has(ATTR_TELE_DEST); }
132 
133  ItemPtr clone();
134  ItemPtr asItem() { return static_self_cast<Item>(); }
135  bool isItem() override { return true; }
136 
137  ItemVector getContainerItems() { return m_containerItems; }
138  ItemPtr getContainerItem(int slot) { return m_containerItems[slot]; }
139  void addContainerItemIndexed(const ItemPtr& i, int slot) { m_containerItems[slot] = i; }
140  void addContainerItem(const ItemPtr& i) { m_containerItems.push_back(i); }
141  void removeContainerItem(int slot) { m_containerItems[slot] = nullptr; }
142  void clearContainerItems() { m_containerItems.clear(); }
143 
144  void calculatePatterns(int& xPattern, int& yPattern, int& zPattern);
145  int calculateAnimationPhase(bool animate);
146  int getExactSize(int layer = 0, int xPattern = 0, int yPattern = 0, int zPattern = 0, int animationPhase = 0) override;
147 
148  const ThingTypePtr& getThingType() override;
149  ThingType* rawGetThingType() override;
150 
151  void canDraw(bool canDraw) { m_canDraw = canDraw; }
152  bool canDraw() const { return m_canDraw; }
153 
154  void startListenerPainter();
155 
156 private:
157  uint16 m_clientId;
158  uint16 m_serverId;
159  uint8 m_phase;
160  uint8 m_countOrSubType;
161 
162  Color m_color;
163 
164  bool m_canDraw;
165  bool m_async;
166 
167  ticks_t m_lastPhase;
168 
170  ItemVector m_containerItems;
171 };
172 
173 #pragma pack(pop)
174 
175 #endif
Item::setDescription
void setDescription(const std::string &desc)
Definition: item.h:119
Item::Item
Item()
Definition: item.cpp:40
ATTR_CHARGES
@ ATTR_CHARGES
Definition: item.h:56
Item::setAsync
void setAsync(bool enable)
Definition: item.h:125
Item::asItem
ItemPtr asItem()
Definition: item.h:134
Item::serializeItem
void serializeItem(const OutputBinaryTreePtr &out)
Definition: item.cpp:189
stdext::packed_storage::get
T get(Key id) const
Definition: packed_storage.h:80
ATTR_ARMOR
@ ATTR_ARMOR
Definition: item.h:64
Color
Definition: color.h:32
ATTR_CONTAINER_ITEMS
@ ATTR_CONTAINER_ITEMS
Definition: item.h:57
ATTR_ARTICLE
@ ATTR_ARTICLE
Definition: item.h:68
Item::canDraw
void canDraw(bool canDraw)
Definition: item.h:151
ATTR_TEXT
@ ATTR_TEXT
Definition: item.h:40
ATTR_SLEEPSTART
@ ATTR_SLEEPSTART
Definition: item.h:55
Item::setCountOrSubType
void setCountOrSubType(int value)
Definition: item.h:89
Item::setColor
void setColor(const Color &c)
Definition: item.h:92
Item::getId
uint32 getId() override
Definition: item.h:97
ATTR_SCRIPTPROTECTED
@ ATTR_SCRIPTPROTECTED
Definition: item.h:69
ATTR_ATTACK
@ ATTR_ATTACK
Definition: item.h:60
uint32
uint32_t uint32
Definition: types.h:35
Item::setSubType
void setSubType(int subType)
Definition: item.h:91
ATTR_COUNT
@ ATTR_COUNT
Definition: item.h:49
ATTR_UNIQUE_ID
@ ATTR_UNIQUE_ID
Definition: item.h:39
ATTR_ACTION_ID
@ ATTR_ACTION_ID
Definition: item.h:38
Item::getContainerItem
ItemPtr getContainerItem(int slot)
Definition: item.h:138
Item::unserializeItem
void unserializeItem(const BinaryTreePtr &in)
Definition: item.cpp:122
Item::clearContainerItems
void clearContainerItems()
Definition: item.h:142
ticks_t
int64 ticks_t
Definition: types.h:43
Item::setDepotId
void setDepotId(uint16 depotId)
Definition: item.h:106
Item::getThingType
const ThingTypePtr & getThingType() override
Definition: item.cpp:410
ATTR_DURATION
@ ATTR_DURATION
Definition: item.h:50
ATTR_TELE_DEST
@ ATTR_TELE_DEST
Definition: item.h:42
Otc::ReDrawThing
@ ReDrawThing
Definition: const.h:56
Item::addContainerItemIndexed
void addContainerItemIndexed(const ItemPtr &i, int slot)
Definition: item.h:139
Item::draw
void draw(const Point &dest, float scaleFactor, bool animate, int redrawFlag=Otc::ReDrawThing, LightView *lightView=nullptr) override
Definition: item.cpp:72
Item::setUniqueId
void setUniqueId(uint16 uniqueId)
Definition: item.h:115
Item::getContainerItems
ItemVector getContainerItems()
Definition: item.h:137
Item::canDraw
bool canDraw() const
Definition: item.h:152
Item::setOtbId
void setOtbId(uint16 id)
Definition: item.cpp:104
Thing
Definition: thing.h:33
Item::getExactSize
int getExactSize(int layer=0, int xPattern=0, int yPattern=0, int zPattern=0, int animationPhase=0) override
Definition: item.cpp:395
Item::getUniqueId
uint16 getUniqueId()
Definition: item.h:112
LightView
Definition: lightview.h:37
ATTR_PLURALNAME
@ ATTR_PLURALNAME
Definition: item.h:59
ATTR_DECAYING_STATE
@ ATTR_DECAYING_STATE
Definition: item.h:51
ATTR_EXTRAATTACK
@ ATTR_EXTRAATTACK
Definition: item.h:61
uint16
uint16_t uint16
Definition: types.h:36
Item::rawGetThingType
ThingType * rawGetThingType() override
Definition: item.cpp:415
Item::calculatePatterns
void calculatePatterns(int &xPattern, int &yPattern, int &zPattern)
Definition: item.cpp:267
Item::getName
std::string getName()
Definition: item.cpp:67
Item::getDescription
std::string getDescription()
Definition: item.h:118
Item::getTeleportDestination
Position getTeleportDestination()
Definition: item.h:122
Item::setTeleportDestination
void setTeleportDestination(const Position &pos)
Definition: item.h:123
Item::isValid
bool isValid()
Definition: item.cpp:117
Item::isHouseDoor
bool isHouseDoor()
Definition: item.h:127
ATTR_RUNE_CHARGES
@ ATTR_RUNE_CHARGES
Definition: item.h:46
Item::isContainer
bool isContainer() override
Definition: item.h:129
Item::removeContainerItem
void removeContainerItem(int slot)
Definition: item.h:141
ATTR_ITEM
@ ATTR_ITEM
Definition: item.h:43
Item::setText
void setText(const std::string &txt)
Definition: item.h:120
Position
Definition: position.h:33
Item::createFromOtb
static ItemPtr createFromOtb(int id)
Definition: item.cpp:60
Item::getClientId
uint16 getClientId()
Definition: item.h:98
Item::getActionId
uint16 getActionId()
Definition: item.h:113
Item::getServerId
uint16 getServerId()
Definition: item.h:99
Item::setActionId
void setActionId(uint16 actionId)
Definition: item.h:114
Item::setCount
void setCount(int count)
Definition: item.h:90
stdext::packed_storage< uint8 >
ATTR_ATTRIBUTE_MAP
@ ATTR_ATTRIBUTE_MAP
Definition: item.h:71
Item::clone
ItemPtr clone()
Definition: item.cpp:260
ATTR_WRITTENDATE
@ ATTR_WRITTENDATE
Definition: item.h:52
ATTR_HITCHANCE
@ ATTR_HITCHANCE
Definition: item.h:66
Item::isItem
bool isItem() override
Definition: item.h:135
ThingType
Definition: thingtype.h:126
ATTR_DESC
@ ATTR_DESC
Definition: item.h:41
Item::calculateAnimationPhase
int calculateAnimationPhase(bool animate)
Definition: item.cpp:375
Item::getSubType
int getSubType()
Definition: item.cpp:244
Item::setDoorId
void setDoorId(uint8 doorId)
Definition: item.h:109
Item::isDoor
bool isDoor()
Definition: item.h:130
Item::getText
std::string getText()
Definition: item.h:117
ATTR_DUALWIELD
@ ATTR_DUALWIELD
Definition: item.h:70
Item::isDepot
bool isDepot()
Definition: item.h:128
Item::create
static ItemPtr create(int id)
Definition: item.cpp:52
ATTR_EXTRADEFENSE
@ ATTR_EXTRADEFENSE
Definition: item.h:63
ATTR_END
@ ATTR_END
Definition: item.h:34
Item
Definition: item.h:76
Item::~Item
virtual ~Item()
Definition: item.h:80
ATTR_DEPOT_ID
@ ATTR_DEPOT_ID
Definition: item.h:44
ATTR_DEFENSE
@ ATTR_DEFENSE
Definition: item.h:62
stdext::packed_storage::has
bool has(Key id) const
Definition: packed_storage.h:87
effect.h
stdext::shared_object_ptr< Item >
itemtype.h
Item::setId
void setId(uint32 id) override
Definition: item.cpp:96
Item::getDoorId
uint8 getDoorId()
Definition: item.h:110
Item::startListenerPainter
void startListenerPainter()
Definition: item.cpp:402
Item::getDepotId
uint16 getDepotId()
Definition: item.h:107
ATTR_SLEEPERGUID
@ ATTR_SLEEPERGUID
Definition: item.h:54
ATTR_WRITTENBY
@ ATTR_WRITTENBY
Definition: item.h:53
ItemVector
std::vector< ItemPtr > ItemVector
Definition: declarations.h:87
ATTR_NAME
@ ATTR_NAME
Definition: item.h:58
ItemAttr
ItemAttr
Definition: item.h:32
thing.h
stdext::packed_storage::set
void set(Key id, const T &value)
Definition: packed_storage.h:47
TPoint< int >
Item::getCount
int getCount()
Definition: item.cpp:253
Item::addContainerItem
void addContainerItem(const ItemPtr &i)
Definition: item.h:140
global.h
ATTR_TILE_FLAGS
@ ATTR_TILE_FLAGS
Definition: item.h:37
Item::isTeleport
bool isTeleport()
Definition: item.h:131
ATTR_HOUSEDOORID
@ ATTR_HOUSEDOORID
Definition: item.h:48
ATTR_SHOOTRANGE
@ ATTR_SHOOTRANGE
Definition: item.h:67
Item::getCountOrSubType
int getCountOrSubType()
Definition: item.h:94
uint8
uint8_t uint8
Definition: types.h:37
ATTR_ATTACKSPEED
@ ATTR_ATTACKSPEED
Definition: item.h:65