Files
src-1.2/engine/server/library/serverGame/src/shared/objectTemplate/ServerObjectTemplate.cpp
T

4654 lines
122 KiB
C++

//========================================================================
//
// ServerObjectTemplate.cpp
//
//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be
//overwritten the next time the template definition is compiled. Do not
//make changes to code inside these blocks.
//
// copyright 2001 Sony Online Entertainment
//
//========================================================================
#include "serverGame/FirstServerGame.h"
#include "ServerObjectTemplate.h"
#include "sharedFile/Iff.h"
#include "sharedMath/Vector.h"
#include "sharedObject/ObjectTemplate.h"
#include "sharedObject/ObjectTemplateList.h"
//@BEGIN TFD TEMPLATE REFS
#include "ServerObjectTemplate.h"
//@END TFD TEMPLATE REFS
#include <stdio.h>
#include <unordered_map>
const std::string DefaultString("");
const StringId DefaultStringId("", 0);
const Vector DefaultVector(0,0,0);
const TriggerVolumeData DefaultTriggerVolumeData;
bool ServerObjectTemplate::ms_allowDefaultTemplateParams = true;
typedef std::unordered_map<ServerObjectTemplate::XpTypes, std::string, std::hash<int> > XP_MAP;
static XP_MAP * XpMap = NULL;
/**
* Class constructor.
*/
ServerObjectTemplate::ServerObjectTemplate(const std::string & filename)
//@BEGIN TFD INIT
: ObjectTemplate(filename)
,m_scriptsLoaded(false)
,m_scriptsAppend(false)
,m_visibleFlagsLoaded(false)
,m_visibleFlagsAppend(false)
,m_deleteFlagsLoaded(false)
,m_deleteFlagsAppend(false)
,m_moveFlagsLoaded(false)
,m_moveFlagsAppend(false)
,m_contentsLoaded(false)
,m_contentsAppend(false)
,m_xpPointsLoaded(false)
,m_xpPointsAppend(false)
,m_versionOk(true)
//@END TFD INIT
{
} // ServerObjectTemplate::ServerObjectTemplate
/**
* Class destructor.
*/
ServerObjectTemplate::~ServerObjectTemplate()
{
if (m_baseData)
{
m_baseData->releaseReference();
m_baseData=0;
}
//@BEGIN TFD CLEANUP
{
std::vector<StringParam *>::iterator iter;
for (iter = m_scripts.begin(); iter != m_scripts.end(); ++iter)
{
delete *iter;
*iter = NULL;
}
m_scripts.clear();
}
{
std::vector<IntegerParam *>::iterator iter;
for (iter = m_visibleFlags.begin(); iter != m_visibleFlags.end(); ++iter)
{
delete *iter;
*iter = NULL;
}
m_visibleFlags.clear();
}
{
std::vector<IntegerParam *>::iterator iter;
for (iter = m_deleteFlags.begin(); iter != m_deleteFlags.end(); ++iter)
{
delete *iter;
*iter = NULL;
}
m_deleteFlags.clear();
}
{
std::vector<IntegerParam *>::iterator iter;
for (iter = m_moveFlags.begin(); iter != m_moveFlags.end(); ++iter)
{
delete *iter;
*iter = NULL;
}
m_moveFlags.clear();
}
{
std::vector<StructParamOT *>::iterator iter;
for (iter = m_contents.begin(); iter != m_contents.end(); ++iter)
{
delete *iter;
*iter = NULL;
}
m_contents.clear();
}
{
std::vector<StructParamOT *>::iterator iter;
for (iter = m_xpPoints.begin(); iter != m_xpPoints.end(); ++iter)
{
delete *iter;
*iter = NULL;
}
m_xpPoints.clear();
}
//@END TFD CLEANUP
} // ServerObjectTemplate::~ServerObjectTemplate
/**
* Static function used to register this template.
*/
void ServerObjectTemplate::registerMe(void)
{
ObjectTemplateList::registerTemplate(ServerObjectTemplate_tag, create);
if (XpMap == NULL)
{
XpMap = new XP_MAP();
NOT_NULL(XpMap);
ExitChain::add(exit, "ServerObjectTemplate");
// @todo: fill in the rest of this map
(*XpMap)[XP_rangedCombat] = "";
(*XpMap)[XP_meleeCombat] = "";
(*XpMap)[XP_tamingNoTime] = "";
(*XpMap)[XP_tamingShortTime] = "";
(*XpMap)[XP_tamingMediumTime] = "";
(*XpMap)[XP_tamingLargeTime] = "";
(*XpMap)[XP_architect] = "";
(*XpMap)[XP_botany] = "";
(*XpMap)[XP_bountyHunter] = "";
(*XpMap)[XP_chemist] = "";
(*XpMap)[XP_dancing] = "";
(*XpMap)[XP_facilityManagementSavings] = "";
(*XpMap)[XP_facilityManagementWearAndTear] = "";
(*XpMap)[XP_squadLeaderNoTime] = "";
(*XpMap)[XP_squadLeaderSmallTime] = "";
(*XpMap)[XP_squadLeaderMediumTime] = "";
(*XpMap)[XP_squadLeaderLargeTime] = "";
(*XpMap)[XP_hairdressing] = "";
(*XpMap)[XP_holonetSlicingPopularity] = "";
(*XpMap)[XP_holonetSlicingQuantity] = "";
(*XpMap)[XP_investigation] = "";
(*XpMap)[XP_medic] = "";
(*XpMap)[XP_military] = "";
(*XpMap)[XP_mining] = "";
(*XpMap)[XP_miningSavings] = "";
(*XpMap)[XP_musician] = "music";
(*XpMap)[XP_musicanPopularity] = "";
(*XpMap)[XP_politics] = "";
(*XpMap)[XP_slicing] = "";
(*XpMap)[XP_smuggling] = "";
(*XpMap)[XP_surveyingNoMinimum] = "";
(*XpMap)[XP_surveyingLowMinimum] = "";
(*XpMap)[XP_surveyingMediumMinimum] = "";
(*XpMap)[XP_surveyingHighMinimum] = "";
(*XpMap)[XP_survivalHealing] = "";
(*XpMap)[XP_survivalTracking] = "";
(*XpMap)[XP_vehicularControl] = "";
(*XpMap)[XP_vehicularWearAndTear] = "";
(*XpMap)[XP_resourceHarvestingOrganic] = "resource_harvesting_organic";
(*XpMap)[XP_resourceHarvestingInorganic] = "resource_harvesting_inorganic";
(*XpMap)[XP_crafting] = "crafting_general";
(*XpMap)[XP_craftingClothing] = "crafting_clothing_general";
(*XpMap)[XP_craftingClothingArmor] = "crafting_clothing_armor";
(*XpMap)[XP_craftingDroid] = "crafting_droid_general";
(*XpMap)[XP_craftingFood] = "crafting_food_general";
(*XpMap)[XP_craftingMedicine] = "crafting_medicine_general";
(*XpMap)[XP_craftingStructure] = "crafting_structure_general";
(*XpMap)[XP_craftingWeapons] = "crafting_weapons_general";
(*XpMap)[XP_craftingWeaponsMelee] = "crafting_weapons_melee";
(*XpMap)[XP_craftingWeaponsRanged] = "crafting_weapons_ranged";
(*XpMap)[XP_craftingWeaponsMunition] = "crafting_weapons_munition";
(*XpMap)[XP_craftingScout] = "scout";
(*XpMap)[XP_craftingCreature] = "crafting_bio_engineer_creature";
(*XpMap)[XP_craftingTissue] = "crafting_bio_engineer_tissue";
(*XpMap)[XP_craftingCamp] = "camp";
(*XpMap)[XP_craftingTrapping] = "trapping";
(*XpMap)[XP_craftingSpice] = "crafting_spice";
(*XpMap)[XP_industrialist] = "industrialist";
(*XpMap)[XP_jediGeneral] = "jedi_general";
(*XpMap)[XP_shipwright] = "shipwright";
(*XpMap)[XP_reverseEngineering] = "reverse_engineering";
}
} // ServerObjectTemplate::registerMe
/**
* Called on program exit to clean up class-level memory.
*/
void ServerObjectTemplate::exit()
{
if (XpMap != NULL)
{
delete XpMap;
XpMap = NULL;
}
} // ServerObjectTemplate::exit
/**
* Creates a ServerObjectTemplate template.
*
* @return a new instance of the template
*/
ObjectTemplate * ServerObjectTemplate::create(const std::string & filename)
{
return new ServerObjectTemplate(filename);
} // ServerObjectTemplate::create
/**
* Returns the template id.
*
* @return the template id
*/
Tag ServerObjectTemplate::getId(void) const
{
return ServerObjectTemplate_tag;
} // ServerObjectTemplate::getId
/**
* Returns this template's version.
*
* @return the version
*/
Tag ServerObjectTemplate::getTemplateVersion(void) const
{
return m_templateVersion;
} // ServerObjectTemplate::getTemplateVersion
/**
* Returns the highest version of this template or it's base templates.
*
* @return the highest version
*/
Tag ServerObjectTemplate::getHighestTemplateVersion(void) const
{
if (m_baseData == NULL)
return m_templateVersion;
const ServerObjectTemplate * base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
if (base == NULL)
return m_templateVersion;
return std::max(m_templateVersion, base->getHighestTemplateVersion());
} // ServerObjectTemplate::getHighestTemplateVersion
// ----------------------------------------------------------------------
ServerObjectTemplate * ServerObjectTemplate::asServerObjectTemplate()
{
return this;
}
// ----------------------------------------------------------------------
ServerObjectTemplate const * ServerObjectTemplate::asServerObjectTemplate() const
{
return this;
}
// ----------------------------------------------------------------------
/**
* Returns the xp string associated with an xp enum value
*
* @param type the xp type
*
* @return the string associated with the xp, or an empty string for a bad value
*/
const std::string & ServerObjectTemplate::getXpString(XpTypes type)
{
static const std::string emptyString;
if (XpMap != NULL)
{
XP_MAP::const_iterator result = XpMap->find(type);
if (result != XpMap->end())
return (*result).second;
}
return emptyString;
} // ServerObjectTemplate::getXpString
//----------------------------------------------------------------------
const std::string & ServerObjectTemplate::getDamageTypeString (DamageType type)
{
static const std::string emptyString;
static const std::string DAMAGE_TYPE_NAMES[] =
{
"kinetic",
"energy",
"blast",
"stun",
"restraint",
"elemental_heat",
"elemental_cold",
"elemental_acid",
"elemental_electrical",
"environmental_heat",
"environmental_cold",
"environmental_acid",
"environmental_electrical"
};
const int DAMAGE_TYPE_NAMES_SIZE = sizeof(DAMAGE_TYPE_NAMES) / sizeof(DAMAGE_TYPE_NAMES[0]);
const int i_damage = static_cast<int>(type);
if (i_damage != 0)
{
for (int index = 0; index < DAMAGE_TYPE_NAMES_SIZE; ++index)
{
if ((i_damage & (1 << index)) != 0)
return DAMAGE_TYPE_NAMES [index];
}
}
return emptyString;
}
//----------------------------------------------------------------------
const std::string & ServerObjectTemplate::getArmorRatingString (ArmorRating type)
{
static const std::string emptyString;
static const std::string ARMOR_RATING_NAMES[] =
{
"none",
"light",
"medium",
"heavy"
};
const int ARMOR_RATING_NAMES_SIZE = sizeof(ARMOR_RATING_NAMES) / sizeof(ARMOR_RATING_NAMES[0]);
const int i_type = static_cast<int>(type);
if (i_type < 0 || i_type >= ARMOR_RATING_NAMES_SIZE)
return emptyString;
return ARMOR_RATING_NAMES [i_type];
}
//----------------------------------------------------------------------
//@BEGIN TFD
const std::string & ServerObjectTemplate::getSharedTemplate(bool testData) const
{
#ifdef _DEBUG
std::string testDataValue = DefaultString;
#else
UNREF(testData);
#endif
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getSharedTemplate(true);
#endif
}
if (!m_sharedTemplate.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter sharedTemplate in template %s", DataResource::getName()));
return DefaultString;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter sharedTemplate has not been defined in template %s!", DataResource::getName()));
return base->getSharedTemplate();
}
}
const std::string & value = m_sharedTemplate.getValue();
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::getSharedTemplate
const std::string & ServerObjectTemplate::getScripts(int index) const
{
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
}
if (!m_scriptsLoaded)
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter scripts in template %s", DataResource::getName()));
return DefaultString;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter scripts has not been defined in template %s!", DataResource::getName()));
return base->getScripts(index);
}
}
if (m_scriptsAppend && base != NULL)
{
int baseCount = base->getScriptsCount();
if (index < baseCount)
return base->getScripts(index);
index -= baseCount;
}
DEBUG_FATAL(index < 0 || static_cast<size_t>(index) >= m_scripts.size(), ("template param index out of range"));
const std::string & value = m_scripts[index]->getValue();
return value;
} // ServerObjectTemplate::getScripts
size_t ServerObjectTemplate::getScriptsCount(void) const
{
if (!m_scriptsLoaded)
{
if (m_baseData == NULL)
return 0;
const ServerObjectTemplate * base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
DEBUG_FATAL(base == NULL, ("base template wrong type"));
return base->getScriptsCount();
}
size_t count = m_scripts.size();
// if we are extending our base template, add it's count
if (m_scriptsAppend && m_baseData != NULL)
{
const ServerObjectTemplate * base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
if (base != NULL)
count += base->getScriptsCount();
}
return count;
} // ServerObjectTemplate::getScriptsCount
void ServerObjectTemplate::getObjvars(DynamicVariableList &list) const
{
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
}
if (!m_objvars.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter objvars in template %s", DataResource::getName()));
return ;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter objvars has not been defined in template %s!", DataResource::getName()));
base->getObjvars(list);
return;
}
}
if (m_objvars.isExtendingBaseList() && base != NULL)
base->getObjvars(list);
m_objvars.getDynamicVariableList(list);
} // ServerObjectTemplate::getObjvars
int ServerObjectTemplate::getVolume(bool testData) const
{
#ifdef _DEBUG
int testDataValue = 0;
#else
UNREF(testData);
#endif
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getVolume(true);
#endif
}
if (!m_volume.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter volume in template %s", DataResource::getName()));
return 0;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter volume has not been defined in template %s!", DataResource::getName()));
return base->getVolume();
}
}
int value = m_volume.getValue();
char delta = m_volume.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
int baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getVolume();
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<int>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<int>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::getVolume
int ServerObjectTemplate::getVolumeMin(bool testData) const
{
#ifdef _DEBUG
int testDataValue = 0;
#else
UNREF(testData);
#endif
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getVolumeMin(true);
#endif
}
if (!m_volume.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter volume in template %s", DataResource::getName()));
return 0;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter volume has not been defined in template %s!", DataResource::getName()));
return base->getVolumeMin();
}
}
int value = m_volume.getMinValue();
char delta = m_volume.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
int baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getVolumeMin();
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<int>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<int>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::getVolumeMin
int ServerObjectTemplate::getVolumeMax(bool testData) const
{
#ifdef _DEBUG
int testDataValue = 0;
#else
UNREF(testData);
#endif
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getVolumeMax(true);
#endif
}
if (!m_volume.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter volume in template %s", DataResource::getName()));
return 0;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter volume has not been defined in template %s!", DataResource::getName()));
return base->getVolumeMax();
}
}
int value = m_volume.getMaxValue();
char delta = m_volume.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
int baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getVolumeMax();
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<int>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<int>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::getVolumeMax
ServerObjectTemplate::VisibleFlags ServerObjectTemplate::getVisibleFlags(int index) const
{
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
}
if (!m_visibleFlagsLoaded)
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter visibleFlags in template %s", DataResource::getName()));
return static_cast<VisibleFlags>(0);
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter visibleFlags has not been defined in template %s!", DataResource::getName()));
return base->getVisibleFlags(index);
}
}
if (m_visibleFlagsAppend && base != NULL)
{
int baseCount = base->getVisibleFlagsCount();
if (index < baseCount)
return base->getVisibleFlags(index);
index -= baseCount;
}
DEBUG_FATAL(index < 0 || static_cast<size_t>(index) >= m_visibleFlags.size(), ("template param index out of range"));
return static_cast<VisibleFlags>(m_visibleFlags[index]->getValue());
} // ServerObjectTemplate::getVisibleFlags
size_t ServerObjectTemplate::getVisibleFlagsCount(void) const
{
if (!m_visibleFlagsLoaded)
{
if (m_baseData == NULL)
return 0;
const ServerObjectTemplate * base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
DEBUG_FATAL(base == NULL, ("base template wrong type"));
return base->getVisibleFlagsCount();
}
size_t count = m_visibleFlags.size();
// if we are extending our base template, add it's count
if (m_visibleFlagsAppend && m_baseData != NULL)
{
const ServerObjectTemplate * base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
if (base != NULL)
count += base->getVisibleFlagsCount();
}
return count;
} // ServerObjectTemplate::getVisibleFlagsCount
ServerObjectTemplate::DeleteFlags ServerObjectTemplate::getDeleteFlags(int index) const
{
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
}
if (!m_deleteFlagsLoaded)
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter deleteFlags in template %s", DataResource::getName()));
return static_cast<DeleteFlags>(0);
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter deleteFlags has not been defined in template %s!", DataResource::getName()));
return base->getDeleteFlags(index);
}
}
if (m_deleteFlagsAppend && base != NULL)
{
int baseCount = base->getDeleteFlagsCount();
if (index < baseCount)
return base->getDeleteFlags(index);
index -= baseCount;
}
DEBUG_FATAL(index < 0 || static_cast<size_t>(index) >= m_deleteFlags.size(), ("template param index out of range"));
return static_cast<DeleteFlags>(m_deleteFlags[index]->getValue());
} // ServerObjectTemplate::getDeleteFlags
size_t ServerObjectTemplate::getDeleteFlagsCount(void) const
{
if (!m_deleteFlagsLoaded)
{
if (m_baseData == NULL)
return 0;
const ServerObjectTemplate * base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
DEBUG_FATAL(base == NULL, ("base template wrong type"));
return base->getDeleteFlagsCount();
}
size_t count = m_deleteFlags.size();
// if we are extending our base template, add it's count
if (m_deleteFlagsAppend && m_baseData != NULL)
{
const ServerObjectTemplate * base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
if (base != NULL)
count += base->getDeleteFlagsCount();
}
return count;
} // ServerObjectTemplate::getDeleteFlagsCount
ServerObjectTemplate::MoveFlags ServerObjectTemplate::getMoveFlags(int index) const
{
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
}
if (!m_moveFlagsLoaded)
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter moveFlags in template %s", DataResource::getName()));
return static_cast<MoveFlags>(0);
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter moveFlags has not been defined in template %s!", DataResource::getName()));
return base->getMoveFlags(index);
}
}
if (m_moveFlagsAppend && base != NULL)
{
int baseCount = base->getMoveFlagsCount();
if (index < baseCount)
return base->getMoveFlags(index);
index -= baseCount;
}
DEBUG_FATAL(index < 0 || static_cast<size_t>(index) >= m_moveFlags.size(), ("template param index out of range"));
return static_cast<MoveFlags>(m_moveFlags[index]->getValue());
} // ServerObjectTemplate::getMoveFlags
size_t ServerObjectTemplate::getMoveFlagsCount(void) const
{
if (!m_moveFlagsLoaded)
{
if (m_baseData == NULL)
return 0;
const ServerObjectTemplate * base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
DEBUG_FATAL(base == NULL, ("base template wrong type"));
return base->getMoveFlagsCount();
}
size_t count = m_moveFlags.size();
// if we are extending our base template, add it's count
if (m_moveFlagsAppend && m_baseData != NULL)
{
const ServerObjectTemplate * base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
if (base != NULL)
count += base->getMoveFlagsCount();
}
return count;
} // ServerObjectTemplate::getMoveFlagsCount
bool ServerObjectTemplate::getInvulnerable(bool testData) const
{
#ifdef _DEBUG
bool testDataValue = false;
#else
UNREF(testData);
#endif
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getInvulnerable(true);
#endif
}
if (!m_invulnerable.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter invulnerable in template %s", DataResource::getName()));
return false;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter invulnerable has not been defined in template %s!", DataResource::getName()));
return base->getInvulnerable();
}
}
bool value = m_invulnerable.getValue();
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::getInvulnerable
float ServerObjectTemplate::getComplexity(bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getComplexity(true);
#endif
}
if (!m_complexity.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter complexity in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter complexity has not been defined in template %s!", DataResource::getName()));
return base->getComplexity();
}
}
float value = m_complexity.getValue();
char delta = m_complexity.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getComplexity();
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::getComplexity
float ServerObjectTemplate::getComplexityMin(bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getComplexityMin(true);
#endif
}
if (!m_complexity.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter complexity in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter complexity has not been defined in template %s!", DataResource::getName()));
return base->getComplexityMin();
}
}
float value = m_complexity.getMinValue();
char delta = m_complexity.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getComplexityMin();
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::getComplexityMin
float ServerObjectTemplate::getComplexityMax(bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getComplexityMax(true);
#endif
}
if (!m_complexity.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter complexity in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter complexity has not been defined in template %s!", DataResource::getName()));
return base->getComplexityMax();
}
}
float value = m_complexity.getMaxValue();
char delta = m_complexity.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getComplexityMax();
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::getComplexityMax
int ServerObjectTemplate::getTintIndex(bool testData) const
{
#ifdef _DEBUG
int testDataValue = 0;
#else
UNREF(testData);
#endif
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getTintIndex(true);
#endif
}
if (!m_tintIndex.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter tintIndex in template %s", DataResource::getName()));
return 0;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter tintIndex has not been defined in template %s!", DataResource::getName()));
return base->getTintIndex();
}
}
int value = m_tintIndex.getValue();
char delta = m_tintIndex.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
int baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getTintIndex();
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<int>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<int>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::getTintIndex
int ServerObjectTemplate::getTintIndexMin(bool testData) const
{
#ifdef _DEBUG
int testDataValue = 0;
#else
UNREF(testData);
#endif
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getTintIndexMin(true);
#endif
}
if (!m_tintIndex.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter tintIndex in template %s", DataResource::getName()));
return 0;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter tintIndex has not been defined in template %s!", DataResource::getName()));
return base->getTintIndexMin();
}
}
int value = m_tintIndex.getMinValue();
char delta = m_tintIndex.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
int baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getTintIndexMin();
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<int>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<int>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::getTintIndexMin
int ServerObjectTemplate::getTintIndexMax(bool testData) const
{
#ifdef _DEBUG
int testDataValue = 0;
#else
UNREF(testData);
#endif
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getTintIndexMax(true);
#endif
}
if (!m_tintIndex.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter tintIndex in template %s", DataResource::getName()));
return 0;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter tintIndex has not been defined in template %s!", DataResource::getName()));
return base->getTintIndexMax();
}
}
int value = m_tintIndex.getMaxValue();
char delta = m_tintIndex.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
int baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getTintIndexMax();
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<int>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<int>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::getTintIndexMax
float ServerObjectTemplate::getUpdateRanges(UpdateRanges index) const
{
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
}
DEBUG_FATAL(index < 0 || index >= 3, ("template param index out of range"));
if (!m_updateRanges[index].isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter updateRanges in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter updateRanges has not been defined in template %s!", DataResource::getName()));
return base->getUpdateRanges(index);
}
}
float value = m_updateRanges[index].getValue();
char delta = m_updateRanges[index].getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getUpdateRanges(index);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
return value;
} // ServerObjectTemplate::getUpdateRanges
float ServerObjectTemplate::getUpdateRangesMin(UpdateRanges index) const
{
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
}
DEBUG_FATAL(index < 0 || index >= 3, ("template param index out of range"));
if (!m_updateRanges[index].isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter updateRanges in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter updateRanges has not been defined in template %s!", DataResource::getName()));
return base->getUpdateRangesMin(index);
}
}
float value = m_updateRanges[index].getMinValue();
char delta = m_updateRanges[index].getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getUpdateRangesMin(index);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
return value;
} // ServerObjectTemplate::getUpdateRangesMin
float ServerObjectTemplate::getUpdateRangesMax(UpdateRanges index) const
{
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
}
DEBUG_FATAL(index < 0 || index >= 3, ("template param index out of range"));
if (!m_updateRanges[index].isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter updateRanges in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter updateRanges has not been defined in template %s!", DataResource::getName()));
return base->getUpdateRangesMax(index);
}
}
float value = m_updateRanges[index].getMaxValue();
char delta = m_updateRanges[index].getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getUpdateRangesMax(index);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
return value;
} // ServerObjectTemplate::getUpdateRangesMax
void ServerObjectTemplate::getContents(Contents &data, int index) const
{
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
}
if (!m_contentsLoaded)
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter contents in template %s", DataResource::getName()));
return ;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter contents has not been defined in template %s!", DataResource::getName()));
base->getContents(data, index);
return;
}
}
if (m_contentsAppend && base != NULL)
{
int baseCount = base->getContentsCount();
if (index < baseCount)
{
base->getContents(data, index);
return;
}
index -= baseCount;
}
DEBUG_FATAL(index < 0 || static_cast<size_t>(index) >= m_contents.size(), ("template param index out of range"));
const ObjectTemplate * structTemplate = (*m_contents[index]).getValue();
NOT_NULL(structTemplate);
const _Contents *param = dynamic_cast<const _Contents *>(structTemplate);
NOT_NULL(param);
data.slotName = param->getSlotName(m_versionOk);
data.equipObject = param->getEquipObject(m_versionOk);
data.content = param->getContent(m_versionOk);
} // ServerObjectTemplate::getContents
void ServerObjectTemplate::getContentsMin(Contents &data, int index) const
{
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
}
if (!m_contentsLoaded)
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter contents in template %s", DataResource::getName()));
return ;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter contents has not been defined in template %s!", DataResource::getName()));
base->getContentsMin(data, index);
return;
}
}
if (m_contentsAppend && base != NULL)
{
int baseCount = base->getContentsCount();
if (index < baseCount)
{
base->getContentsMin(data, index);
return;
}
index -= baseCount;
}
DEBUG_FATAL(index < 0 || static_cast<size_t>(index) >= m_contents.size(), ("template param index out of range"));
const ObjectTemplate * structTemplate = (*m_contents[index]).getValue();
NOT_NULL(structTemplate);
const _Contents *param = dynamic_cast<const _Contents *>(structTemplate);
NOT_NULL(param);
data.slotName = param->getSlotName(m_versionOk);
data.equipObject = param->getEquipObject(m_versionOk);
data.content = param->getContent(m_versionOk);
} // ServerObjectTemplate::getContentsMin
void ServerObjectTemplate::getContentsMax(Contents &data, int index) const
{
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
}
if (!m_contentsLoaded)
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter contents in template %s", DataResource::getName()));
return ;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter contents has not been defined in template %s!", DataResource::getName()));
base->getContentsMax(data, index);
return;
}
}
if (m_contentsAppend && base != NULL)
{
int baseCount = base->getContentsCount();
if (index < baseCount)
{
base->getContentsMax(data, index);
return;
}
index -= baseCount;
}
DEBUG_FATAL(index < 0 || static_cast<size_t>(index) >= m_contents.size(), ("template param index out of range"));
const ObjectTemplate * structTemplate = (*m_contents[index]).getValue();
NOT_NULL(structTemplate);
const _Contents *param = dynamic_cast<const _Contents *>(structTemplate);
NOT_NULL(param);
data.slotName = param->getSlotName(m_versionOk);
data.equipObject = param->getEquipObject(m_versionOk);
data.content = param->getContent(m_versionOk);
} // ServerObjectTemplate::getContentsMax
size_t ServerObjectTemplate::getContentsCount(void) const
{
if (!m_contentsLoaded)
{
if (m_baseData == NULL)
return 0;
const ServerObjectTemplate * base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
DEBUG_FATAL(base == NULL, ("base template wrong type"));
return base->getContentsCount();
}
size_t count = m_contents.size();
// if we are extending our base template, add it's count
if (m_contentsAppend && m_baseData != NULL)
{
const ServerObjectTemplate * base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
if (base != NULL)
count += base->getContentsCount();
}
return count;
} // ServerObjectTemplate::getContentsCount
void ServerObjectTemplate::getXpPoints(Xp &data, int index) const
{
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
}
if (!m_xpPointsLoaded)
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter xpPoints in template %s", DataResource::getName()));
return ;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter xpPoints has not been defined in template %s!", DataResource::getName()));
base->getXpPoints(data, index);
return;
}
}
if (m_xpPointsAppend && base != NULL)
{
int baseCount = base->getXpPointsCount();
if (index < baseCount)
{
base->getXpPoints(data, index);
return;
}
index -= baseCount;
}
DEBUG_FATAL(index < 0 || static_cast<size_t>(index) >= m_xpPoints.size(), ("template param index out of range"));
const ObjectTemplate * structTemplate = (*m_xpPoints[index]).getValue();
NOT_NULL(structTemplate);
const _Xp *param = dynamic_cast<const _Xp *>(structTemplate);
NOT_NULL(param);
data.type = param->getType(m_versionOk);
data.level = param->getLevel(m_versionOk);
data.value = param->getValue(m_versionOk);
} // ServerObjectTemplate::getXpPoints
void ServerObjectTemplate::getXpPointsMin(Xp &data, int index) const
{
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
}
if (!m_xpPointsLoaded)
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter xpPoints in template %s", DataResource::getName()));
return ;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter xpPoints has not been defined in template %s!", DataResource::getName()));
base->getXpPointsMin(data, index);
return;
}
}
if (m_xpPointsAppend && base != NULL)
{
int baseCount = base->getXpPointsCount();
if (index < baseCount)
{
base->getXpPointsMin(data, index);
return;
}
index -= baseCount;
}
DEBUG_FATAL(index < 0 || static_cast<size_t>(index) >= m_xpPoints.size(), ("template param index out of range"));
const ObjectTemplate * structTemplate = (*m_xpPoints[index]).getValue();
NOT_NULL(structTemplate);
const _Xp *param = dynamic_cast<const _Xp *>(structTemplate);
NOT_NULL(param);
data.type = param->getType(m_versionOk);
data.level = param->getLevelMin(m_versionOk);
data.value = param->getValueMin(m_versionOk);
} // ServerObjectTemplate::getXpPointsMin
void ServerObjectTemplate::getXpPointsMax(Xp &data, int index) const
{
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
}
if (!m_xpPointsLoaded)
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter xpPoints in template %s", DataResource::getName()));
return ;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter xpPoints has not been defined in template %s!", DataResource::getName()));
base->getXpPointsMax(data, index);
return;
}
}
if (m_xpPointsAppend && base != NULL)
{
int baseCount = base->getXpPointsCount();
if (index < baseCount)
{
base->getXpPointsMax(data, index);
return;
}
index -= baseCount;
}
DEBUG_FATAL(index < 0 || static_cast<size_t>(index) >= m_xpPoints.size(), ("template param index out of range"));
const ObjectTemplate * structTemplate = (*m_xpPoints[index]).getValue();
NOT_NULL(structTemplate);
const _Xp *param = dynamic_cast<const _Xp *>(structTemplate);
NOT_NULL(param);
data.type = param->getType(m_versionOk);
data.level = param->getLevelMax(m_versionOk);
data.value = param->getValueMax(m_versionOk);
} // ServerObjectTemplate::getXpPointsMax
size_t ServerObjectTemplate::getXpPointsCount(void) const
{
if (!m_xpPointsLoaded)
{
if (m_baseData == NULL)
return 0;
const ServerObjectTemplate * base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
DEBUG_FATAL(base == NULL, ("base template wrong type"));
return base->getXpPointsCount();
}
size_t count = m_xpPoints.size();
// if we are extending our base template, add it's count
if (m_xpPointsAppend && m_baseData != NULL)
{
const ServerObjectTemplate * base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
if (base != NULL)
count += base->getXpPointsCount();
}
return count;
} // ServerObjectTemplate::getXpPointsCount
bool ServerObjectTemplate::getPersistByDefault(bool testData) const
{
#ifdef _DEBUG
bool testDataValue = false;
#else
UNREF(testData);
#endif
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getPersistByDefault(true);
#endif
}
if (!m_persistByDefault.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter persistByDefault in template %s", DataResource::getName()));
return false;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter persistByDefault has not been defined in template %s!", DataResource::getName()));
return base->getPersistByDefault();
}
}
bool value = m_persistByDefault.getValue();
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::getPersistByDefault
bool ServerObjectTemplate::getPersistContents(bool testData) const
{
#ifdef _DEBUG
bool testDataValue = false;
#else
UNREF(testData);
#endif
const ServerObjectTemplate * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getPersistContents(true);
#endif
}
if (!m_persistContents.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!m_versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter persistContents in template %s", DataResource::getName()));
return false;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter persistContents has not been defined in template %s!", DataResource::getName()));
return base->getPersistContents();
}
}
bool value = m_persistContents.getValue();
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::getPersistContents
#ifdef _DEBUG
/**
* Special function used by datalint. Checks for duplicate values in base and derived templates.
*/
void ServerObjectTemplate::testValues(void) const
{
IGNORE_RETURN(getSharedTemplate(true));
IGNORE_RETURN(getVolumeMin(true));
IGNORE_RETURN(getVolumeMax(true));
IGNORE_RETURN(getInvulnerable(true));
IGNORE_RETURN(getComplexityMin(true));
IGNORE_RETURN(getComplexityMax(true));
IGNORE_RETURN(getTintIndexMin(true));
IGNORE_RETURN(getTintIndexMax(true));
IGNORE_RETURN(getPersistByDefault(true));
IGNORE_RETURN(getPersistContents(true));
} // ServerObjectTemplate::testValues
#endif
/**
* Loads the template data from an iff file. We should already be in the form
* for this template.
*
* @param file file to load from
*/
void ServerObjectTemplate::load(Iff &file)
{
static const int MAX_NAME_SIZE = 256;
char paramName[MAX_NAME_SIZE];
if (file.getCurrentName() != ServerObjectTemplate_tag)
{
return;
}
file.enterForm();
m_templateVersion = file.getCurrentName();
if (m_templateVersion == TAG(D,E,R,V))
{
file.enterForm();
file.enterChunk();
std::string baseFilename;
file.read_string(baseFilename);
file.exitChunk();
const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename);
DEBUG_WARNING(base == NULL, ("was unable to load base template %s", baseFilename.c_str()));
if (m_baseData == base && base != NULL)
base->releaseReference();
else
{
if (m_baseData != NULL)
m_baseData->releaseReference();
m_baseData = base;
}
file.exitForm();
m_templateVersion = file.getCurrentName();
}
if (getHighestTemplateVersion() != TAG(0,0,1,1))
{
if (DataLint::isEnabled())
DEBUG_WARNING(true, ("template %s version out of date", file.getFileName()));
m_versionOk = false;
}
file.enterForm();
file.enterChunk();
int paramCount = file.read_int32();
file.exitChunk();
for (int i = 0; i < paramCount; ++i)
{
file.enterChunk();
file.read_string(paramName, MAX_NAME_SIZE);
if (strcmp(paramName, "sharedTemplate") == 0)
m_sharedTemplate.loadFromIff(file);
else if (strcmp(paramName, "scripts") == 0)
{
std::vector<StringParam *>::iterator iter;
for (iter = m_scripts.begin(); iter != m_scripts.end(); ++iter)
{
delete *iter;
*iter = NULL;
}
m_scripts.clear();
m_scriptsAppend = file.read_bool8();
int listCount = file.read_int32();
for (int j = 0; j < listCount; ++j)
{
StringParam * newData = new StringParam;
newData->loadFromIff(file);
m_scripts.push_back(newData);
}
m_scriptsLoaded = true;
}
else if (strcmp(paramName, "objvars") == 0)
m_objvars.loadFromIff(file);
else if (strcmp(paramName, "volume") == 0)
m_volume.loadFromIff(file);
else if (strcmp(paramName, "visibleFlags") == 0)
{
std::vector<IntegerParam *>::iterator iter;
for (iter = m_visibleFlags.begin(); iter != m_visibleFlags.end(); ++iter)
{
delete *iter;
*iter = NULL;
}
m_visibleFlags.clear();
m_visibleFlagsAppend = file.read_bool8();
int listCount = file.read_int32();
for (int j = 0; j < listCount; ++j)
{
IntegerParam * newData = new IntegerParam;
newData->loadFromIff(file);
m_visibleFlags.push_back(newData);
}
m_visibleFlagsLoaded = true;
}
else if (strcmp(paramName, "deleteFlags") == 0)
{
std::vector<IntegerParam *>::iterator iter;
for (iter = m_deleteFlags.begin(); iter != m_deleteFlags.end(); ++iter)
{
delete *iter;
*iter = NULL;
}
m_deleteFlags.clear();
m_deleteFlagsAppend = file.read_bool8();
int listCount = file.read_int32();
for (int j = 0; j < listCount; ++j)
{
IntegerParam * newData = new IntegerParam;
newData->loadFromIff(file);
m_deleteFlags.push_back(newData);
}
m_deleteFlagsLoaded = true;
}
else if (strcmp(paramName, "moveFlags") == 0)
{
std::vector<IntegerParam *>::iterator iter;
for (iter = m_moveFlags.begin(); iter != m_moveFlags.end(); ++iter)
{
delete *iter;
*iter = NULL;
}
m_moveFlags.clear();
m_moveFlagsAppend = file.read_bool8();
int listCount = file.read_int32();
for (int j = 0; j < listCount; ++j)
{
IntegerParam * newData = new IntegerParam;
newData->loadFromIff(file);
m_moveFlags.push_back(newData);
}
m_moveFlagsLoaded = true;
}
else if (strcmp(paramName, "invulnerable") == 0)
m_invulnerable.loadFromIff(file);
else if (strcmp(paramName, "complexity") == 0)
m_complexity.loadFromIff(file);
else if (strcmp(paramName, "tintIndex") == 0)
m_tintIndex.loadFromIff(file);
else if (strcmp(paramName, "updateRanges") == 0)
{
int listCount = file.read_int32();
DEBUG_WARNING(listCount != 3, ("Template %s: read array size of %d for array \"updateRanges\" of size 3, reading values anyway", file.getFileName(), listCount));
int j;
for (j = 0; j < 3 && j < listCount; ++j)
m_updateRanges[j].loadFromIff(file);
// if there are more params for updateRanges read and dump them
for (; j < listCount; ++j)
{
FloatParam dummy;
dummy.loadFromIff(file);
}
}
else if (strcmp(paramName, "contents") == 0)
{
std::vector<StructParamOT *>::iterator iter;
for (iter = m_contents.begin(); iter != m_contents.end(); ++iter)
{
delete *iter;
*iter = NULL;
}
m_contents.clear();
m_contentsAppend = file.read_bool8();
int listCount = file.read_int32();
for (int j = 0; j < listCount; ++j)
{
StructParamOT * newData = new StructParamOT;
newData->loadFromIff(file);
m_contents.push_back(newData);
}
m_contentsLoaded = true;
}
else if (strcmp(paramName, "xpPoints") == 0)
{
std::vector<StructParamOT *>::iterator iter;
for (iter = m_xpPoints.begin(); iter != m_xpPoints.end(); ++iter)
{
delete *iter;
*iter = NULL;
}
m_xpPoints.clear();
m_xpPointsAppend = file.read_bool8();
int listCount = file.read_int32();
for (int j = 0; j < listCount; ++j)
{
StructParamOT * newData = new StructParamOT;
newData->loadFromIff(file);
m_xpPoints.push_back(newData);
}
m_xpPointsLoaded = true;
}
else if (strcmp(paramName, "persistByDefault") == 0)
m_persistByDefault.loadFromIff(file);
else if (strcmp(paramName, "persistContents") == 0)
m_persistContents.loadFromIff(file);
file.exitChunk(true);
}
file.exitForm();
return;
} // ServerObjectTemplate::load
//=============================================================================
// class ServerObjectTemplate::_AttribMod
/**
* Class constructor.
*/
ServerObjectTemplate::_AttribMod::_AttribMod(const std::string & filename)
: ObjectTemplate(filename)
{
} // ServerObjectTemplate::_AttribMod::_AttribMod
/**
* Class destructor.
*/
ServerObjectTemplate::_AttribMod::~_AttribMod()
{
} // ServerObjectTemplate::_AttribMod::~_AttribMod
/**
* Static function used to register this template.
*/
void ServerObjectTemplate::_AttribMod::registerMe(void)
{
ObjectTemplateList::registerTemplate(_AttribMod_tag, create);
} // ServerObjectTemplate::_AttribMod::registerMe
/**
* Creates a ServerObjectTemplate::_AttribMod template.
*
* @return a new instance of the template
*/
ObjectTemplate * ServerObjectTemplate::_AttribMod::create(const std::string & filename)
{
return new ServerObjectTemplate::_AttribMod(filename);
} // ServerObjectTemplate::_AttribMod::create
/**
* Returns the template id.
*
* @return the template id
*/
Tag ServerObjectTemplate::_AttribMod::getId(void) const
{
return _AttribMod_tag;
} // ServerObjectTemplate::_AttribMod::getId
ServerObjectTemplate::Attributes ServerObjectTemplate::_AttribMod::getTarget(bool versionOk, bool testData) const
{
#ifdef _DEBUG
ServerObjectTemplate::Attributes testDataValue = static_cast<ServerObjectTemplate::Attributes>(0);
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_AttribMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_AttribMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getTarget(true);
#endif
}
if (!m_target.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter target in template %s", DataResource::getName()));
return static_cast<Attributes>(0);
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter target has not been defined in template %s!", DataResource::getName()));
return base->getTarget(versionOk);
}
}
Attributes value = static_cast<Attributes>(m_target.getValue());
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_AttribMod::getTarget
int ServerObjectTemplate::_AttribMod::getValue(bool versionOk, bool testData) const
{
#ifdef _DEBUG
int testDataValue = 0;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_AttribMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_AttribMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getValue(true);
#endif
}
if (!m_value.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter value in template %s", DataResource::getName()));
return 0;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter value has not been defined in template %s!", DataResource::getName()));
return base->getValue(versionOk);
}
}
int value = m_value.getValue();
char delta = m_value.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
int baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getValue(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<int>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<int>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_AttribMod::getValue
int ServerObjectTemplate::_AttribMod::getValueMin(bool versionOk, bool testData) const
{
#ifdef _DEBUG
int testDataValue = 0;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_AttribMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_AttribMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getValueMin(true);
#endif
}
if (!m_value.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter value in template %s", DataResource::getName()));
return 0;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter value has not been defined in template %s!", DataResource::getName()));
return base->getValueMin(versionOk);
}
}
int value = m_value.getMinValue();
char delta = m_value.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
int baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getValueMin(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<int>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<int>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_AttribMod::getValueMin
int ServerObjectTemplate::_AttribMod::getValueMax(bool versionOk, bool testData) const
{
#ifdef _DEBUG
int testDataValue = 0;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_AttribMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_AttribMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getValueMax(true);
#endif
}
if (!m_value.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter value in template %s", DataResource::getName()));
return 0;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter value has not been defined in template %s!", DataResource::getName()));
return base->getValueMax(versionOk);
}
}
int value = m_value.getMaxValue();
char delta = m_value.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
int baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getValueMax(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<int>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<int>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_AttribMod::getValueMax
float ServerObjectTemplate::_AttribMod::getTime(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_AttribMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_AttribMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getTime(true);
#endif
}
if (!m_time.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter time in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter time has not been defined in template %s!", DataResource::getName()));
return base->getTime(versionOk);
}
}
float value = m_time.getValue();
char delta = m_time.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getTime(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_AttribMod::getTime
float ServerObjectTemplate::_AttribMod::getTimeMin(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_AttribMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_AttribMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getTimeMin(true);
#endif
}
if (!m_time.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter time in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter time has not been defined in template %s!", DataResource::getName()));
return base->getTimeMin(versionOk);
}
}
float value = m_time.getMinValue();
char delta = m_time.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getTimeMin(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_AttribMod::getTimeMin
float ServerObjectTemplate::_AttribMod::getTimeMax(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_AttribMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_AttribMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getTimeMax(true);
#endif
}
if (!m_time.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter time in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter time has not been defined in template %s!", DataResource::getName()));
return base->getTimeMax(versionOk);
}
}
float value = m_time.getMaxValue();
char delta = m_time.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getTimeMax(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_AttribMod::getTimeMax
float ServerObjectTemplate::_AttribMod::getTimeAtValue(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_AttribMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_AttribMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getTimeAtValue(true);
#endif
}
if (!m_timeAtValue.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter timeAtValue in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter timeAtValue has not been defined in template %s!", DataResource::getName()));
return base->getTimeAtValue(versionOk);
}
}
float value = m_timeAtValue.getValue();
char delta = m_timeAtValue.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getTimeAtValue(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_AttribMod::getTimeAtValue
float ServerObjectTemplate::_AttribMod::getTimeAtValueMin(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_AttribMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_AttribMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getTimeAtValueMin(true);
#endif
}
if (!m_timeAtValue.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter timeAtValue in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter timeAtValue has not been defined in template %s!", DataResource::getName()));
return base->getTimeAtValueMin(versionOk);
}
}
float value = m_timeAtValue.getMinValue();
char delta = m_timeAtValue.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getTimeAtValueMin(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_AttribMod::getTimeAtValueMin
float ServerObjectTemplate::_AttribMod::getTimeAtValueMax(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_AttribMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_AttribMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getTimeAtValueMax(true);
#endif
}
if (!m_timeAtValue.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter timeAtValue in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter timeAtValue has not been defined in template %s!", DataResource::getName()));
return base->getTimeAtValueMax(versionOk);
}
}
float value = m_timeAtValue.getMaxValue();
char delta = m_timeAtValue.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getTimeAtValueMax(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_AttribMod::getTimeAtValueMax
float ServerObjectTemplate::_AttribMod::getDecay(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_AttribMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_AttribMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getDecay(true);
#endif
}
if (!m_decay.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter decay in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter decay has not been defined in template %s!", DataResource::getName()));
return base->getDecay(versionOk);
}
}
float value = m_decay.getValue();
char delta = m_decay.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getDecay(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_AttribMod::getDecay
float ServerObjectTemplate::_AttribMod::getDecayMin(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_AttribMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_AttribMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getDecayMin(true);
#endif
}
if (!m_decay.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter decay in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter decay has not been defined in template %s!", DataResource::getName()));
return base->getDecayMin(versionOk);
}
}
float value = m_decay.getMinValue();
char delta = m_decay.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getDecayMin(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_AttribMod::getDecayMin
float ServerObjectTemplate::_AttribMod::getDecayMax(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_AttribMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_AttribMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getDecayMax(true);
#endif
}
if (!m_decay.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter decay in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter decay has not been defined in template %s!", DataResource::getName()));
return base->getDecayMax(versionOk);
}
}
float value = m_decay.getMaxValue();
char delta = m_decay.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getDecayMax(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_AttribMod::getDecayMax
#ifdef _DEBUG
/**
* Special function used by datalint. Checks for duplicate values in base and derived templates.
*/
void ServerObjectTemplate::_AttribMod::testValues(void) const
{
IGNORE_RETURN(getTarget(true));
IGNORE_RETURN(getValueMin(true));
IGNORE_RETURN(getValueMax(true));
IGNORE_RETURN(getTimeMin(true));
IGNORE_RETURN(getTimeMax(true));
IGNORE_RETURN(getTimeAtValueMin(true));
IGNORE_RETURN(getTimeAtValueMax(true));
IGNORE_RETURN(getDecayMin(true));
IGNORE_RETURN(getDecayMax(true));
} // ServerObjectTemplate::_AttribMod::testValues
#endif
/**
* Loads the template data from an iff file. We should already be in the form
* for this template.
*
* @param file file to load from
*/
void ServerObjectTemplate::_AttribMod::load(Iff &file)
{
static const int MAX_NAME_SIZE = 256;
char paramName[MAX_NAME_SIZE];
file.enterForm();
file.enterChunk();
int paramCount = file.read_int32();
file.exitChunk();
for (int i = 0; i < paramCount; ++i)
{
file.enterChunk();
file.read_string(paramName, MAX_NAME_SIZE);
if (strcmp(paramName, "target") == 0)
m_target.loadFromIff(file);
else if (strcmp(paramName, "value") == 0)
m_value.loadFromIff(file);
else if (strcmp(paramName, "time") == 0)
m_time.loadFromIff(file);
else if (strcmp(paramName, "timeAtValue") == 0)
m_timeAtValue.loadFromIff(file);
else if (strcmp(paramName, "decay") == 0)
m_decay.loadFromIff(file);
file.exitChunk(true);
}
file.exitForm();
UNREF(file);
} // ServerObjectTemplate::_AttribMod::load
//=============================================================================
// struct ServerObjectTemplate::Contents
/**
* Struct constructor.
*/
ServerObjectTemplate::Contents::Contents(void)
{
content = NULL;
} // ServerObjectTemplate::Contents::Contents()
/**
* Struct copy constructor.
*/
ServerObjectTemplate::Contents::Contents(const ServerObjectTemplate::Contents & source) :
slotName(source.slotName),
equipObject(source.equipObject),
content(source.content)
{
if (content != NULL)
const_cast<ObjectTemplate *>(content)->addReference();
} // ServerObjectTemplate::Contents::Contents(const ServerObjectTemplate::Contents &)
/**
* Struct destructor.
*/
ServerObjectTemplate::Contents::~Contents()
{
if (content != NULL)
{
content->releaseReference();
content = NULL;
}
} // ServerObjectTemplate::Contents::~Contents
#ifdef WIN32
/**
* Struct destructor.
*/
ServerObjectTemplate::Contents & ServerObjectTemplate::Contents::operator =(const ServerObjectTemplate::Contents &)
{
DEBUG_FATAL(true, ("operator = should not be called for template structures!"));
return *this;
} // ServerObjectTemplate::Contents::operator =
#endif
//=============================================================================
// class ServerObjectTemplate::_Contents
/**
* Class constructor.
*/
ServerObjectTemplate::_Contents::_Contents(const std::string & filename)
: ObjectTemplate(filename)
{
} // ServerObjectTemplate::_Contents::_Contents
/**
* Class destructor.
*/
ServerObjectTemplate::_Contents::~_Contents()
{
} // ServerObjectTemplate::_Contents::~_Contents
/**
* Static function used to register this template.
*/
void ServerObjectTemplate::_Contents::registerMe(void)
{
ObjectTemplateList::registerTemplate(_Contents_tag, create);
} // ServerObjectTemplate::_Contents::registerMe
/**
* Creates a ServerObjectTemplate::_Contents template.
*
* @return a new instance of the template
*/
ObjectTemplate * ServerObjectTemplate::_Contents::create(const std::string & filename)
{
return new ServerObjectTemplate::_Contents(filename);
} // ServerObjectTemplate::_Contents::create
/**
* Returns the template id.
*
* @return the template id
*/
Tag ServerObjectTemplate::_Contents::getId(void) const
{
return _Contents_tag;
} // ServerObjectTemplate::_Contents::getId
const std::string & ServerObjectTemplate::_Contents::getSlotName(bool versionOk, bool testData) const
{
#ifdef _DEBUG
std::string testDataValue = DefaultString;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_Contents * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_Contents *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getSlotName(true);
#endif
}
if (!m_slotName.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter slotName in template %s", DataResource::getName()));
return DefaultString;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter slotName has not been defined in template %s!", DataResource::getName()));
return base->getSlotName(versionOk);
}
}
const std::string & value = m_slotName.getValue();
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_Contents::getSlotName
bool ServerObjectTemplate::_Contents::getEquipObject(bool versionOk, bool testData) const
{
#ifdef _DEBUG
bool testDataValue = false;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_Contents * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_Contents *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getEquipObject(true);
#endif
}
if (!m_equipObject.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter equipObject in template %s", DataResource::getName()));
return false;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter equipObject has not been defined in template %s!", DataResource::getName()));
return base->getEquipObject(versionOk);
}
}
bool value = m_equipObject.getValue();
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_Contents::getEquipObject
const ServerObjectTemplate * ServerObjectTemplate::_Contents::getContent(bool versionOk) const
{
const ServerObjectTemplate::_Contents * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_Contents *>(m_baseData);
}
if (!m_content.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter content in template %s", DataResource::getName()));
return NULL;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter content has not been defined in template %s!", DataResource::getName()));
return base->getContent(versionOk);
}
}
const ServerObjectTemplate * returnValue = NULL;
const std::string & templateName = m_content.getValue();
if (!templateName.empty())
{
returnValue = dynamic_cast<const ServerObjectTemplate *>(ObjectTemplateList::fetch(templateName));
if (returnValue == NULL)
WARNING_STRICT_FATAL(true, ("Error loading template %s",templateName.c_str()));
}
return returnValue;
} // ServerObjectTemplate::_Contents::getContent
#ifdef _DEBUG
/**
* Special function used by datalint. Checks for duplicate values in base and derived templates.
*/
void ServerObjectTemplate::_Contents::testValues(void) const
{
IGNORE_RETURN(getSlotName(true));
IGNORE_RETURN(getEquipObject(true));
} // ServerObjectTemplate::_Contents::testValues
#endif
/**
* Loads the template data from an iff file. We should already be in the form
* for this template.
*
* @param file file to load from
*/
void ServerObjectTemplate::_Contents::load(Iff &file)
{
static const int MAX_NAME_SIZE = 256;
char paramName[MAX_NAME_SIZE];
file.enterForm();
file.enterChunk();
int paramCount = file.read_int32();
file.exitChunk();
for (int i = 0; i < paramCount; ++i)
{
file.enterChunk();
file.read_string(paramName, MAX_NAME_SIZE);
if (strcmp(paramName, "slotName") == 0)
m_slotName.loadFromIff(file);
else if (strcmp(paramName, "equipObject") == 0)
m_equipObject.loadFromIff(file);
else if (strcmp(paramName, "content") == 0)
m_content.loadFromIff(file);
file.exitChunk(true);
}
file.exitForm();
UNREF(file);
} // ServerObjectTemplate::_Contents::load
//=============================================================================
// class ServerObjectTemplate::_MentalStateMod
/**
* Class constructor.
*/
ServerObjectTemplate::_MentalStateMod::_MentalStateMod(const std::string & filename)
: ObjectTemplate(filename)
{
} // ServerObjectTemplate::_MentalStateMod::_MentalStateMod
/**
* Class destructor.
*/
ServerObjectTemplate::_MentalStateMod::~_MentalStateMod()
{
} // ServerObjectTemplate::_MentalStateMod::~_MentalStateMod
/**
* Static function used to register this template.
*/
void ServerObjectTemplate::_MentalStateMod::registerMe(void)
{
ObjectTemplateList::registerTemplate(_MentalStateMod_tag, create);
} // ServerObjectTemplate::_MentalStateMod::registerMe
/**
* Creates a ServerObjectTemplate::_MentalStateMod template.
*
* @return a new instance of the template
*/
ObjectTemplate * ServerObjectTemplate::_MentalStateMod::create(const std::string & filename)
{
return new ServerObjectTemplate::_MentalStateMod(filename);
} // ServerObjectTemplate::_MentalStateMod::create
/**
* Returns the template id.
*
* @return the template id
*/
Tag ServerObjectTemplate::_MentalStateMod::getId(void) const
{
return _MentalStateMod_tag;
} // ServerObjectTemplate::_MentalStateMod::getId
ServerObjectTemplate::MentalStates ServerObjectTemplate::_MentalStateMod::getTarget(bool versionOk, bool testData) const
{
#ifdef _DEBUG
ServerObjectTemplate::MentalStates testDataValue = static_cast<ServerObjectTemplate::MentalStates>(0);
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_MentalStateMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_MentalStateMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getTarget(true);
#endif
}
if (!m_target.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter target in template %s", DataResource::getName()));
return static_cast<MentalStates>(0);
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter target has not been defined in template %s!", DataResource::getName()));
return base->getTarget(versionOk);
}
}
MentalStates value = static_cast<MentalStates>(m_target.getValue());
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_MentalStateMod::getTarget
float ServerObjectTemplate::_MentalStateMod::getValue(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_MentalStateMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_MentalStateMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getValue(true);
#endif
}
if (!m_value.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter value in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter value has not been defined in template %s!", DataResource::getName()));
return base->getValue(versionOk);
}
}
float value = m_value.getValue();
char delta = m_value.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getValue(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_MentalStateMod::getValue
float ServerObjectTemplate::_MentalStateMod::getValueMin(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_MentalStateMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_MentalStateMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getValueMin(true);
#endif
}
if (!m_value.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter value in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter value has not been defined in template %s!", DataResource::getName()));
return base->getValueMin(versionOk);
}
}
float value = m_value.getMinValue();
char delta = m_value.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getValueMin(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_MentalStateMod::getValueMin
float ServerObjectTemplate::_MentalStateMod::getValueMax(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_MentalStateMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_MentalStateMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getValueMax(true);
#endif
}
if (!m_value.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter value in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter value has not been defined in template %s!", DataResource::getName()));
return base->getValueMax(versionOk);
}
}
float value = m_value.getMaxValue();
char delta = m_value.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getValueMax(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_MentalStateMod::getValueMax
float ServerObjectTemplate::_MentalStateMod::getTime(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_MentalStateMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_MentalStateMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getTime(true);
#endif
}
if (!m_time.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter time in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter time has not been defined in template %s!", DataResource::getName()));
return base->getTime(versionOk);
}
}
float value = m_time.getValue();
char delta = m_time.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getTime(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_MentalStateMod::getTime
float ServerObjectTemplate::_MentalStateMod::getTimeMin(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_MentalStateMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_MentalStateMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getTimeMin(true);
#endif
}
if (!m_time.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter time in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter time has not been defined in template %s!", DataResource::getName()));
return base->getTimeMin(versionOk);
}
}
float value = m_time.getMinValue();
char delta = m_time.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getTimeMin(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_MentalStateMod::getTimeMin
float ServerObjectTemplate::_MentalStateMod::getTimeMax(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_MentalStateMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_MentalStateMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getTimeMax(true);
#endif
}
if (!m_time.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter time in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter time has not been defined in template %s!", DataResource::getName()));
return base->getTimeMax(versionOk);
}
}
float value = m_time.getMaxValue();
char delta = m_time.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getTimeMax(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_MentalStateMod::getTimeMax
float ServerObjectTemplate::_MentalStateMod::getTimeAtValue(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_MentalStateMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_MentalStateMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getTimeAtValue(true);
#endif
}
if (!m_timeAtValue.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter timeAtValue in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter timeAtValue has not been defined in template %s!", DataResource::getName()));
return base->getTimeAtValue(versionOk);
}
}
float value = m_timeAtValue.getValue();
char delta = m_timeAtValue.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getTimeAtValue(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_MentalStateMod::getTimeAtValue
float ServerObjectTemplate::_MentalStateMod::getTimeAtValueMin(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_MentalStateMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_MentalStateMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getTimeAtValueMin(true);
#endif
}
if (!m_timeAtValue.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter timeAtValue in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter timeAtValue has not been defined in template %s!", DataResource::getName()));
return base->getTimeAtValueMin(versionOk);
}
}
float value = m_timeAtValue.getMinValue();
char delta = m_timeAtValue.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getTimeAtValueMin(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_MentalStateMod::getTimeAtValueMin
float ServerObjectTemplate::_MentalStateMod::getTimeAtValueMax(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_MentalStateMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_MentalStateMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getTimeAtValueMax(true);
#endif
}
if (!m_timeAtValue.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter timeAtValue in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter timeAtValue has not been defined in template %s!", DataResource::getName()));
return base->getTimeAtValueMax(versionOk);
}
}
float value = m_timeAtValue.getMaxValue();
char delta = m_timeAtValue.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getTimeAtValueMax(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_MentalStateMod::getTimeAtValueMax
float ServerObjectTemplate::_MentalStateMod::getDecay(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_MentalStateMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_MentalStateMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getDecay(true);
#endif
}
if (!m_decay.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter decay in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter decay has not been defined in template %s!", DataResource::getName()));
return base->getDecay(versionOk);
}
}
float value = m_decay.getValue();
char delta = m_decay.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getDecay(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_MentalStateMod::getDecay
float ServerObjectTemplate::_MentalStateMod::getDecayMin(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_MentalStateMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_MentalStateMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getDecayMin(true);
#endif
}
if (!m_decay.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter decay in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter decay has not been defined in template %s!", DataResource::getName()));
return base->getDecayMin(versionOk);
}
}
float value = m_decay.getMinValue();
char delta = m_decay.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getDecayMin(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_MentalStateMod::getDecayMin
float ServerObjectTemplate::_MentalStateMod::getDecayMax(bool versionOk, bool testData) const
{
#ifdef _DEBUG
float testDataValue = 0.0f;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_MentalStateMod * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_MentalStateMod *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getDecayMax(true);
#endif
}
if (!m_decay.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter decay in template %s", DataResource::getName()));
return 0.0f;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter decay has not been defined in template %s!", DataResource::getName()));
return base->getDecayMax(versionOk);
}
}
float value = m_decay.getMaxValue();
char delta = m_decay.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
float baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getDecayMax(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<float>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<float>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_MentalStateMod::getDecayMax
#ifdef _DEBUG
/**
* Special function used by datalint. Checks for duplicate values in base and derived templates.
*/
void ServerObjectTemplate::_MentalStateMod::testValues(void) const
{
IGNORE_RETURN(getTarget(true));
IGNORE_RETURN(getValueMin(true));
IGNORE_RETURN(getValueMax(true));
IGNORE_RETURN(getTimeMin(true));
IGNORE_RETURN(getTimeMax(true));
IGNORE_RETURN(getTimeAtValueMin(true));
IGNORE_RETURN(getTimeAtValueMax(true));
IGNORE_RETURN(getDecayMin(true));
IGNORE_RETURN(getDecayMax(true));
} // ServerObjectTemplate::_MentalStateMod::testValues
#endif
/**
* Loads the template data from an iff file. We should already be in the form
* for this template.
*
* @param file file to load from
*/
void ServerObjectTemplate::_MentalStateMod::load(Iff &file)
{
static const int MAX_NAME_SIZE = 256;
char paramName[MAX_NAME_SIZE];
file.enterForm();
file.enterChunk();
int paramCount = file.read_int32();
file.exitChunk();
for (int i = 0; i < paramCount; ++i)
{
file.enterChunk();
file.read_string(paramName, MAX_NAME_SIZE);
if (strcmp(paramName, "target") == 0)
m_target.loadFromIff(file);
else if (strcmp(paramName, "value") == 0)
m_value.loadFromIff(file);
else if (strcmp(paramName, "time") == 0)
m_time.loadFromIff(file);
else if (strcmp(paramName, "timeAtValue") == 0)
m_timeAtValue.loadFromIff(file);
else if (strcmp(paramName, "decay") == 0)
m_decay.loadFromIff(file);
file.exitChunk(true);
}
file.exitForm();
UNREF(file);
} // ServerObjectTemplate::_MentalStateMod::load
//=============================================================================
// class ServerObjectTemplate::_Xp
/**
* Class constructor.
*/
ServerObjectTemplate::_Xp::_Xp(const std::string & filename)
: ObjectTemplate(filename)
{
} // ServerObjectTemplate::_Xp::_Xp
/**
* Class destructor.
*/
ServerObjectTemplate::_Xp::~_Xp()
{
} // ServerObjectTemplate::_Xp::~_Xp
/**
* Static function used to register this template.
*/
void ServerObjectTemplate::_Xp::registerMe(void)
{
ObjectTemplateList::registerTemplate(_Xp_tag, create);
} // ServerObjectTemplate::_Xp::registerMe
/**
* Creates a ServerObjectTemplate::_Xp template.
*
* @return a new instance of the template
*/
ObjectTemplate * ServerObjectTemplate::_Xp::create(const std::string & filename)
{
return new ServerObjectTemplate::_Xp(filename);
} // ServerObjectTemplate::_Xp::create
/**
* Returns the template id.
*
* @return the template id
*/
Tag ServerObjectTemplate::_Xp::getId(void) const
{
return _Xp_tag;
} // ServerObjectTemplate::_Xp::getId
ServerObjectTemplate::XpTypes ServerObjectTemplate::_Xp::getType(bool versionOk, bool testData) const
{
#ifdef _DEBUG
ServerObjectTemplate::XpTypes testDataValue = static_cast<ServerObjectTemplate::XpTypes>(0);
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_Xp * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_Xp *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getType(true);
#endif
}
if (!m_type.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter type in template %s", DataResource::getName()));
return static_cast<XpTypes>(0);
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter type has not been defined in template %s!", DataResource::getName()));
return base->getType(versionOk);
}
}
XpTypes value = static_cast<XpTypes>(m_type.getValue());
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_Xp::getType
int ServerObjectTemplate::_Xp::getLevel(bool versionOk, bool testData) const
{
#ifdef _DEBUG
int testDataValue = 0;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_Xp * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_Xp *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getLevel(true);
#endif
}
if (!m_level.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter level in template %s", DataResource::getName()));
return 0;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter level has not been defined in template %s!", DataResource::getName()));
return base->getLevel(versionOk);
}
}
int value = m_level.getValue();
char delta = m_level.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
int baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getLevel(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<int>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<int>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_Xp::getLevel
int ServerObjectTemplate::_Xp::getLevelMin(bool versionOk, bool testData) const
{
#ifdef _DEBUG
int testDataValue = 0;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_Xp * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_Xp *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getLevelMin(true);
#endif
}
if (!m_level.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter level in template %s", DataResource::getName()));
return 0;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter level has not been defined in template %s!", DataResource::getName()));
return base->getLevelMin(versionOk);
}
}
int value = m_level.getMinValue();
char delta = m_level.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
int baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getLevelMin(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<int>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<int>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_Xp::getLevelMin
int ServerObjectTemplate::_Xp::getLevelMax(bool versionOk, bool testData) const
{
#ifdef _DEBUG
int testDataValue = 0;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_Xp * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_Xp *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getLevelMax(true);
#endif
}
if (!m_level.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter level in template %s", DataResource::getName()));
return 0;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter level has not been defined in template %s!", DataResource::getName()));
return base->getLevelMax(versionOk);
}
}
int value = m_level.getMaxValue();
char delta = m_level.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
int baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getLevelMax(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<int>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<int>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_Xp::getLevelMax
int ServerObjectTemplate::_Xp::getValue(bool versionOk, bool testData) const
{
#ifdef _DEBUG
int testDataValue = 0;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_Xp * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_Xp *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getValue(true);
#endif
}
if (!m_value.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter value in template %s", DataResource::getName()));
return 0;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter value has not been defined in template %s!", DataResource::getName()));
return base->getValue(versionOk);
}
}
int value = m_value.getValue();
char delta = m_value.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
int baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getValue(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<int>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<int>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_Xp::getValue
int ServerObjectTemplate::_Xp::getValueMin(bool versionOk, bool testData) const
{
#ifdef _DEBUG
int testDataValue = 0;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_Xp * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_Xp *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getValueMin(true);
#endif
}
if (!m_value.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter value in template %s", DataResource::getName()));
return 0;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter value has not been defined in template %s!", DataResource::getName()));
return base->getValueMin(versionOk);
}
}
int value = m_value.getMinValue();
char delta = m_value.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
int baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getValueMin(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<int>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<int>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_Xp::getValueMin
int ServerObjectTemplate::_Xp::getValueMax(bool versionOk, bool testData) const
{
#ifdef _DEBUG
int testDataValue = 0;
#else
UNREF(testData);
#endif
const ServerObjectTemplate::_Xp * base = NULL;
if (m_baseData != NULL)
{
base = dynamic_cast<const ServerObjectTemplate::_Xp *>(m_baseData);
#ifdef _DEBUG
if (testData && base != NULL)
testDataValue = base->getValueMax(true);
#endif
}
if (!m_value.isLoaded())
{
if (ms_allowDefaultTemplateParams && /*!versionOk &&*/ base == NULL)
{
DEBUG_WARNING(true, ("Returning default value for missing parameter value in template %s", DataResource::getName()));
return 0;
}
else
{
DEBUG_FATAL(base == NULL, ("Template parameter value has not been defined in template %s!", DataResource::getName()));
return base->getValueMax(versionOk);
}
}
int value = m_value.getMaxValue();
char delta = m_value.getDeltaType();
if (delta == '+' || delta == '-' || delta == '_' || delta == '=')
{
int baseValue = 0;
if (m_baseData != NULL)
{
if (base != NULL)
baseValue = base->getValueMax(versionOk);
else if (ms_allowDefaultTemplateParams)
DEBUG_WARNING(true, ("No base template for delta, using 0"));
else
NOT_NULL(base);
}
if (delta == '+')
value = baseValue + value;
else if (delta == '-')
value = baseValue - value;
else if (delta == '=')
value = baseValue + static_cast<int>(baseValue * (value / 100.0f));
else if (delta == '_')
value = baseValue - static_cast<int>(baseValue * (value / 100.0f));
}
#ifdef _DEBUG
if (testData && base != NULL)
{
}
#endif
return value;
} // ServerObjectTemplate::_Xp::getValueMax
#ifdef _DEBUG
/**
* Special function used by datalint. Checks for duplicate values in base and derived templates.
*/
void ServerObjectTemplate::_Xp::testValues(void) const
{
IGNORE_RETURN(getType(true));
IGNORE_RETURN(getLevelMin(true));
IGNORE_RETURN(getLevelMax(true));
IGNORE_RETURN(getValueMin(true));
IGNORE_RETURN(getValueMax(true));
} // ServerObjectTemplate::_Xp::testValues
#endif
/**
* Loads the template data from an iff file. We should already be in the form
* for this template.
*
* @param file file to load from
*/
void ServerObjectTemplate::_Xp::load(Iff &file)
{
static const int MAX_NAME_SIZE = 256;
char paramName[MAX_NAME_SIZE];
file.enterForm();
file.enterChunk();
int paramCount = file.read_int32();
file.exitChunk();
for (int i = 0; i < paramCount; ++i)
{
file.enterChunk();
file.read_string(paramName, MAX_NAME_SIZE);
if (strcmp(paramName, "type") == 0)
m_type.loadFromIff(file);
else if (strcmp(paramName, "level") == 0)
m_level.loadFromIff(file);
else if (strcmp(paramName, "value") == 0)
m_value.loadFromIff(file);
file.exitChunk(true);
}
file.exitForm();
UNREF(file);
} // ServerObjectTemplate::_Xp::load
//@END TFD