Fix EGS sheet rebuild crashes
This commit is contained in:
parent
4a95333992
commit
32c0f2d7f7
2 changed files with 46 additions and 48 deletions
|
@ -237,24 +237,12 @@ void SItemSpecialEffects::serial(class NLMISC::IStream &f)
|
|||
//--------------------------------------------------------------
|
||||
// init()
|
||||
//--------------------------------------------------------------
|
||||
void CStaticItem::init()
|
||||
void CStaticItem::init(bool doDelete)
|
||||
{
|
||||
Family = ITEMFAMILY::UNDEFINED;
|
||||
Type = ITEM_TYPE::UNDEFINED;
|
||||
|
||||
Armor = NULL;
|
||||
MeleeWeapon = NULL;
|
||||
RangeWeapon = NULL;
|
||||
Ammo = NULL;
|
||||
Shield = NULL;
|
||||
TamingTool = NULL;
|
||||
Mp = NULL;
|
||||
GuildOption = NULL;
|
||||
Cosmetics = NULL;
|
||||
ItemServiceData = NULL;
|
||||
ConsumableItem = NULL;
|
||||
XpCatalyser = NULL;
|
||||
CommandTicket = NULL;
|
||||
clearPtrs(doDelete);
|
||||
|
||||
Skill = SKILLS::unknown;
|
||||
MinSkill = 0;
|
||||
|
@ -287,16 +275,54 @@ void CStaticItem::init()
|
|||
RequiredCharacQualityFactor = 0.0f;
|
||||
RequiredCharacQualityOffset = 0;
|
||||
|
||||
ItemSpecialEffects = NULL;
|
||||
} // init //
|
||||
|
||||
|
||||
// ***************************************************************************
|
||||
void CStaticItem::clearPtrs(bool doDelete)
|
||||
{
|
||||
if (doDelete)
|
||||
{
|
||||
delete Armor;
|
||||
delete MeleeWeapon;
|
||||
delete RangeWeapon;
|
||||
delete Ammo;
|
||||
delete Shield;
|
||||
delete TamingTool;
|
||||
delete Mp;
|
||||
delete GuildOption;
|
||||
delete Cosmetics;
|
||||
delete ItemServiceData;
|
||||
delete ConsumableItem;
|
||||
delete XpCatalyser;
|
||||
delete CommandTicket;
|
||||
delete ItemSpecialEffects;
|
||||
}
|
||||
|
||||
Armor = NULL;
|
||||
MeleeWeapon = NULL;
|
||||
RangeWeapon = NULL;
|
||||
Ammo = NULL;
|
||||
Shield = NULL;
|
||||
TamingTool = NULL;
|
||||
Mp = NULL;
|
||||
GuildOption = NULL;
|
||||
Cosmetics = NULL;
|
||||
ItemServiceData = NULL;
|
||||
ConsumableItem = NULL;
|
||||
XpCatalyser = NULL;
|
||||
CommandTicket = NULL;
|
||||
ItemSpecialEffects = NULL;
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// copy constructor
|
||||
//--------------------------------------------------------------
|
||||
CStaticItem::CStaticItem( const CStaticItem& itm )
|
||||
{
|
||||
clearPtrs(false);
|
||||
|
||||
*this = itm;
|
||||
if(itm.Armor)
|
||||
{
|
||||
|
@ -1443,6 +1469,9 @@ void CStaticItem::readGeorges (const NLMISC::CSmartPtr<NLGEORGES::UForm> &form,
|
|||
if (form == NULL)
|
||||
return;
|
||||
|
||||
// Clear pointers to previous data
|
||||
clearPtrs(true);
|
||||
|
||||
// Get the root node, always exist
|
||||
UFormElm &root = form->getRootNode ();
|
||||
|
||||
|
@ -1993,37 +2022,6 @@ float CStaticItem::getBaseWeight() const
|
|||
}
|
||||
#endif
|
||||
|
||||
// ***************************************************************************
|
||||
void CStaticItem::clearPtrs(bool doDelete)
|
||||
{
|
||||
if(doDelete)
|
||||
{
|
||||
if (Ammo != NULL ) delete Ammo;
|
||||
if (Armor != NULL ) delete Armor;
|
||||
if (MeleeWeapon != NULL ) delete MeleeWeapon;
|
||||
if (RangeWeapon != NULL ) delete RangeWeapon;
|
||||
if (Cosmetics != NULL ) delete Cosmetics;
|
||||
if (Mp != NULL ) delete Mp;
|
||||
if (GuildOption != NULL ) delete GuildOption;
|
||||
if (Shield != NULL ) delete Shield;
|
||||
if (TamingTool != NULL) delete TamingTool;
|
||||
if (ItemServiceData != NULL) delete ItemServiceData;
|
||||
if (CommandTicket != NULL) delete CommandTicket;
|
||||
}
|
||||
|
||||
Ammo = NULL;
|
||||
Armor = NULL;
|
||||
MeleeWeapon = NULL;
|
||||
RangeWeapon = NULL;
|
||||
Cosmetics = NULL;
|
||||
Mp = NULL;
|
||||
GuildOption = NULL;
|
||||
Shield = NULL;
|
||||
TamingTool = NULL;
|
||||
ItemServiceData = NULL;
|
||||
CommandTicket = NULL;
|
||||
}
|
||||
|
||||
|
||||
uint32 CStaticItem::getMaxStackSize() const
|
||||
{
|
||||
|
|
|
@ -812,13 +812,13 @@ public:
|
|||
public:
|
||||
|
||||
/// Constructor
|
||||
CStaticItem() { init(); }
|
||||
CStaticItem() { init(false); }
|
||||
|
||||
/// copy constructor
|
||||
CStaticItem( const CStaticItem& itm );
|
||||
|
||||
/// init method
|
||||
void init();
|
||||
void init(bool doDelete = true);
|
||||
|
||||
/// destructor
|
||||
virtual ~CStaticItem();
|
||||
|
|
Loading…
Reference in a new issue