12using namespace Tempest;
16 assert(itemInstance!=
size_t(-1));
17 hitem = std::make_shared<zenkit::IItem>();
32 h = std::make_shared<zenkit::IItem>();
35 Tempest::Matrix4x4 mat;
37 uint32_t instanceSymbol=0;
38 fin.
read(instanceSymbol);
41 auto* sym = vm.find_symbol_by_index(instanceSymbol);
44 vm.allocate_instance(h, sym);
46 Tempest::Log::e(
"Loading unknown item from save: " , instanceSymbol);
49 fin.
read(h->id,h->name,h->name_id,h->hp,h->hp_max,h->main_flag);
50 fin.
read(
reinterpret_cast<int&
>(h->flags),h->weight,h->value,h->damage_type,h->damage_total,h->damage);
51 fin.
read(h->wear,h->protection,h->nutrition,h->cond_atr,h->cond_value,h->change_atr,h->change_value,h->magic);
52 fin.
read(h->on_equip,h->on_unequip,h->on_state);
53 fin.
read(h->owner,h->owner_guild,h->disguise_guild,h->visual,h->visual_change);
54 fin.
read(h->effect,h->visual_skin,h->scheme_name,h->material);
55 fin.
read(h->munition,h->spell,h->range,h->mag_circle);
56 fin.
read(h->description,h->text,h->count);
57 fin.
read(h->inv_zbias,h->inv_rot_x,h->inv_rot_y,h->inv_rot_z,h->inv_animate);
59 fin.
read(pos,equipped,itSlot);
75 :
Vob(it.world), hitem(it.hitem),
76 pos(it.pos),equipped(it.equipped),itSlot(it.itSlot),view(std::move(it.view)) {
78 physic = std::move(it.physic);
86 fout.
write(uint32_t(h.symbol_index()));
87 fout.
write(h.id,h.name,h.name_id,h.hp,h.hp_max,h.main_flag);
88 fout.
write(
reinterpret_cast<int&
>(h.flags),h.weight,h.value,h.damage_type,h.damage_total,h.damage);
89 fout.
write(h.wear,h.protection,h.nutrition,h.cond_atr,h.cond_value,h.change_atr,h.change_value,h.magic);
90 fout.
write(h.on_equip,h.on_unequip,h.on_state);
91 fout.
write(h.owner,h.owner_guild,h.disguise_guild,h.visual,h.visual_change);
92 fout.
write(h.effect,h.visual_skin,h.scheme_name,h.material);
93 fout.
write(h.munition,h.spell,h.range,h.mag_circle);
94 fout.
write(h.description,h.text,h.count);
95 fout.
write(h.inv_zbias,h.inv_rot_x,h.inv_rot_y,h.inv_rot_z,h.inv_animate);
97 fout.
write(pos,equipped,itSlot);
133 if(equipped>amount) {
134 Log::e(
"[",
displayName(),
"] inconsistent inventory state");
154 physic = p.dynamicObj(
transform(),view.
bounds(),zenkit::MaterialGroup(hitem->material));
164 physic = p.dynamicObj(
transform(),b,zenkit::MaterialGroup(hitem->material));
177 return hitem->description;
186 auto v = (b.bbox[1]-b.bbox[0])*0.5;
200 return static_cast<int>(hitem->flags);
214 const int32_t SPL_STORMFIST = 47;
215 if(g1 &&
spellId()==SPL_STORMFIST)
267 amount = uint32_t(cnt);
275 return hitem->text[id];
279 return hitem->count[id];
296 for(
size_t i=0;i<zenkit::IItem::condition_count;++i){
297 auto atr =
Attribute(hitem->cond_atr[i]);
298 if(other.
attribute(atr)<hitem->cond_value[i] && hitem->cond_value[i]!=0) {
300 nv = hitem->cond_value[i];
308 cIt = hitem->mag_circle;
314 return hitem->symbol_index();
317void Item::updateMatrix() {
318 Tempest::Matrix4x4 mat;
320 mat.translate(pos.x,pos.y,pos.z);
void assign(const Tempest::Vec3 &cen, float sizeSz)
void initializeInstanceItem(const std::shared_ptr< zenkit::IItem > &item, size_t instance)
const zenkit::ISpell & spellDesc(int32_t splId)
float tradeValueMultiplier() const
std::string_view displayName() const
Tempest::Vec3 midPosition() const
bool isSpellOrRune() const
bool checkCondRune(const Npc &other, int32_t &cPl, int32_t &cIt) const
virtual bool isTorchBurn() const
void setPosition(float x, float y, float z)
Item(World &owner, size_t inst, Type type)
ItmFlags mainFlag() const
std::string_view uiText(size_t id) const
int32_t uiValue(size_t id) const
void setCount(size_t cnt)
bool isSpellShoot() const
bool checkCond(const Npc &other) const
void moveEvent() override
void setObjMatrix(const Tempest::Matrix4x4 &m)
void setPhysicsEnable(World &w)
std::string_view description() const
void setAsEquipped(bool e)
bool isDynamic() const override
bool checkCondUse(const Npc &other, int32_t &atr, int32_t &nv) const
void setDirection(float x, float y, float z)
void save(Serialize &fout) const override
int32_t swordLength() const
Tempest::Vec3 position() const
void setObjMatrix(const Tempest::Matrix4x4 &mt)
size_t nodesCount() const
int32_t attribute(Attribute a) const
int32_t mageCycle() const
void write(const Arg &... a)
void setLocalTransform(const Tempest::Matrix4x4 &p)
auto localTransform() const -> const Tempest::Matrix4x4 &
auto transform() const -> const Tempest::Matrix4x4 &
auto version() const -> const VersionInfo &
DynamicWorld * physic() const
void invalidateVobIndex()
MeshObjects::Mesh addView(std::string_view visual) const
GameScript & script() const
@ TARGET_COLLECT_ALL_FALLBACK_NONE
bool hasExt(std::string_view s, const char *extIn)
void setObjMatrix(const Tempest::Matrix4x4 &m)