LoT_PRC8/_module/nss/inc_setitm_utils.nss
Jaysyn904 ec287507a1 Initial upload
Initial upload.
2023-09-25 21:32:17 -04:00

2442 lines
105 KiB
Plaintext

#include "inc_loglevel"
#include "x2_inc_itemprop"
const int CUSTOM_SET_BONUS = 100000; //Space this value out so it wont conflict with future patches.
//Consts for the translation of ITEM_PROPERTY_* const names into their value. So these can be defined by name in item prop variables instead of ints.
const string SET_PROPERTY_TYPE_ABILITY_BONUS = "ITEM_PROPERTY_ABILITY_BONUS";
const string SET_PROPERTY_TYPE_AC_BONUS = "ITEM_PROPERTY_AC_BONUS";
const string SET_PROPERTY_TYPE_AC_BONUS_VS_ALIGNMENT_GROUP = "ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP";
const string SET_PROPERTY_TYPE_AC_BONUS_VS_DAMAGE_TYPE = "ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE";
const string SET_PROPERTY_TYPE_AC_BONUS_VS_RACIAL_GROUP = "ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP";
const string SET_PROPERTY_TYPE_AC_BONUS_VS_SPECIFIC_ALIGNMENT = "ITEM_PROPERTY_AC_BONUS_VS_SPECIFIC_ALIGNMENT";
const string SET_PROPERTY_TYPE_ADDITIONAL = "ITEM_PROPERTY_ADDITIONAL";
const string SET_PROPERTY_TYPE_ARCANE_SPELL_FAILURE = "ITEM_PROPERTY_ARCANE_SPELL_FAILURE";
const string SET_PROPERTY_TYPE_ATTACK_BONUS = "ITEM_PROPERTY_ATTACK_BONUS";
const string SET_PROPERTY_TYPE_ATTACK_BONUS_VS_ALIGNMENT_GROUP = "ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP";
const string SET_PROPERTY_TYPE_ATTACK_BONUS_VS_RACIAL_GROUP = "ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP";
const string SET_PROPERTY_TYPE_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT = "ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT";
const string SET_PROPERTY_TYPE_BASE_ITEM_WEIGHT_REDUCTION = "ITEM_PROPERTY_BASE_ITEM_WEIGHT_REDUCTION";
const string SET_PROPERTY_TYPE_BONUS_FEAT = "ITEM_PROPERTY_BONUS_FEAT";
const string SET_PROPERTY_TYPE_BONUS_SPELL_SLOT_OF_LEVEL_N = "ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N";
const string SET_PROPERTY_TYPE_CAST_SPELL = "ITEM_PROPERTY_CAST_SPELL";
const string SET_PROPERTY_TYPE_DAMAGE_BONUS = "ITEM_PROPERTY_DAMAGE_BONUS";
const string SET_PROPERTY_TYPE_DAMAGE_BONUS_VS_ALIGNMENT_GROUP = "ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP";
const string SET_PROPERTY_TYPE_DAMAGE_BONUS_VS_RACIAL_GROUP = "ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP";
const string SET_PROPERTY_TYPE_DAMAGE_BONUS_VS_SPECIFIC_ALIGNMENT = "ITEM_PROPERTY_DAMAGE_BONUS_VS_SPECIFIC_ALIGNMENT";
const string SET_PROPERTY_TYPE_DAMAGE_REDUCTION = "ITEM_PROPERTY_DAMAGE_REDUCTION";
const string SET_PROPERTY_TYPE_DAMAGE_RESISTANCE = "ITEM_PROPERTY_DAMAGE_RESISTANCE";
const string SET_PROPERTY_TYPE_DAMAGE_VULNERABILITY = "ITEM_PROPERTY_DAMAGE_VULNERABILITY";
const string SET_PROPERTY_TYPE_DARKVISION = "ITEM_PROPERTY_DARKVISION";
const string SET_PROPERTY_TYPE_DECREASED_ABILITY_SCORE = "ITEM_PROPERTY_DECREASED_ABILITY_SCORE";
const string SET_PROPERTY_TYPE_DECREASED_AC = "ITEM_PROPERTY_DECREASED_AC";
const string SET_PROPERTY_TYPE_DECREASED_ATTACK_MODIFIER = "ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER";
const string SET_PROPERTY_TYPE_DECREASED_DAMAGE = "ITEM_PROPERTY_DECREASED_DAMAGE";
const string SET_PROPERTY_TYPE_DECREASED_ENHANCEMENT_MODIFIER = "ITEM_PROPERTY_DECREASED_ENHANCEMENT_MODIFIER";
const string SET_PROPERTY_TYPE_DECREASED_SAVING_THROWS = "ITEM_PROPERTY_DECREASED_SAVING_THROWS";
const string SET_PROPERTY_TYPE_DECREASED_SAVING_THROWS_SPECIFIC = "ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC";
const string SET_PROPERTY_TYPE_DECREASED_SKILL_MODIFIER = "ITEM_PROPERTY_DECREASED_SKILL_MODIFIER";
const string SET_PROPERTY_TYPE_ENHANCED_CONTAINER_REDUCED_WEIGHT = "ITEM_PROPERTY_ENHANCED_CONTAINER_REDUCED_WEIGHT";
const string SET_PROPERTY_TYPE_ENHANCEMENT_BONUS = "ITEM_PROPERTY_ENHANCEMENT_BONUS";
const string SET_PROPERTY_TYPE_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP = "ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP";
const string SET_PROPERTY_TYPE_ENHANCEMENT_BONUS_VS_RACIAL_GROUP = "ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP";
const string SET_PROPERTY_TYPE_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNEMENT = "ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNEMENT";
const string SET_PROPERTY_TYPE_EXTRA_MELEE_DAMAGE_TYPE = "ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE";
const string SET_PROPERTY_TYPE_EXTRA_RANGED_DAMAGE_TYPE = "ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE";
const string SET_PROPERTY_TYPE_FREEDOM_OF_MOVEMENT = "ITEM_PROPERTY_FREEDOM_OF_MOVEMENT";
const string SET_PROPERTY_TYPE_HASTE = "ITEM_PROPERTY_HASTE";
const string SET_PROPERTY_TYPE_HEALERS_KIT = "ITEM_PROPERTY_HEALERS_KIT";
const string SET_PROPERTY_TYPE_HOLY_AVENGER = "ITEM_PROPERTY_HOLY_AVENGER";
const string SET_PROPERTY_TYPE_IMMUNITY_DAMAGE_TYPE = "ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE";
const string SET_PROPERTY_TYPE_IMMUNITY_MISCELLANEOUS = "ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS";
const string SET_PROPERTY_TYPE_IMMUNITY_SPECIFIC_SPELL = "ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL";
const string SET_PROPERTY_TYPE_IMMUNITY_SPELL_SCHOOL = "ITEM_PROPERTY_IMMUNITY_SPELL_SCHOOL";
const string SET_PROPERTY_TYPE_IMMUNITY_SPELLS_BY_LEVEL = "ITEM_PROPERTY_IMMUNITY_SPELLS_BY_LEVEL";
const string SET_PROPERTY_TYPE_IMPROVED_EVASION = "ITEM_PROPERTY_IMPROVED_EVASION";
const string SET_PROPERTY_TYPE_KEEN = "ITEM_PROPERTY_KEEN";
const string SET_PROPERTY_TYPE_LIGHT = "ITEM_PROPERTY_LIGHT";
const string SET_PROPERTY_TYPE_MASSIVE_CRITICALS = "ITEM_PROPERTY_MASSIVE_CRITICALS";
const string SET_PROPERTY_TYPE_MATERIAL = "ITEM_PROPERTY_MATERIAL";
const string SET_PROPERTY_TYPE_MIGHTY = "ITEM_PROPERTY_MIGHTY";
const string SET_PROPERTY_TYPE_MIND_BLANK = "ITEM_PROPERTY_MIND_BLANK";
const string SET_PROPERTY_TYPE_MONSTER_DAMAGE = "ITEM_PROPERTY_MONSTER_DAMAGE";
const string SET_PROPERTY_TYPE_NO_DAMAGE = "ITEM_PROPERTY_NO_DAMAGE";
const string SET_PROPERTY_TYPE_ON_HIT_PROPERTIES = "ITEM_PROPERTY_ON_HIT_PROPERTIES";
const string SET_PROPERTY_TYPE_ON_MONSTER_HIT = "ITEM_PROPERTY_ON_MONSTER_HIT";
const string SET_PROPERTY_TYPE_ONHITCASTSPELL = "ITEM_PROPERTY_ONHITCASTSPELL";
const string SET_PROPERTY_TYPE_POISON = "ITEM_PROPERTY_POISON";
const string SET_PROPERTY_TYPE_QUALITY = "ITEM_PROPERTY_QUALITY";
const string SET_PROPERTY_TYPE_REGENERATION = "ITEM_PROPERTY_REGENERATION";
const string SET_PROPERTY_TYPE_REGENERATION_VAMPIRIC = "ITEM_PROPERTY_REGENERATION_VAMPIRIC";
const string SET_PROPERTY_TYPE_SAVING_THROW_BONUS = "ITEM_PROPERTY_SAVING_THROW_BONUS";
const string SET_PROPERTY_TYPE_SAVING_THROW_BONUS_SPECIFIC = "ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC";
const string SET_PROPERTY_TYPE_SKILL_BONUS = "ITEM_PROPERTY_SKILL_BONUS";
const string SET_PROPERTY_TYPE_SPECIAL_WALK = "ITEM_PROPERTY_SPECIAL_WALK";
const string SET_PROPERTY_TYPE_SPELL_RESISTANCE = "ITEM_PROPERTY_SPELL_RESISTANCE";
const string SET_PROPERTY_TYPE_THIEVES_TOOLS = "ITEM_PROPERTY_THIEVES_TOOLS";
const string SET_PROPERTY_TYPE_TRAP = "ITEM_PROPERTY_TRAP";
const string SET_PROPERTY_TYPE_TRUE_SEEING = "ITEM_PROPERTY_TRUE_SEEING";
const string SET_PROPERTY_TYPE_TURN_RESISTANCE = "ITEM_PROPERTY_TURN_RESISTANCE";
const string SET_PROPERTY_TYPE_UNLIMITED_AMMUNITION = "ITEM_PROPERTY_UNLIMITED_AMMUNITION";
const string SET_PROPERTY_TYPE_USE_LIMITATION_ALIGNMENT_GROUP = "ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP";
const string SET_PROPERTY_TYPE_USE_LIMITATION_CLASS = "ITEM_PROPERTY_USE_LIMITATION_CLASS";
const string SET_PROPERTY_TYPE_USE_LIMITATION_RACIAL_TYPE = "ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE";
const string SET_PROPERTY_TYPE_USE_LIMITATION_SPECIFIC_ALIGNMENT = "ITEM_PROPERTY_USE_LIMITATION_SPECIFIC_ALIGNMENT";
const string SET_PROPERTY_TYPE_USE_LIMITATION_TILESET = "ITEM_PROPERTY_USE_LIMITATION_TILESET";
const string SET_PROPERTY_TYPE_VISUALEFFECT = "ITEM_PROPERTY_VISUALEFFECT";
const string SET_PROPERTY_TYPE_WEIGHT_INCREASE = "ITEM_PROPERTY_WEIGHT_INCREASE";
const string SET_PROPERTY_TYPE_CUSTOM = "CUSTOM_SET_BONUS";
// ItemSetTagTokenizer is used to loop over all the SET_TAG_# props on an item oItem.
struct ItemSetTagTokenizer {
object oItem;
int iSetTagIndex;
string sCurrentTag;
};
// Struct to pass around all of a creatures equiped items between various functions.
struct EquipedItems {
object oArms;
object oArrows;
object oBelt;
object oBolts;
object oBoots;
object oBullets;
object oCarmour;
object oChest;
object oCloak;
object oCweaponb;
object oCweaponl;
object oCweaponr;
object oHead;
object oLefthand;
object oLeftring;
object oNeck;
object oRighthand;
object oRightring;
};
// Struct for the return value of the various functions that are used to translate special property strings like _CAST_LEVEL into their value at the correct argument position for the various ItemProperty* constructor functions.
struct SetItemPropArguments {
int iArgOne;
int iArgTwo;
int iArgThree;
};
// Struct to define the upper and lower bounds of the ints that are passed to the various ItemProperty* constructors. Used for error reporting.
struct SetItemPropArgLimits {
int iArgOneMin;
int iArgOneMax;
int iArgTwoMin;
int iArgTwoMax;
int iArgThreeMin;
int iArgThreeMax;
int iNotSetArgOneMin;
int iNotSetArgTwoMin;
int iNotSetArgThreeMin;
int iNotSetArgOneMax;
int iNotSetArgTwoMax;
int iNotSetArgThreeMax;
};
int GetItemPropertyConstFromSetPropertyType(string sSetPropertyType); //Function to translate the value of _TYPE props to their int value.
string SetItemTagVarName(int iTagNum = 0); //Takes an int iTagNum and creates a properly formated SET_TAG_# string.
string GetItemSetTag(object oItem, int iIdx = 0); //Finds the SET_TAG_# value at iIdx
struct ItemSetTagTokenizer GetNextSetTag(struct ItemSetTagTokenizer tknizr); //SetTag token looper GetNext function.
struct ItemSetTagTokenizer GetFirstSetTag(object oItem); //SetTag token looper GetFirst function.
struct EquipedItems GetEquipedItems(object oPC); //Returns all items equiped by oPC
int TestItemBelongsToSet(object oItem, string sSetTag); //Returns TRUE if oItem has a SET_TAG_# whoes value equals sSetTag
int GetSetTagId(object oItem, string sSetTag); //Gets the # part of the SET_TAG_# variable with value sSetTag
int GetNumberOfSetItemsEquiped(struct EquipedItems equipedItems, string sSetTag); //Get the number of items in equipedItems that have at least one SET_TAG_# with value sSetTag
//Various functions to get the speical properties from an items local variables so they can be used in the ItemProperties* constructor.
struct SetItemPropArguments GetItemPropArgumentsOneArg(
object oItem,
string sSetBonusPrefix,
struct SetItemPropArgLimits ArgLimits,
string sSetBonusArgOneSuffix = "_VALUE"
);
struct SetItemPropArguments GetItemPropArgumentsTwoArgs(
object oItem,
string sSetBonusPrefix,
struct SetItemPropArgLimits ArgLimits,
string sSetBonusArgOneSuffix,
string sSetBonusArgTwoSuffix = "_VALUE"
);
struct SetItemPropArguments GetItemPropArgumentsThreeArgs(
object oItem,
string sSetBonusPrefix,
struct SetItemPropArgLimits ArgLimits,
string sSetBonusArgOneSuffix,
string sSetBonusArgTwoSuffix,
string sSetBonusArgThreeSuffix = "_VALUE"
);
int GetReplaceOrAddProp(object oItem, string sSetBonusPrefix);
void RedoSetItemBonuses(object oItem, string sSetTag, int iSetItemsEquiped); //Redo the set bonus sSetTag on a single item oItem to the level iSetItemsEquiped
void RedoEquipedSetItemsBonuses(struct EquipedItems equipedItems, string sSetTag, int iSetItemsCount); //Redo the set bounus sSetTag on all equiped items.
int GetItemPropertyConstFromSetPropertyType(string sSetPropertyType)
{
if (SET_PROPERTY_TYPE_ABILITY_BONUS == sSetPropertyType)
return ITEM_PROPERTY_ABILITY_BONUS;
if (SET_PROPERTY_TYPE_AC_BONUS == sSetPropertyType)
return ITEM_PROPERTY_AC_BONUS;
if (SET_PROPERTY_TYPE_AC_BONUS_VS_ALIGNMENT_GROUP == sSetPropertyType)
return ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP;
if (SET_PROPERTY_TYPE_AC_BONUS_VS_DAMAGE_TYPE == sSetPropertyType)
return ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE;
if (SET_PROPERTY_TYPE_AC_BONUS_VS_RACIAL_GROUP == sSetPropertyType)
return ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP;
if (SET_PROPERTY_TYPE_AC_BONUS_VS_SPECIFIC_ALIGNMENT == sSetPropertyType)
return ITEM_PROPERTY_AC_BONUS_VS_SPECIFIC_ALIGNMENT;
if (SET_PROPERTY_TYPE_ADDITIONAL == sSetPropertyType)
return ITEM_PROPERTY_ADDITIONAL;
if (SET_PROPERTY_TYPE_ARCANE_SPELL_FAILURE == sSetPropertyType)
return ITEM_PROPERTY_ARCANE_SPELL_FAILURE;
if (SET_PROPERTY_TYPE_ATTACK_BONUS == sSetPropertyType)
return ITEM_PROPERTY_ATTACK_BONUS;
if (SET_PROPERTY_TYPE_ATTACK_BONUS_VS_ALIGNMENT_GROUP == sSetPropertyType)
return ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP;
if (SET_PROPERTY_TYPE_ATTACK_BONUS_VS_RACIAL_GROUP == sSetPropertyType)
return ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP;
if (SET_PROPERTY_TYPE_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT == sSetPropertyType)
return ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT;
if (SET_PROPERTY_TYPE_BASE_ITEM_WEIGHT_REDUCTION == sSetPropertyType)
return ITEM_PROPERTY_BASE_ITEM_WEIGHT_REDUCTION;
if (SET_PROPERTY_TYPE_BONUS_FEAT == sSetPropertyType)
return ITEM_PROPERTY_BONUS_FEAT;
if (SET_PROPERTY_TYPE_BONUS_SPELL_SLOT_OF_LEVEL_N == sSetPropertyType)
return ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N;
if (SET_PROPERTY_TYPE_CAST_SPELL == sSetPropertyType)
return ITEM_PROPERTY_CAST_SPELL;
if (SET_PROPERTY_TYPE_DAMAGE_BONUS == sSetPropertyType)
return ITEM_PROPERTY_DAMAGE_BONUS;
if (SET_PROPERTY_TYPE_DAMAGE_BONUS_VS_ALIGNMENT_GROUP == sSetPropertyType)
return ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP;
if (SET_PROPERTY_TYPE_DAMAGE_BONUS_VS_RACIAL_GROUP == sSetPropertyType)
return ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP;
if (SET_PROPERTY_TYPE_DAMAGE_BONUS_VS_SPECIFIC_ALIGNMENT == sSetPropertyType)
return ITEM_PROPERTY_DAMAGE_BONUS_VS_SPECIFIC_ALIGNMENT;
if (SET_PROPERTY_TYPE_DAMAGE_REDUCTION == sSetPropertyType)
return ITEM_PROPERTY_DAMAGE_REDUCTION;
if (SET_PROPERTY_TYPE_DAMAGE_RESISTANCE == sSetPropertyType)
return ITEM_PROPERTY_DAMAGE_RESISTANCE;
if (SET_PROPERTY_TYPE_DAMAGE_VULNERABILITY == sSetPropertyType)
return ITEM_PROPERTY_DAMAGE_VULNERABILITY;
if (SET_PROPERTY_TYPE_DARKVISION == sSetPropertyType)
return ITEM_PROPERTY_DARKVISION;
if (SET_PROPERTY_TYPE_DECREASED_ABILITY_SCORE == sSetPropertyType)
return ITEM_PROPERTY_DECREASED_ABILITY_SCORE;
if (SET_PROPERTY_TYPE_DECREASED_AC == sSetPropertyType)
return ITEM_PROPERTY_DECREASED_AC;
if (SET_PROPERTY_TYPE_DECREASED_ATTACK_MODIFIER == sSetPropertyType)
return ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER;
if (SET_PROPERTY_TYPE_DECREASED_DAMAGE == sSetPropertyType)
return ITEM_PROPERTY_DECREASED_DAMAGE;
if (SET_PROPERTY_TYPE_DECREASED_ENHANCEMENT_MODIFIER == sSetPropertyType)
return ITEM_PROPERTY_DECREASED_ENHANCEMENT_MODIFIER;
if (SET_PROPERTY_TYPE_DECREASED_SAVING_THROWS == sSetPropertyType)
return ITEM_PROPERTY_DECREASED_SAVING_THROWS;
if (SET_PROPERTY_TYPE_DECREASED_SAVING_THROWS_SPECIFIC == sSetPropertyType)
return ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC;
if (SET_PROPERTY_TYPE_DECREASED_SKILL_MODIFIER == sSetPropertyType)
return ITEM_PROPERTY_DECREASED_SKILL_MODIFIER;
if (SET_PROPERTY_TYPE_ENHANCED_CONTAINER_REDUCED_WEIGHT == sSetPropertyType)
return ITEM_PROPERTY_ENHANCED_CONTAINER_REDUCED_WEIGHT;
if (SET_PROPERTY_TYPE_ENHANCEMENT_BONUS == sSetPropertyType)
return ITEM_PROPERTY_ENHANCEMENT_BONUS;
if (SET_PROPERTY_TYPE_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP == sSetPropertyType)
return ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP;
if (SET_PROPERTY_TYPE_ENHANCEMENT_BONUS_VS_RACIAL_GROUP == sSetPropertyType)
return ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP;
if (SET_PROPERTY_TYPE_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNEMENT == sSetPropertyType)
return ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNEMENT;
if (SET_PROPERTY_TYPE_EXTRA_MELEE_DAMAGE_TYPE == sSetPropertyType)
return ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE;
if (SET_PROPERTY_TYPE_EXTRA_RANGED_DAMAGE_TYPE == sSetPropertyType)
return ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE;
if (SET_PROPERTY_TYPE_FREEDOM_OF_MOVEMENT == sSetPropertyType)
return ITEM_PROPERTY_FREEDOM_OF_MOVEMENT;
if (SET_PROPERTY_TYPE_HASTE == sSetPropertyType)
return ITEM_PROPERTY_HASTE;
if (SET_PROPERTY_TYPE_HEALERS_KIT == sSetPropertyType)
return ITEM_PROPERTY_HEALERS_KIT;
if (SET_PROPERTY_TYPE_HOLY_AVENGER == sSetPropertyType)
return ITEM_PROPERTY_HOLY_AVENGER;
if (SET_PROPERTY_TYPE_IMMUNITY_DAMAGE_TYPE == sSetPropertyType)
return ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE;
if (SET_PROPERTY_TYPE_IMMUNITY_MISCELLANEOUS == sSetPropertyType)
return ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS;
if (SET_PROPERTY_TYPE_IMMUNITY_SPECIFIC_SPELL == sSetPropertyType)
return ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL;
if (SET_PROPERTY_TYPE_IMMUNITY_SPELL_SCHOOL == sSetPropertyType)
return ITEM_PROPERTY_IMMUNITY_SPELL_SCHOOL;
if (SET_PROPERTY_TYPE_IMMUNITY_SPELLS_BY_LEVEL == sSetPropertyType)
return ITEM_PROPERTY_IMMUNITY_SPELLS_BY_LEVEL;
if (SET_PROPERTY_TYPE_IMPROVED_EVASION == sSetPropertyType)
return ITEM_PROPERTY_IMPROVED_EVASION;
if (SET_PROPERTY_TYPE_KEEN == sSetPropertyType)
return ITEM_PROPERTY_KEEN;
if (SET_PROPERTY_TYPE_LIGHT == sSetPropertyType)
return ITEM_PROPERTY_LIGHT;
if (SET_PROPERTY_TYPE_MASSIVE_CRITICALS == sSetPropertyType)
return ITEM_PROPERTY_MASSIVE_CRITICALS;
if (SET_PROPERTY_TYPE_MATERIAL == sSetPropertyType)
return ITEM_PROPERTY_MATERIAL;
if (SET_PROPERTY_TYPE_MIGHTY == sSetPropertyType)
return ITEM_PROPERTY_MIGHTY;
if (SET_PROPERTY_TYPE_MIND_BLANK == sSetPropertyType)
return ITEM_PROPERTY_MIND_BLANK;
if (SET_PROPERTY_TYPE_MONSTER_DAMAGE == sSetPropertyType)
return ITEM_PROPERTY_MONSTER_DAMAGE;
if (SET_PROPERTY_TYPE_NO_DAMAGE == sSetPropertyType)
return ITEM_PROPERTY_NO_DAMAGE;
if (SET_PROPERTY_TYPE_ON_HIT_PROPERTIES == sSetPropertyType)
return ITEM_PROPERTY_ON_HIT_PROPERTIES;
if (SET_PROPERTY_TYPE_ON_MONSTER_HIT == sSetPropertyType)
return ITEM_PROPERTY_ON_MONSTER_HIT;
if (SET_PROPERTY_TYPE_ONHITCASTSPELL == sSetPropertyType)
return ITEM_PROPERTY_ONHITCASTSPELL;
if (SET_PROPERTY_TYPE_POISON == sSetPropertyType)
return ITEM_PROPERTY_POISON;
if (SET_PROPERTY_TYPE_QUALITY == sSetPropertyType)
return ITEM_PROPERTY_QUALITY;
if (SET_PROPERTY_TYPE_REGENERATION == sSetPropertyType)
return ITEM_PROPERTY_REGENERATION;
if (SET_PROPERTY_TYPE_REGENERATION_VAMPIRIC == sSetPropertyType)
return ITEM_PROPERTY_REGENERATION_VAMPIRIC;
if (SET_PROPERTY_TYPE_SAVING_THROW_BONUS == sSetPropertyType)
return ITEM_PROPERTY_SAVING_THROW_BONUS;
if (SET_PROPERTY_TYPE_SAVING_THROW_BONUS_SPECIFIC == sSetPropertyType)
return ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC;
if (SET_PROPERTY_TYPE_SKILL_BONUS == sSetPropertyType)
return ITEM_PROPERTY_SKILL_BONUS;
if (SET_PROPERTY_TYPE_SPECIAL_WALK == sSetPropertyType)
return ITEM_PROPERTY_SPECIAL_WALK;
if (SET_PROPERTY_TYPE_SPELL_RESISTANCE == sSetPropertyType)
return ITEM_PROPERTY_SPELL_RESISTANCE;
if (SET_PROPERTY_TYPE_THIEVES_TOOLS == sSetPropertyType)
return ITEM_PROPERTY_THIEVES_TOOLS;
if (SET_PROPERTY_TYPE_TRAP == sSetPropertyType)
return ITEM_PROPERTY_TRAP;
if (SET_PROPERTY_TYPE_TRUE_SEEING == sSetPropertyType)
return ITEM_PROPERTY_TRUE_SEEING;
if (SET_PROPERTY_TYPE_TURN_RESISTANCE == sSetPropertyType)
return ITEM_PROPERTY_TURN_RESISTANCE;
if (SET_PROPERTY_TYPE_UNLIMITED_AMMUNITION == sSetPropertyType)
return ITEM_PROPERTY_UNLIMITED_AMMUNITION;
if (SET_PROPERTY_TYPE_USE_LIMITATION_ALIGNMENT_GROUP == sSetPropertyType)
return ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP;
if (SET_PROPERTY_TYPE_USE_LIMITATION_CLASS == sSetPropertyType)
return ITEM_PROPERTY_USE_LIMITATION_CLASS;
if (SET_PROPERTY_TYPE_USE_LIMITATION_RACIAL_TYPE == sSetPropertyType)
return ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE;
if (SET_PROPERTY_TYPE_USE_LIMITATION_SPECIFIC_ALIGNMENT == sSetPropertyType)
return ITEM_PROPERTY_USE_LIMITATION_SPECIFIC_ALIGNMENT;
if (SET_PROPERTY_TYPE_USE_LIMITATION_TILESET == sSetPropertyType)
return ITEM_PROPERTY_USE_LIMITATION_TILESET;
if (SET_PROPERTY_TYPE_VISUALEFFECT == sSetPropertyType)
return ITEM_PROPERTY_VISUALEFFECT;
if (SET_PROPERTY_TYPE_WEIGHT_INCREASE == sSetPropertyType)
return ITEM_PROPERTY_WEIGHT_INCREASE;
if (SET_PROPERTY_TYPE_CUSTOM == sSetPropertyType)
return CUSTOM_SET_BONUS;
return -1;
}
// SSS EEEE TTTTTT TTTTTT AA GGG V V AA RRRR III AA BBBB L EEEE N N AA M M EEEE GGG EEEE N N EEEE RRRR AA TTTTTT OOO RRRR
// S E TT TT A A G V V A A R R I A A B B L E NN N A A MM MM E G E NN N E R R A A TT O O R R
// SSS EEE TT TT AAAA G GG V V AAAA RRRR I AAAA BBBB L EEE N N N AAAA M M M EEE G GG EEE N N N EEE RRRR AAAA TT O O RRRR
// S E TT TT A A G G V V A A R R I A A B B L E N NN A A M M E G G E N NN E R R A A TT O O R R
// SSSS EEEE TT ____ TT A A GGG ____ V A A R RR III A A BBBB LLLL EEEE N N A A M M EEEE GGG EEEE N N EEEE R RR A A TT OOO R RR
// ____ ____
string SetItemTagVarName(int iTagNum = 0)
{
return "SET_TAG_" + IntToString(iTagNum);
}
string GetItemSetTag(object oItem, int iIdx = 0){
return GetLocalString(oItem, SetItemTagVarName(iIdx));
}
struct ItemSetTagTokenizer GetNextSetTag(struct ItemSetTagTokenizer tknizr)
{
tknizr.sCurrentTag = GetItemSetTag(tknizr.oItem, tknizr.iSetTagIndex);
tknizr.iSetTagIndex ++;
return tknizr;
}
struct ItemSetTagTokenizer GetFirstSetTag(object oItem)
{
struct ItemSetTagTokenizer tknizr;
tknizr.oItem = oItem;
tknizr.iSetTagIndex = 0;
tknizr = GetNextSetTag(tknizr);
return tknizr;
}
// EEEE QQQ U U III PPPP EEEE DDD III TTTTTT EEEE M M U U TTTTTT III L SSS
// E Q Q U U I P P E D D I TT E MM MM U U TT I L S
// EEE Q Q U U I PPPP EEE D D I TT EEE M M M U U TT I L SSS
// E Q QQ U U I P E D D I TT E M M U U TT I L S
// EEEE QQQQ UUU III P EEEE DDD III TT EEEE M M UUU TT III LLLL SSSS
// Q
struct EquipedItems GetEquipedItems(object oPC)
{
struct EquipedItems equiped;
equiped.oArms = GetItemInSlot(INVENTORY_SLOT_ARMS, oPC);
equiped.oArrows = GetItemInSlot(INVENTORY_SLOT_ARROWS, oPC);
equiped.oBelt = GetItemInSlot(INVENTORY_SLOT_BELT, oPC);
equiped.oBolts = GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC);
equiped.oBoots = GetItemInSlot(INVENTORY_SLOT_BOOTS, oPC);
equiped.oBullets = GetItemInSlot(INVENTORY_SLOT_BULLETS, oPC);
equiped.oCarmour = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oPC);
equiped.oChest = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
equiped.oCloak = GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC);
equiped.oCweaponb = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oPC);
equiped.oCweaponl = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC);
equiped.oCweaponr = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC);
equiped.oHead = GetItemInSlot(INVENTORY_SLOT_HEAD, oPC);
equiped.oLefthand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC);
equiped.oLeftring = GetItemInSlot(INVENTORY_SLOT_LEFTRING, oPC);
equiped.oNeck = GetItemInSlot(INVENTORY_SLOT_NECK, oPC);
equiped.oRighthand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
equiped.oRightring = GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oPC);
return equiped;
}
int TestItemBelongsToSet(object oItem, string sSetTag)
{
struct ItemSetTagTokenizer sItemSetTagTkn = GetFirstSetTag(oItem);
while(sItemSetTagTkn.sCurrentTag != ""){
if(sSetTag == sItemSetTagTkn.sCurrentTag)
return TRUE;
sItemSetTagTkn = GetNextSetTag(sItemSetTagTkn);
}
return FALSE;
}
int GetSetTagId(object oItem, string sSetTag)
{
struct ItemSetTagTokenizer sItemSetTagTkn = GetFirstSetTag(oItem);
while(sItemSetTagTkn.sCurrentTag != ""){
if(sSetTag == sItemSetTagTkn.sCurrentTag)
return sItemSetTagTkn.iSetTagIndex - 1; //Will have been incremented by last GetNextSetTag call.
sItemSetTagTkn = GetNextSetTag(sItemSetTagTkn);
}
return -1; //Not found.
}
int GetNumberOfSetItemsEquiped(struct EquipedItems equipedItems, string sSetTag)
{
int iSetItemsEquiped = 0;
//Check every other item for belonging to the same set
if(TestItemBelongsToSet(equipedItems.oArms, sSetTag)){
iSetItemsEquiped ++;
}
if(TestItemBelongsToSet(equipedItems.oArrows, sSetTag)){
iSetItemsEquiped ++;
}
if(TestItemBelongsToSet(equipedItems.oBelt, sSetTag)){
iSetItemsEquiped ++;
}
if(TestItemBelongsToSet(equipedItems.oBolts, sSetTag)){
iSetItemsEquiped ++;
}
if(TestItemBelongsToSet(equipedItems.oBoots, sSetTag)){
iSetItemsEquiped ++;
}
if(TestItemBelongsToSet(equipedItems.oBullets, sSetTag)){
iSetItemsEquiped ++;
}
if(TestItemBelongsToSet(equipedItems.oCarmour, sSetTag)){
iSetItemsEquiped ++;
}
if(TestItemBelongsToSet(equipedItems.oChest, sSetTag)){
iSetItemsEquiped ++;
}
if(TestItemBelongsToSet(equipedItems.oCloak, sSetTag)){
iSetItemsEquiped ++;
}
if(TestItemBelongsToSet(equipedItems.oCweaponb, sSetTag)){
iSetItemsEquiped ++;
}
if(TestItemBelongsToSet(equipedItems.oCweaponl, sSetTag)){
iSetItemsEquiped ++;
}
if(TestItemBelongsToSet(equipedItems.oCweaponr, sSetTag)){
iSetItemsEquiped ++;
}
if(TestItemBelongsToSet(equipedItems.oHead, sSetTag)){
iSetItemsEquiped ++;
}
if(TestItemBelongsToSet(equipedItems.oLefthand, sSetTag)){
iSetItemsEquiped ++;
}
if(TestItemBelongsToSet(equipedItems.oLeftring, sSetTag)){
iSetItemsEquiped ++;
}
if(TestItemBelongsToSet(equipedItems.oNeck, sSetTag)){
iSetItemsEquiped ++;
}
if(TestItemBelongsToSet(equipedItems.oRighthand, sSetTag)){
iSetItemsEquiped ++;
}
if(TestItemBelongsToSet(equipedItems.oRightring, sSetTag)){
iSetItemsEquiped ++;
}
return iSetItemsEquiped;
}
// SSS EEEE TTTTTT III TTTTTT EEEE M M PPPP RRRR OOO PPPP M M OOO DDD III FFFF Y Y EEEE RRRR U U TTTTTT III L SSS
// S E TT I TT E MM MM P P R R O O P P MM MM O O D D I F Y Y E R R U U TT I L S
// SSS EEE TT I TT EEE M M M PPPP RRRR O O PPPP M M M O O D D I FFF Y EEE RRRR U U TT I L SSS
// S E TT I TT E M M P R R O O P M M O O D D I F Y E R R U U TT I L S
// SSSS EEEE TT III TT EEEE M M P R RR OOO P M M OOO DDD III F Y EEEE R RR UUU TT III LLLL SSSS
struct SetItemPropArgLimits DefaultArgLimits
(
struct SetItemPropArgLimits limits
)
{
struct SetItemPropArgLimits defaultLimits;
defaultLimits.iArgOneMin = limits.iNotSetArgOneMin ? -2147483648 : limits.iArgOneMin;
defaultLimits.iArgTwoMin = limits.iNotSetArgTwoMin ? -2147483648 : limits.iArgTwoMin;
defaultLimits.iArgThreeMin = limits.iNotSetArgThreeMin ? -2147483648 : limits.iArgThreeMin;
defaultLimits.iArgOneMax = limits.iNotSetArgOneMax ? 2147483647 : limits.iArgOneMax;
defaultLimits.iArgTwoMax = limits.iNotSetArgTwoMax ? 2147483647 : limits.iArgTwoMax;
defaultLimits.iArgThreeMax = limits.iNotSetArgThreeMax ? 2147483647 : limits.iArgThreeMax;
return defaultLimits;
}
struct SetItemPropArguments GetItemPropArgumentsOneArg(
object oItem,
string sSetBonusPrefix,
struct SetItemPropArgLimits ArgLimits,
string sSetBonusArgOneSuffix = "_VALUE"
)
{
struct SetItemPropArguments args;
struct SetItemPropArgLimits limits = DefaultArgLimits(ArgLimits);
args.iArgOne = GetLocalInt(
oItem,
sSetBonusPrefix + sSetBonusArgOneSuffix
);
if(args.iArgOne < limits.iArgOneMin || args.iArgOne > limits.iArgOneMax){
error(
"ERROR! Set item bonus error, "
+ GetTag(oItem) + " has an invalid value for '"
+ sSetBonusArgOneSuffix +"' for bonus "
+ sSetBonusPrefix + ". Valid value range from "
+ IntToString(limits.iArgOneMin) + " to " + IntToString(limits.iArgOneMax)
);
}
return args;
}
struct SetItemPropArguments GetItemPropArgumentsTwoArgs(
object oItem,
string sSetBonusPrefix,
struct SetItemPropArgLimits ArgLimits,
string sSetBonusArgOneSuffix,
string sSetBonusArgTwoSuffix = "_VALUE"
)
{
struct SetItemPropArguments args;
struct SetItemPropArgLimits limits = DefaultArgLimits(ArgLimits);
args.iArgOne = GetLocalInt(
oItem,
sSetBonusPrefix + sSetBonusArgOneSuffix
);
args.iArgTwo = GetLocalInt(
oItem,
sSetBonusPrefix + sSetBonusArgTwoSuffix
);
if(args.iArgOne < limits.iArgOneMin || args.iArgOne > limits.iArgOneMax){
error(
"ERROR! Set item bonus error, "
+ GetTag(oItem) + " has an invalid value for '"
+ sSetBonusArgOneSuffix +"' for bonus "
+ sSetBonusPrefix + ". Valid value range from "
+ IntToString(limits.iArgOneMin) + " to " + IntToString(limits.iArgOneMax)
);
}
if(args.iArgTwo < limits.iArgTwoMin || args.iArgTwo > limits.iArgTwoMax){
error(
"ERROR! Set item bonus error, "
+ GetTag(oItem) + " has an invalid value for '"
+ sSetBonusArgTwoSuffix +"' for bonus "
+ sSetBonusPrefix + ". Valid value range from "
+ IntToString(limits.iArgTwoMin) + " to " + IntToString(limits.iArgTwoMax)
);
}
return args;
}
struct SetItemPropArguments GetItemPropArgumentsThreeArgs(
object oItem,
string sSetBonusPrefix,
struct SetItemPropArgLimits ArgLimits,
string sSetBonusArgOneSuffix,
string sSetBonusArgTwoSuffix,
string sSetBonusArgThreeSuffix = "_VALUE"
)
{
struct SetItemPropArguments args;
struct SetItemPropArgLimits limits = DefaultArgLimits(ArgLimits);
args.iArgOne = GetLocalInt(
oItem,
sSetBonusPrefix + sSetBonusArgOneSuffix
);
args.iArgTwo = GetLocalInt(
oItem,
sSetBonusPrefix + sSetBonusArgTwoSuffix
);
args.iArgThree = GetLocalInt(
oItem,
sSetBonusPrefix + sSetBonusArgThreeSuffix
);
if(args.iArgOne < limits.iArgOneMin || args.iArgOne > limits.iArgOneMax){
error(
"ERROR! Set item bonus error, "
+ GetTag(oItem) + " has an invalid value for '"
+ sSetBonusArgOneSuffix +"' for bonus "
+ sSetBonusPrefix + ". Valid value range from "
+ IntToString(limits.iArgOneMin) + " to " + IntToString(limits.iArgOneMax)
);
}
if(args.iArgTwo < limits.iArgTwoMin || args.iArgTwo > limits.iArgTwoMax){
error(
"ERROR! Set item bonus error, "
+ GetTag(oItem) + " has an invalid value for '"
+ sSetBonusArgTwoSuffix +"' for bonus "
+ sSetBonusPrefix + ". Valid value range from "
+ IntToString(limits.iArgTwoMin) + " to " + IntToString(limits.iArgTwoMax)
);
}
if(args.iArgThree < limits.iArgThreeMin || args.iArgThree > limits.iArgThreeMax){
error(
"ERROR! Set item bonus error, "
+ GetTag(oItem) + " has an invalid value for '"
+ sSetBonusArgTwoSuffix +"' for bonus "
+ sSetBonusPrefix + ". Valid value range from "
+ IntToString(limits.iArgThreeMin) + " to " + IntToString(limits.iArgThreeMax)
);
}
return args;
}
int GetReplaceOrAddProp(object oItem, string sSetBonusPrefix)
{
return GetLocalInt(oItem, sSetBonusPrefix + "_REPLACE");
}
// RRRR d SSS t BBBB ff t
// R R d S t B B f t ii
// RRRR eee ddd ooo SSS eee ttt BBBB ooo nnn u u ss eee ss fff u u nnn ccc ttt ooo nnn ss
// R R e e d d o o S e e t B B o o n n u u s e e s f u u n n c t ii o o n n s
// R RR ee ddd ooo SSSS ee tt BBBB ooo n n uuu ss ee ss f uuu n n ccc tt ii ooo n n ss
// Redo the set bonuses on a single item.
void RedoSetItemBonuses(object oItem, string sSetTag, int iSetItemsEquiped)
{
if(!TestItemBelongsToSet(oItem, sSetTag)){
trace("Skipping non set item "+GetTag(oItem));
return; //If this item isn't a part of the set, just drop out of this function.
}
string sSetItemTagVarName = SetItemTagVarName(
GetSetTagId(oItem, sSetTag)
);
int iBonusId = 0;
string sSetBonusPrefix = sSetItemTagVarName + "_BONUS_" + IntToString(iBonusId);
string sSetPropertyBounsType = GetLocalString(
oItem,
sSetBonusPrefix + "_TYPE"
);
trace(
"sSetBonusPrefix: " + sSetBonusPrefix
);
debug(
"Redoing set bonus on "
+ GetTag(oItem)
+ " for set "
+ sSetTag
+ " at bonus lvl "
+ IntToString(iSetItemsEquiped)
);
while( sSetPropertyBounsType != "" )
{
debug("Checking Bonus of type: " + sSetPropertyBounsType);
int iSetBonusID = GetLocalInt(
oItem,
sSetBonusPrefix + "_ID"
);
int iSetBounsMinSetItems = GetLocalInt(
oItem,
sSetBonusPrefix + "_MIN_SET_ITEMS"
);
string sCustomSetBonusApplyScript = GetLocalString(
oItem,
sSetBonusPrefix + "_APPLY_SCRIPT"
);
string sCustomSetBonusRemoveScript = GetLocalString(
oItem,
sSetBonusPrefix + "_REMOVE_SCRIPT"
);
int iAllowMultipleProps = FALSE; //Set this to true to use AddItemProperty instead of IPSafeAddItemProp in cases where more than one prop of a type can be added to an item, such as bonus spell slots.
int iIgnoreSubType = FALSE;
if(iSetItemsEquiped >= iSetBounsMinSetItems){
itemproperty ipNewBonus;
int iSetPropertyBonusType = GetItemPropertyConstFromSetPropertyType(sSetPropertyBounsType);
struct SetItemPropArgLimits limits;
struct SetItemPropArguments args;
// Documentation Regex: case (ITEM_PROPERTY_[A-Z_]+) ?:((\n\s+limits\.iArgOneMin = (\d+);)?(\n\s+limits\.iArgOneMax = (\d+);)?(\n\s+limits\.iArgTwoMin = (\d+);)?(\n\s+limits\.iArgTwoMax = (\d+);)?(\n\s+limits.iArgThreeMin = (\d+);)?(\n\s+limits.iArgThreeMax = (\d+);)?(\n.+)+limits,(\n\s+"([A-Z_]+)",?.*)?(\n\s+"([A-Z_]+)",?.*)?(\n\s+"([A-Z_]+)",?.*)?)?
switch(iSetPropertyBonusType)
{
case ITEM_PROPERTY_ABILITY_BONUS:
limits.iArgOneMin = 0;
limits.iArgOneMax = 5;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 12;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_ABILITY_BONUS",
"_VALUE"
);
debug("Adding ITEM_PROPERTY_ABILITY_BONUS: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyAbilityBonus(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_AC_BONUS:
limits.iArgOneMin = 1;
limits.iArgOneMax = 20;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_VALUE"
);
debug("Adding ITEM_PROPERTY_AC_BONUS: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyACBonus(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP:
limits.iArgOneMin = 0;
limits.iArgOneMax = 5;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 20;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_AC_BONUS_VS_ALIGNMENT_GROUP",
"_VALUE"
);
debug("Adding ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyACBonusVsAlign(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE:
limits.iArgOneMin = 0;
limits.iArgOneMax = 13;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 20;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_AC_BONUS_VS_DAMAGE_TYPE",
"_VALUE"
);
debug("Adding ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyACBonusVsDmgType(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP:
limits.iArgOneMin = 0;
limits.iArgOneMax = 25;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 20;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_AC_BONUS_VS_RACIAL_GROUP",
"_VALUE"
);
debug("Adding ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyACBonusVsRace(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_AC_BONUS_VS_SPECIFIC_ALIGNMENT :
limits.iArgOneMin = 0;
limits.iArgOneMax = 8;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 20;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_AC_BONUS_VS_SPECIFIC_ALIGNMENT",
"_VALUE"
);
debug("Adding ITEM_PROPERTY_AC_BONUS_VS_SPECIFIC_ALIGNMENT: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyACBonusVsSAlign(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_ADDITIONAL :
limits.iArgOneMin = 0;
limits.iArgOneMax = 1;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_ADDITIONAL"
);
debug("Adding ITEM_PROPERTY_ADDITIONAL: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyAdditional(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_ARCANE_SPELL_FAILURE :
limits.iArgOneMin = 0;
limits.iArgOneMax = 19;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_ARCANE_SPELL_FAILURE"
);
debug("Adding ITEM_PROPERTY_ARCANE_SPELL_FAILURE: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyArcaneSpellFailure(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_ATTACK_BONUS :
limits.iArgOneMin = 1;
limits.iArgOneMax = 20;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_ATTACK_BONUS"
);
debug("Adding ITEM_PROPERTY_ATTACK_BONUS: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyAttackBonus(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP :
limits.iArgOneMin = 0;
limits.iArgOneMax = 5;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 20;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_ATTACK_BONUS_VS_ALIGNMENT_GROUP",
"_VALUE"
);
debug("Adding ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyAttackBonusVsAlign(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP :
limits.iArgOneMin = 0;
limits.iArgOneMax = 25;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 20;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_ATTACK_BONUS_VS_RACIAL_GROUP",
"_VALUE"
);
debug("Adding ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyAttackBonusVsRace(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT :
limits.iArgOneMin = 0;
limits.iArgOneMax = 8;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 20;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT",
"_VALUE"
);
debug("Adding ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyAttackBonusVsSAlign(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_BASE_ITEM_WEIGHT_REDUCTION :
limits.iArgOneMin = 1;
limits.iArgOneMax = 5;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_BASE_ITEM_WEIGHT_REDUCTION"
);
debug("Adding ITEM_PROPERTY_BASE_ITEM_WEIGHT_REDUCTION: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyWeightReduction(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_BONUS_FEAT :
limits.iArgOneMin = 0;
limits.iArgOneMax = 62;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_BONUS_FEAT"
);
debug("Adding ITEM_PROPERTY_BONUS_FEAT: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyBonusFeat(
args.iArgOne
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N :
limits.iArgOneMin = 0;
limits.iArgOneMax = 10;
limits.iArgTwoMin = 0;
limits.iArgTwoMax = 9;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_CLASS",
"_BONUS_SPELL_SLOT_OF_LEVEL_N"
);
debug("Adding ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyBonusLevelSpell(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_CAST_SPELL :
limits.iArgOneMin = 0;
limits.iArgOneMax = 410;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 13;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_CAST_SPELL",
"_USES"
);
debug("Adding ITEM_PROPERTY_CAST_SPELL: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyCastSpell(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_DAMAGE_BONUS :
limits.iArgOneMin = 0;
limits.iArgOneMax = 13;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 20;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_DAMAGE_TYPE",
"_DAMAGE_BONUS"
);
debug("Adding ITEM_PROPERTY_DAMAGE_BONUS: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyDamageBonus(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP :
limits.iArgOneMin = 0;
limits.iArgOneMax = 5;
limits.iArgTwoMin = 0;
limits.iArgTwoMax = 13;
limits.iArgThreeMin = 1;
limits.iArgThreeMax = 20;
args = GetItemPropArgumentsThreeArgs(
oItem,
sSetBonusPrefix,
limits,
"_DAMAGE_BONUS_VS_ALIGNMENT_GROUP",
"_DAMAGE_TYPE",
"_DAMAGE_BONUS"
);
debug("Adding ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyDamageBonusVsAlign(
args.iArgOne,
args.iArgTwo,
args.iArgThree
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP :
limits.iArgOneMin = 0;
limits.iArgOneMax = 25;
limits.iArgTwoMin = 0;
limits.iArgTwoMax = 13;
limits.iArgThreeMin = 1;
limits.iArgThreeMax = 20;
args = GetItemPropArgumentsThreeArgs(
oItem,
sSetBonusPrefix,
limits,
"_DAMAGE_BONUS_VS_RACIAL_GROUP",
"_DAMAGE_TYPE",
"_DAMAGE_BONUS"
);
debug("Adding ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyDamageBonusVsRace(
args.iArgOne,
args.iArgTwo,
args.iArgThree
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_DAMAGE_BONUS_VS_SPECIFIC_ALIGNMENT :
limits.iArgOneMin = 0;
limits.iArgOneMax = 8;
limits.iArgTwoMin = 0;
limits.iArgTwoMax = 13;
limits.iArgThreeMin = 1;
limits.iArgThreeMax = 20;
args = GetItemPropArgumentsThreeArgs(
oItem,
sSetBonusPrefix,
limits,
"_DAMAGE_BONUS_VS_SPECIFIC_ALIGNMENT",
"_DAMAGE_TYPE",
"_DAMAGE_BONUS"
);
debug("Adding ITEM_PROPERTY_DAMAGE_BONUS_VS_SPECIFIC_ALIGNMENT: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyDamageBonusVsSAlign(
args.iArgOne,
args.iArgTwo,
args.iArgThree
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_DAMAGE_REDUCTION :
limits.iArgOneMin = 0;
limits.iArgOneMax = 19;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 10;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_DAMAGE_REDUCTION",
"_DAMAGE_SOAK"
);
debug("Adding ITEM_PROPERTY_DAMAGE_REDUCTION: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyDamageReduction(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_DAMAGE_RESISTANCE :
limits.iArgOneMin = 0;
limits.iArgOneMax = 13;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 10;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_DAMAGE_TYPE",
"_DAMAGE_RESISTANCE"
);
debug("Adding ITEM_PROPERTY_DAMAGE_RESISTANCE: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyDamageResistance(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_DAMAGE_VULNERABILITY :
limits.iArgOneMin = 0;
limits.iArgOneMax = 13;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 7;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_DAMAGE_TYPE",
"_DAMAGE_VULNERABILITY"
);
debug("Adding ITEM_PROPERTY_DAMAGE_VULNERABILITY: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyDamageVulnerability(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_DARKVISION :
debug("Adding ITEM_PROPERTY_DARKVISION");
ipNewBonus = TagItemProperty(
ItemPropertyDarkvision(),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_DECREASED_ABILITY_SCORE :
limits.iArgOneMin = 0;
limits.iArgOneMax = 5;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 50;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_DECREASED_ABILITY_SCORE",
"_MODIFIER"
);
debug("Adding ITEM_PROPERTY_DECREASED_ABILITY_SCORE: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyDecreaseAbility(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_DECREASED_AC :
limits.iArgOneMin = 0;
limits.iArgOneMax = 4;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 5;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_MODIFIER",
"_DECREASED_AC"
);
debug("Adding ITEM_PROPERTY_DECREASED_AC: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyDecreaseAC(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER :
limits.iArgOneMin = 1;
limits.iArgOneMax = 5;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_DECREASED_ATTACK_MODIFIER"
);
debug("Adding ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyAttackPenalty(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_DECREASED_DAMAGE :
limits.iArgOneMin = 1;
limits.iArgOneMax = 5;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_DECREASED_DAMAGE"
);
debug("Adding ITEM_PROPERTY_DECREASED_DAMAGE: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyDamagePenalty(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_DECREASED_ENHANCEMENT_MODIFIER :
limits.iArgOneMin = 1;
limits.iArgOneMax = 5;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_DECREASED_ENHANCEMENT_MODIFIER"
);
debug("Adding ITEM_PROPERTY_DECREASED_ENHANCEMENT_MODIFIER: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyEnhancementPenalty(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_DECREASED_SAVING_THROWS :
limits.iArgOneMin = 0;
limits.iArgOneMax = 15;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 20;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_SAVE_VS",
"_DECREASED_SAVING_THROWS"
);
debug("Adding ITEM_PROPERTY_DECREASED_SAVING_THROWS: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyReducedSavingThrowVsX(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC :
limits.iArgOneMin = 0;
limits.iArgOneMax = 15;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 20;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_SAVE_VS",
"_DECREASED_SAVING_THROWS_SPECIFIC"
);
debug("Adding ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyReducedSavingThrow(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_DECREASED_SKILL_MODIFIER :
limits.iArgOneMin = 0;
limits.iArgOneMax = 255;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 50;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_SKILL_MODIFIER",
"_DECREASED_SKILL_MODIFIER"
);
debug("Adding ITEM_PROPERTY_DECREASED_SKILL_MODIFIER: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyDecreaseSkill(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_ENHANCED_CONTAINER_REDUCED_WEIGHT :
limits.iArgOneMin = 1;
limits.iArgOneMax = 5;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_ENHANCED_CONTAINER_REDUCED_WEIGHT"
);
debug("Adding ITEM_PROPERTY_ENHANCED_CONTAINER_REDUCED_WEIGHT: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyContainerReducedWeight(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_ENHANCEMENT_BONUS :
limits.iArgOneMin = 1;
limits.iArgOneMax = 20;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_ENHANCEMENT_BONUS"
);
debug("Adding ITEM_PROPERTY_ENHANCEMENT_BONUS: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyEnhancementBonus(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP :
limits.iArgOneMin = 0;
limits.iArgOneMax = 5;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 20;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP",
"_VALUE"
);
debug("Adding ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyEnhancementBonusVsAlign(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP :
limits.iArgOneMin = 0;
limits.iArgOneMax = 25;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 20;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_ENHANCEMENT_BONUS_VS_RACIAL_GROUP",
"_VALUE"
);
debug("Adding ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyEnhancementBonusVsRace(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNEMENT :
limits.iArgOneMin = 0;
limits.iArgOneMax = 8;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 20;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNEMENT",
"_VALUE"
);
debug("Adding ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNEMENT: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyEnhancementBonusVsSAlign(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE :
limits.iArgOneMin = 0;
limits.iArgOneMax = 13;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_EXTRA_MELEE_DAMAGE_TYPE"
);
debug("Adding ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyExtraMeleeDamageType(
args.iArgOne
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE :
limits.iArgOneMin = 0;
limits.iArgOneMax = 13;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_EXTRA_RANGED_DAMAGE_TYPE"
);
debug("Adding ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyExtraRangeDamageType(
args.iArgOne
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_FREEDOM_OF_MOVEMENT :
debug("Adding ITEM_PROPERTY_FREEDOM_OF_MOVEMENT");
ipNewBonus = TagItemProperty(
ItemPropertyFreeAction(),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_HASTE :
debug("Adding ITEM_PROPERTY_HASTE");
ipNewBonus = TagItemProperty(
ItemPropertyHaste(),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_HEALERS_KIT :
limits.iArgOneMin = 1;
limits.iArgOneMax = 12;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_HEALERS_KIT"
);
debug("Adding ITEM_PROPERTY_HEALERS_KIT: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyHealersKit(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_HOLY_AVENGER :
debug("Adding ITEM_PROPERTY_HOLY_AVENGER");
ipNewBonus = TagItemProperty(
ItemPropertyHolyAvenger(),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE :
limits.iArgOneMin = 0;
limits.iArgOneMax = 13;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 7;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_IMMUNITY_DAMAGE_TYPE",
"_IMMUNE_BONUS"
);
debug("Adding ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyDamageImmunity(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS :
limits.iArgOneMin = 0;
limits.iArgOneMax = 9;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_IMMUNITY_MISCELLANEOUS"
);
debug("Adding ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyImmunityMisc(
args.iArgOne
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL :
limits.iArgOneMin = 0;
limits.iArgOneMax = 187;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_IMMUNITY_SPECIFIC_SPELL"
);
debug("Adding ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertySpellImmunitySpecific(
args.iArgOne
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_IMMUNITY_SPELL_SCHOOL :
limits.iArgOneMin = 0;
limits.iArgOneMax = 7;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_IMMUNITY_SPELL_SCHOOL"
);
debug("Adding ITEM_PROPERTY_IMMUNITY_SPELL_SCHOOL: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertySpellImmunitySchool(
args.iArgOne
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_IMMUNITY_SPELLS_BY_LEVEL :
limits.iArgOneMin = 1;
limits.iArgOneMax = 9;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_IMMUNITY_SPELLS_BY_LEVEL"
);
debug("Adding ITEM_PROPERTY_IMMUNITY_SPELLS_BY_LEVEL: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyImmunityToSpellLevel(
args.iArgOne
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_IMPROVED_EVASION :
debug("Adding ITEM_PROPERTY_IMPROVED_EVASION");
ipNewBonus = TagItemProperty(
ItemPropertyImprovedEvasion(),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_KEEN :
debug("Adding ITEM_PROPERTY_KEEN");
ipNewBonus = TagItemProperty(
ItemPropertyKeen(),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_LIGHT :
limits.iArgOneMin = 1;
limits.iArgOneMax = 4;
limits.iArgTwoMin = 0;
limits.iArgTwoMax = 6;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_LIGHT",
"_COLOR"
);
debug("Adding ITEM_PROPERTY_LIGHT: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyLight(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_MASSIVE_CRITICALS :
limits.iArgOneMin = 1;
limits.iArgOneMax = 20;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_MASSIVE_CRITICALS"
);
debug("Adding ITEM_PROPERTY_MASSIVE_CRITICALS: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyMassiveCritical(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_MATERIAL :
limits.iArgOneMin = 0;
limits.iArgOneMax = 77;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_MATERIAL"
);
debug("Adding ITEM_PROPERTY_MATERIAL: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyMaterial(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_MIGHTY :
limits.iArgOneMin = 1;
limits.iArgOneMax = 20;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_MIGHTY"
);
debug("Adding ITEM_PROPERTY_MIGHTY: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyMaxRangeStrengthMod(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_MIND_BLANK :
error("Error! Set Property ITEM_PROPERTY_MIND_BLANK cannot be used due to missing constructor!");
break;
case ITEM_PROPERTY_MONSTER_DAMAGE :
limits.iArgOneMin = 1;
limits.iArgOneMax = 57;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_MONSTER_DAMAGE"
);
debug("Adding ITEM_PROPERTY_MONSTER_DAMAGE: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyMonsterDamage(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_NO_DAMAGE :
debug("Adding ITEM_PROPERTY_NO_DAMAGE");
ipNewBonus = TagItemProperty(
ItemPropertyNoDamage(),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_ON_HIT_PROPERTIES :
limits.iArgOneMin = 0;
limits.iArgOneMax = 25;
limits.iArgTwoMin = 0;
limits.iArgTwoMax = 6;
limits.iArgThreeMin = 0;
limits.iArgThreeMax = 255; //TODO: Fix this value to be the maximum of the various consts.
args = GetItemPropArgumentsThreeArgs(
oItem,
sSetBonusPrefix,
limits,
"_ON_HIT_PROPERTIES",
"_SAVE_DC",
"_SPECIAL"
);
debug("Adding ITEM_PROPERTY_ON_HIT_PROPERTIES: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyOnHitProps(
args.iArgOne,
args.iArgTwo,
args.iArgThree
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_ON_MONSTER_HIT :
warn("Set ITEM_PROPERTY_ON_MONSTER_HIT has a know bug, check the lexicon for more info.");
limits.iArgOneMin = 0;
limits.iArgOneMax = 9;
limits.iArgTwoMin = 0;
limits.iArgTwoMax = 255;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_ON_MONSTER_HIT",
"_SPECIAL"
);
debug("Adding ITEM_PROPERTY_ON_MONSTER_HIT: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyOnMonsterHitProperties(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_ONHITCASTSPELL:
limits.iArgOneMin = 0;
limits.iArgOneMax = 140;
limits.iArgTwoMin = 0;
limits.iNotSetArgTwoMax = TRUE;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_ONHITCASTSPELL",
"_CAST_LEVEL"
);
debug("Adding ITEM_PROPERTY_ONHITCASTSPELL: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyOnHitCastSpell(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
iIgnoreSubType = TRUE;
break;
case ITEM_PROPERTY_POISON :
error("Error! Set Property ITEM_PROPERTY_POISON cannot be used due to missing constructor!");
break;
case ITEM_PROPERTY_QUALITY :
limits.iArgOneMin = 0;
limits.iArgOneMax = 15;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_QUALITY"
);
debug("Adding ITEM_PROPERTY_QUALITY: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyQuality(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_REGENERATION :
limits.iArgOneMin = 1;
limits.iArgOneMax = 20;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_REGENERATION"
);
debug("Adding ITEM_PROPERTY_REGENERATION: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyRegeneration(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_REGENERATION_VAMPIRIC :
limits.iArgOneMin = 1;
limits.iArgOneMax = 20;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_REGENERATION_VAMPIRIC"
);
debug("Adding ITEM_PROPERTY_REGENERATION_VAMPIRIC: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyVampiricRegeneration(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_SAVING_THROW_BONUS :
limits.iArgOneMin = 0;
limits.iArgOneMax = 15;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 20;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_SAVE_VS",
"_SAVING_THROW_BONUS"
);
debug("Adding ITEM_PROPERTY_SAVING_THROW_BONUS: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyBonusSavingThrowVsX(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC :
limits.iArgOneMin = 1;
limits.iArgOneMax = 3;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 20;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_SAVING_THROW_BONUS_SPECIFIC",
"_SAVING_THROW_BONUS"
);
debug("Adding ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyBonusSavingThrow(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_SKILL_BONUS :
limits.iArgOneMin = 0;
limits.iArgOneMax = 255;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 50;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_SKILL_BONUS",
"_VALUE"
);
debug("Adding ITEM_PROPERTY_SKILL_BONUS: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertySkillBonus(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_SPECIAL_WALK :
limits.iArgOneMin = 0;
limits.iArgOneMax = 0;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_SPECIAL_WALK"
);
debug("Adding ITEM_PROPERTY_SPECIAL_WALK: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertySpecialWalk(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_SPELL_RESISTANCE :
limits.iArgOneMin = 0;
limits.iArgOneMax = 11;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_SPELL_RESISTANCE"
);
debug("Adding ITEM_PROPERTY_SPELL_RESISTANCE: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyBonusSpellResistance(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_THIEVES_TOOLS :
limits.iArgOneMin = 1;
limits.iArgOneMax = 12;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_THIEVES_TOOLS"
);
debug("Adding ITEM_PROPERTY_THIEVES_TOOLS: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyThievesTools(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_TRAP :
limits.iArgOneMin = 0;
limits.iArgOneMax = 3;
limits.iArgTwoMin = 1;
limits.iArgTwoMax = 11;
args = GetItemPropArgumentsTwoArgs(
oItem,
sSetBonusPrefix,
limits,
"_VALUE",
"_TRAP"
);
debug("Adding ITEM_PROPERTY_TRAP: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyTrap(
args.iArgOne,
args.iArgTwo
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_TRUE_SEEING :
debug("Adding ITEM_PROPERTY_TRUE_SEEING");
ipNewBonus = TagItemProperty(
ItemPropertyTrueSeeing(),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_TURN_RESISTANCE :
limits.iArgOneMin = 1;
limits.iArgOneMax = 50;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_TURN_RESISTANCE"
);
debug("Adding ITEM_PROPERTY_TURN_RESISTANCE: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyTurnResistance(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_UNLIMITED_AMMUNITION :
limits.iArgOneMin = 1;
limits.iArgOneMax = 15;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_UNLIMITED_AMMUNITION"
);
debug("Adding ITEM_PROPERTY_UNLIMITED_AMMUNITION: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyUnlimitedAmmo(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP :
limits.iArgOneMin = 0;
limits.iArgOneMax = 5;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_USE_LIMITATION_ALIGNMENT_GROUP"
);
debug("Adding ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyLimitUseByAlign(
args.iArgOne
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_USE_LIMITATION_CLASS :
limits.iArgOneMin = 0;
limits.iArgOneMax = 10;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_USE_LIMITATION_CLASS"
);
debug("Adding ITEM_PROPERTY_USE_LIMITATION_CLASS: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyLimitUseByClass(
args.iArgOne
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE :
limits.iArgOneMin = 0;
limits.iArgOneMax = 25;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_USE_LIMITATION_RACIAL_TYPE"
);
debug("Adding ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyLimitUseByRace(
args.iArgOne
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_USE_LIMITATION_SPECIFIC_ALIGNMENT :
limits.iArgOneMin = 0;
limits.iArgOneMax = 8;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_USE_LIMITATION_SPECIFIC_ALIGNMENT"
);
debug("Adding ITEM_PROPERTY_USE_LIMITATION_SPECIFIC_ALIGNMENT: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyLimitUseBySAlign(
args.iArgOne
),
sSetBonusPrefix
);
if(!GetReplaceOrAddProp(oItem, sSetBonusPrefix))
iAllowMultipleProps = TRUE;
break;
case ITEM_PROPERTY_USE_LIMITATION_TILESET :
error("Error! Set Property ITEM_PROPERTY_USE_LIMITATION_TILESET cannot be used due to missing constructor!");
break;
case ITEM_PROPERTY_VISUALEFFECT :
limits.iArgOneMin = 0;
limits.iArgOneMax = 6;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_VISUALEFFECT"
);
debug("Adding ITEM_PROPERTY_VISUALEFFECT: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyVisualEffect(
args.iArgOne
),
sSetBonusPrefix
);
break;
case ITEM_PROPERTY_WEIGHT_INCREASE :
limits.iArgOneMin = 0;
limits.iArgOneMax = 5;
args = GetItemPropArgumentsOneArg(
oItem,
sSetBonusPrefix,
limits,
"_WEIGHT_INCREASE"
);
debug("Adding ITEM_PROPERTY_WEIGHT_INCREASE: " + IntToString(args.iArgOne));
ipNewBonus = TagItemProperty(
ItemPropertyWeightIncrease(
args.iArgOne
),
sSetBonusPrefix
);
break;
case CUSTOM_SET_BONUS:
//Execute custom script on bonus applied.
ExecuteScript(sCustomSetBonusApplyScript, GetPCItemLastEquippedBy());
break;
default:
error("Error! Set property Unrecognized: " + sSetPropertyBounsType);
}
if(GetIsItemPropertyValid(ipNewBonus)){ //Test for Custom prop applied or error.
debug("ITEM PROPERTY TYPE:" + IntToString(GetItemPropertyType(ipNewBonus)));
debug("ITEM PROPERTY SUB TYPE:" + IntToString(GetItemPropertySubType(ipNewBonus)));
int iAlreadyApplied;
itemproperty ipLoop = GetFirstItemProperty(oItem);
while(GetIsItemPropertyValid(ipLoop)){
if(GetItemPropertyTag(ipLoop) == sSetBonusPrefix){
iAlreadyApplied = TRUE;
break;
}
ipLoop = GetNextItemProperty(oItem);
}
if(!iAlreadyApplied){
if(iAllowMultipleProps){
IPSafeAddItemProperty(
oItem,
ipNewBonus,
0.0,
X2_IP_ADDPROP_POLICY_IGNORE_EXISTING,
FALSE,
iIgnoreSubType
);
}else{
IPSafeAddItemProperty(
oItem,
ipNewBonus,
0.0,
X2_IP_ADDPROP_POLICY_REPLACE_EXISTING,
FALSE,
iIgnoreSubType
);
}
}
}
}else{
if(sCustomSetBonusRemoveScript != ""){
//If there is a custom bonus remove script for this tag, then run it first.
ExecuteScript(sCustomSetBonusRemoveScript, GetPCItemLastUnequippedBy());
}
itemproperty ipLoop = GetFirstItemProperty(oItem);
while(GetIsItemPropertyValid(ipLoop)){
if(GetItemPropertyTag(ipLoop) == sSetBonusPrefix){
debug("Removing Set Property: " + sSetBonusPrefix);
RemoveItemProperty(oItem, ipLoop);
break;
}
ipLoop = GetNextItemProperty(oItem);
}
}
iBonusId ++;
sSetBonusPrefix = sSetItemTagVarName + "_BONUS_" + IntToString(iBonusId);
sSetPropertyBounsType = GetLocalString(
oItem,
sSetBonusPrefix + "_TYPE"
);
}
}
void RedoEquipedSetItemsBonuses(struct EquipedItems equipedItems, string sSetTag, int iSetItemsCount)
{
debug("Redoing equiped items set bonuses for set " + sSetTag + " to bonus lvl " + IntToString(iSetItemsCount));
RedoSetItemBonuses(equipedItems.oArms, sSetTag, iSetItemsCount);
RedoSetItemBonuses(equipedItems.oArrows, sSetTag, iSetItemsCount);
RedoSetItemBonuses(equipedItems.oBelt, sSetTag, iSetItemsCount);
RedoSetItemBonuses(equipedItems.oBolts, sSetTag, iSetItemsCount);
RedoSetItemBonuses(equipedItems.oBoots, sSetTag, iSetItemsCount);
RedoSetItemBonuses(equipedItems.oBullets, sSetTag, iSetItemsCount);
RedoSetItemBonuses(equipedItems.oCarmour, sSetTag, iSetItemsCount);
RedoSetItemBonuses(equipedItems.oChest, sSetTag, iSetItemsCount);
RedoSetItemBonuses(equipedItems.oCloak, sSetTag, iSetItemsCount);
RedoSetItemBonuses(equipedItems.oCweaponb, sSetTag, iSetItemsCount);
RedoSetItemBonuses(equipedItems.oCweaponl, sSetTag, iSetItemsCount);
RedoSetItemBonuses(equipedItems.oCweaponr, sSetTag, iSetItemsCount);
RedoSetItemBonuses(equipedItems.oHead, sSetTag, iSetItemsCount);
RedoSetItemBonuses(equipedItems.oLefthand, sSetTag, iSetItemsCount);
RedoSetItemBonuses(equipedItems.oLeftring, sSetTag, iSetItemsCount);
RedoSetItemBonuses(equipedItems.oNeck, sSetTag, iSetItemsCount);
RedoSetItemBonuses(equipedItems.oRighthand, sSetTag, iSetItemsCount);
RedoSetItemBonuses(equipedItems.oRightring, sSetTag, iSetItemsCount);
}