13 #include <format/format.h> 14 #include "../../bscript/bstruct.h" 15 #include "../../bscript/impstr.h" 16 #include "../../clib/cfgelem.h" 17 #include "../../clib/logfacility.h" 18 #include "../../clib/passert.h" 19 #include "../../clib/streamsaver.h" 20 #include "../../clib/strutil.h" 21 #include "../../plib/pkg.h" 22 #include "../../plib/systemstate.h" 23 #include "../equipdsc.h" 24 #include "../extobj.h" 25 #include "../globals/settings.h" 26 #include "../layers.h" 28 #include "../uobject.h" 47 :
EquipDesc( objtype, elem, ARMORDESC, pkg ),
48 ar( elem.remove_ushort(
"AR", 0 ) ),
50 on_hit_script( elem.remove_string(
"ONHITSCRIPT",
"" ), pkg,
"scripts/items/" )
59 catch ( std::runtime_error& )
62 tmp.Format(
"Error in Objtype 0x{:X}" ) <<
objtype;
64 tmp <<
"config/itemdesc.cfg\n";
66 tmp << pkg->
dir() <<
"itemdesc.cfg\n";
85 catch ( std::runtime_error& )
88 tmp.Format(
"Error in Objtype 0x{:X}" ) <<
objtype;
90 tmp <<
"config/itemdesc.cfg\n";
92 tmp << pkg->
dir() <<
"itemdesc.cfg\n";
108 std::set<unsigned short>::const_iterator itr;
109 for ( itr =
zones.begin(); itr !=
zones.end(); ++itr )
113 if ( arr_zones->ref_arr.size() > 0 )
114 descriptor->
addMember(
"Coverage", arr_zones.release() );
121 size += 3 *
sizeof(
void* ) +
zones.size() * (
sizeof(
unsigned short ) + 3 *
sizeof(
void* ) );
133 short ar_mod = this->ar_mod();
142 else if ( ar <= USHRT_MAX )
143 return static_cast<unsigned short>(
ar );
162 armor->ar_mod( this->ar_mod() );
172 sw() <<
"\tAR_mod\t" << ar_mod() <<
pf_endl;
180 this->ar_mod( static_cast<s16>( elem.
remove_int(
"AR_MOD", 0 ) ) );
186 if ( scriptname.empty() )
205 if (
id.save_on_exit )
206 throw std::runtime_error(
"Intrinsic Shield " +
208 " must specify SaveOnExit 0" );
211 throw std::runtime_error(
212 "An Armor template for Intrinsic Shield is required in itemdesc.cfg" );
246 shieldelem.
add_prop(
"Objtype",
"0xFFFF" );
247 shieldelem.
add_prop(
"Graphic",
"1" );
248 shieldelem.
add_prop(
"SaveOnExit",
"0" );
252 shieldelem.
add_prop(
"MaxHP", tmp );
254 shieldelem.
add_prop(
"MaxHP",
"1" );
256 if ( elem.
remove_prop(
"ShieldOnHitScript", &tmp ) )
257 shieldelem.
add_prop(
"OnHitScript", tmp );
260 shieldelem.
add_prop(
"CProp", tmp );
virtual unsigned short ar_base() const
virtual Item * clone() const POL_OVERRIDE
std::string remove_string(const char *propname)
Core::ScriptDef on_hit_script
void register_intrinsic_equipment(const std::string &name, Equipment *equip)
Must be called when a new intrinsic equipment is created.
virtual void printProperties(Clib::StreamWriter &sw) const POL_OVERRIDE
virtual size_t estimatedSize() const POL_OVERRIDE
virtual std::string name() const POL_OVERRIDE
virtual unsigned short ar() const
size_t estimatedSize() const
int remove_int(const char *propname)
const Core::EquipDesc * tmpl
std::set< unsigned short > zones
std::string relativename(const Plib::Package *pkg=nullptr) const
virtual void printProperties(Clib::StreamWriter &sw) const POL_OVERRIDE
void addMember(const char *name, BObjectRef val)
virtual size_t estimatedSize() const POL_OVERRIDE
virtual Item * clone() const POL_OVERRIDE
const ItemDesc & find_itemdesc(unsigned int objtype)
unsigned short maxhp() const
std::string hexint(unsigned short v)
const char * rest() const
virtual void PopulateStruct(Bscript::BStruct *descriptor) const POL_OVERRIDE
friend UArmor * create_intrinsic_shield(const char *name, Clib::ConfigElem &elem, const Plib::Package *pkg)
Creates a new intrinsic shield and returns it.
const Plib::Package * pkg
void config(const std::string &name, const Plib::Package *pkg, const char *mainpfx, bool warn_if_not_found=true)
void add_prop(std::string propname, std::string propval)
UArmor * create_intrinsic_shield_from_npctemplate(Clib::ConfigElem &elem, const Plib::Package *pkg)
Creates a new intrinic shield for an NPC template and returns it.
const char * zone_to_zone_name(unsigned short zone)
virtual bool covers(unsigned short zlayer) const
virtual void PopulateStruct(Bscript::BStruct *descriptor) const POL_OVERRIDE
SettingsManager settingsManager
virtual void readProperties(Clib::ConfigElem &elem) POL_OVERRIDE
bool remove_prop(const char *propname, std::string *value)
UArmor(const ArmorDesc &descriptor, const ArmorDesc *permanent_descriptor)
Core::ScriptDef onhitscript_
unsigned short layer_to_zone(unsigned short layer)
void set_source(const ConfigElem &elem)
virtual void readProperties(Clib::ConfigElem &elem) POL_OVERRIDE
std::set< unsigned short > tmplzones()
unsigned short zone_name_to_zone(const char *zname)
const ItemDesc & itemdesc() const
ArmorDesc(u32 objtype, Clib::ConfigElem &elem, const Plib::Package *pkg, bool forceShield=false)
Since the constructor is doing some wrong guessing to tell when an armor is a shield, forceShield will force to consider it a shield.
virtual size_t estimatedSize() const POL_OVERRIDE
void set_rest(const char *newrest)
void validate_intrinsic_shield_template()
Must be called at startup, validates the intrinsic shield element.
void set_onhitscript(const std::string &scriptname)
virtual size_t estimatedSize() const POL_OVERRIDE
const std::string & dir() const