Files
Anphillia_PRC8/_module/nss/ip_ini.nss
Jaysyn904 28cdb617b3 Initial commit
Adding all of the current content for Anphillia Unlimited.
2024-01-04 07:49:38 -05:00

927 lines
61 KiB
Plaintext

///////////////////////////////////////////////////////////////////////////////
// ip_ini
// written by: eyesolated
// written at: June 17, 2004
//
// Notes: IP Initialization
///////////
// Includes
//
#include "eas_inc"
#include "color_inc"
#include "egs_inc"
#include "ip_inc"
void ip_AutoPropertyPlus(int iProperty, int iType, string sCategoriesMain, string sCategoriesSub, string sBaseItems, int iVarOne, int iVarTwo, int iVarThree, int iMagicLevelFrom, int iJumpValue, int iEndLevel, int iMonsterOnly = FALSE, int iIncreaseBy = 1);
////////////////
// Function Code
//
void ip_AutoPropertyPlus_Delayed(int iProperty, int iType, string sCategoriesMain, string sCategoriesSub, string sBaseItems, int iVarOne, int iVarTwo, int iVarThree, int iMagicLevelFrom, int iJumpValue, int iEndLevel, int iMonsterOnly = FALSE, int iIncreaseBy = 1)
{
int iCount;
int iJumpCount = 0;
if (CI_IP_USE_NWNX)
{
for (iCount = iMagicLevelFrom; iCount < iEndLevel + 1; iCount++)
{
ip_AddProperty(iProperty, iType, sCategoriesMain, sCategoriesSub, sBaseItems, iCount, iVarOne, iVarTwo, iVarThree, iMonsterOnly);
iJumpCount++;
if (iJumpCount == iJumpValue)
{
iJumpCount = 0;
iVarOne += iIncreaseBy;
}
}
}
else
{
object oMod = GetModule();
object oStorePreload = GetLocalObject(oMod, CS_IP_DB_PRELOAD_STORE_OBJ);
string sID;
for (iCount = iMagicLevelFrom; iCount < iEndLevel + 1; iCount++)
{
//s_ip_AddProperty(iProperty, iType, sCategoriesMain, sCategoriesSub, sBaseItems, iCount, iVarOne, iVarTwo, iVarThree, iMonsterOnly);
sID = IntToString(eas_SArray_Entry_Add(oStorePreload, CS_IP_DB_PRELOAD_ARRAY, "DelayedProp"));
SetLocalInt(oStorePreload, CS_IP_ID + sID, iProperty);
SetLocalInt(oStorePreload, CS_IP_TYPE + sID, iType);
SetLocalString(oStorePreload, CS_IP_CATEGORIES_MAIN + sID, sCategoriesMain);
SetLocalString(oStorePreload, CS_IP_CATEGORIES_SUB + sID, sCategoriesSub);
SetLocalString(oStorePreload, CS_IP_BASEITEMS + sID, sBaseItems);
SetLocalInt(oStorePreload, CS_IP_LEVEL + sID, iCount);
SetLocalInt(oStorePreload, CS_IP_VARONE + sID, iVarOne);
SetLocalInt(oStorePreload, CS_IP_VARTWO + sID, iVarTwo);
SetLocalInt(oStorePreload, CS_IP_VARTHREE + sID, iVarThree);
SetLocalInt(oStorePreload, CS_IP_MONSTERONLY + sID, iMonsterOnly);
iJumpCount++;
if (iJumpCount == iJumpValue)
{
iJumpCount = 0;
iVarOne += iIncreaseBy;
}
}
}
}
void ip_AutoPropertyPlus(int iProperty, int iType, string sCategoriesMain, string sCategoriesSub, string sBaseItems, int iVarOne, int iVarTwo, int iVarThree, int iMagicLevelFrom, int iJumpValue, int iEndLevel, int iMonsterOnly = FALSE, int iIncreaseBy = 1)
{
// This method delays the actual call to ip_AutoPropertyPlus to remove the Instruction Limit problems
DelayCommand(0.1, ip_AutoPropertyPlus_Delayed(iProperty, iType, sCategoriesMain, sCategoriesSub, sBaseItems, iVarOne, iVarTwo, iVarThree, iMagicLevelFrom, iJumpValue, iEndLevel, iMonsterOnly, iIncreaseBy));
}
void InitAll()
{
object oMod = GetModule();
string sCategoriesMain;
string sCategoriesSub;
string sBaseItems;
int iMonsterOnly;
// Let's setup our properties
// Create the Table
if (!CI_IP_USE_NWNX)
{
// If we're not using NWNx, we need to reduce the script calls
object oStorePreload = CreateObject(OBJECT_TYPE_STORE, CS_IP_DB_MERCHANT_RESREF, GetLocation(GetObjectByTag(CS_IP_DB_WAYPOINT)), FALSE, CS_IP_DB_PRELOAD_STORE);
eas_Array_Create(oStorePreload, CS_IP_DB_PRELOAD_ARRAY, EAS_ARRAY_TYPE_STRING);
SetLocalObject(oMod, CS_IP_DB_PRELOAD_STORE_OBJ, GetObjectByTag(CS_IP_DB_PRELOAD_STORE));
}
// Random Ability Bonus , applicable to Armor, Accessories, Melee and Ranged Weapons
// Starting on Level 7, then every 4th level
// From Level 27 every 3rd Level
// At Level 45 highest value is reached and continued to level 50
if (CI_IP_RESTRICT_AbilityBonus)
{
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON_CREATURE) + ";";
sCategoriesSub = "";
sBaseItems = ";" + IntToString(BASE_ITEM_BELT) + ";" + IntToString(BASE_ITEM_GLOVES) + ";" + IntToString(BASE_ITEM_CLOAK) + ";";
}
else
{
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_MONSTERRING) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_ACCESSORY) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON_CREATURE) + ";";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_MELEE) + ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_RANGED) + ";";
sBaseItems = "";
}
if (CI_IP_ENABLE_AbilityBonus != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_AbilityBonus == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_AbilityBonus, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 6, 8, 50, iMonsterOnly, 1);
}
// AC Bonus (Armor)
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";";
sCategoriesSub = "";
sBaseItems = ";" + IntToString(BASE_ITEM_ARMOR) + ";";
if (CI_IP_ENABLE_ACBonus != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_ACBonus == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_ACBonus, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 7, 11, 50, iMonsterOnly, 1);
}
// AC Bonus (Shield)
sCategoriesMain = "";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_ARMOR_SHIELD) + ";";
sBaseItems = "";
if (CI_IP_ENABLE_ACBonus != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_ACBonus == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_ACBonus, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 19, 11, 50, iMonsterOnly, 1);
}
// AC Bonus (Accessories)
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_MONSTERRING) + ";" + IntToString(CI_EGS_ITEM_MAIN_ACCESSORY) + ";";
sCategoriesSub = "";
sBaseItems = "";
if (CI_IP_ENABLE_ACBonus != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_ACBonus == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_ACBonus, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 19, 11, 50, iMonsterOnly, 1);
}
// AC Bonus vs. Alignment Group, applicable to Wearables
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_ACCESSORY) + ";";
if (CI_IP_ENABLE_ACBonusVsAlignment != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_ACBonusVsAlignment == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_ACBonusVsAlign, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 6, 11, 50, iMonsterOnly, 1);
}
// AC Bonus vs. Damage Type, applicable to Wearables
if (CI_IP_ENABLE_ACBonusVsDmgType != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_ACBonusVsDmgType == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_ACBonusVsDmgType, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 4, 10, 50, iMonsterOnly, 1);
}
// AC Bonus vs. Race, applicable to Wearables
if (CI_IP_ENABLE_ACBonusVsRace != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_ACBonusVsRace == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_ACBonusVsRace, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 6, 11, 50, iMonsterOnly, 1);
}
// AC Bonus vs. Specific Alignment, applicable to Wearables
if (CI_IP_ENABLE_ACBonusVsSpecificAlignment != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_ACBonusVsSpecificAlignment == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_ACBonusVsSAlign, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 4, 10, 50, iMonsterOnly, 1);
}
// Additional Property, applicable to Armor, Weapons and Accessories
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON) + ";" + IntToString(CI_EGS_ITEM_MAIN_ACCESSORY) + ";";
sCategoriesSub = ";" + ";";
sBaseItems = "";
if (CI_IP_ENABLE_AdditionalProperty != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_AdditionalProperty == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_AdditionalProperty, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 2, 0, 0, 10, 10, 50, iMonsterOnly, 1);
}
// Arcane Spell Failure, applicable to light/medium/heavy armor and shields
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_ARMOR_BODY_LIGHT) + ";" + IntToString(CI_EGS_ITEM_SUB_ARMOR_BODY_MEDIUM) + ";" + IntToString(CI_EGS_ITEM_SUB_ARMOR_BODY_HEAVY) + ";" + IntToString(CI_EGS_ITEM_SUB_ARMOR_SHIELD) + ";";
sBaseItems = "";
// First, increased Arcane Spell Failure
if (CI_IP_ENABLE_ArcaneSpellFailure_Increased != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_ArcaneSpellFailure_Increased == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_ArcaneSpellFailure, CI_IP_TYPE_NEGATIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 10, 0, 0, 10, 5, 50, iMonsterOnly, 1);
}
// Now the decreased Arcane Spell Failure
if (CI_IP_ENABLE_ArcaneSpellFailure_Decreased != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_ArcaneSpellFailure_Decreased == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_ArcaneSpellFailure, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 9, 0, 0, 10, 5, 50, iMonsterOnly, -1);
}
// Attack Bonus, Melee, Ranged, Thrown, Staves, Gloves
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON_CREATURE) + ";";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_MELEE) + ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_RANGED) + ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_THROWN) + ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_STAFF) + ";";
sBaseItems = ";" + IntToString(BASE_ITEM_GLOVES) + ";";
if (CI_IP_ENABLE_AttackBonus != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_AttackBonus == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_AttackBonus, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 6, 6, 50, iMonsterOnly, 1);
}
// Attack Bonus vs. Alignment Group, Wieldables (doesn't work on Gloves)
sBaseItems = "";
if (CI_IP_ENABLE_AttackBonusVsAlignment != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_AttackBonusVsAlignment == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_AttackBonusVsAlign, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 4, 6, 50, iMonsterOnly, 1);
}
// Attack Bonus vs. Race, Wieldables (doesn't work on Gloves)
if (CI_IP_ENABLE_AttackBonusVsRace != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_AttackBonusVsRace == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_AttackBonusVsRace, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 4, 6, 50, iMonsterOnly, 1);
}
// Attack Bonus vs. Specific Alignment, Wieldables (doesn't work on Gloves)
if (CI_IP_ENABLE_AttackBonusVsSpecificAlignment != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_AttackBonusVsSpecificAlignment == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_AttackBonusVsSAlign, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 2, 6, 50, iMonsterOnly, 1);
}
// Attack Penalty, Melee, Thrown, Staves, Gloves
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON_CREATURE) + ";";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_MELEE) + ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_THROWN) + ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_STAFF) + ";";
sBaseItems = ";" + IntToString(BASE_ITEM_GLOVES) + ";";
if (CI_IP_ENABLE_AttackPenalty != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_AttackPenalty == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_AttackPenalty, CI_IP_TYPE_NEGATIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 6, 6, 50, iMonsterOnly, 1);
}
// Bonus Feat, applicable to all wearables and Weapons
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_MONSTERRING) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_ACCESSORY) + ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON_CREATURE) + ";";
sCategoriesSub = "";
sBaseItems = "";
if (CI_IP_ENABLE_BonusFeat != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_BonusFeat == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_BonusFeat, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, 0, 0, 15, 15, 50, iMonsterOnly, 1);
}
// Bonus Level Spell, applicable to Jewelry, Staves
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_MONSTERRING) + ";";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_STAFF) + ";";
sBaseItems = ";" + IntToString(BASE_ITEM_AMULET) + ";" + IntToString(BASE_ITEM_RING) + ";";
if (CI_IP_ENABLE_BonusLevelSpell != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_BonusLevelSpell == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_BonusLevelSpell, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 6, 5, 50, iMonsterOnly, 1);
}
// Bonus Saving Throw (Reflex, Fortitude, Death), applicable to Jewelry, Armor, Clothing, Shields, Helmets, Accessories
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_MONSTERRING) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_ACCESSORY) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_MELEE) + ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_RANGED) + ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_STAFF) + ";";
sBaseItems = ";" + IntToString(BASE_ITEM_AMULET) + ";" + IntToString(BASE_ITEM_RING) + ";";
if (CI_IP_ENABLE_BonusSavingThrow != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_BonusSavingThrow == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_BonusSavingThrow, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 6, 4, 50, iMonsterOnly, 1);
}
// Bonus Saving Throw vs. Specific Effect or Damage Type (Universal excluded),
if (CI_IP_ENABLE_BonusSavingThrowVsX != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_BonusSavingThrowVsX == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_BonusSavingThrowVsX, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 2, 4, 50, iMonsterOnly, 1);
}
// Bonus Saving Throw vs. Specific Effect or Damage Type (Universal included),
if (CI_IP_ENABLE_BonusSavingThrowVsXUniversalIncluded != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_BonusSavingThrowVsXUniversalIncluded == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_BonusSavingThrowVsXUniversalIncluded, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 10, 10, 50, iMonsterOnly, 1);
}
// Spell Resistance
// Applicable to Jewelry, Clothing, Armor, Shields, Helmets
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_MONSTERRING) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";";
sCategoriesSub = "";
sBaseItems = ";" + IntToString(BASE_ITEM_AMULET) + ";" + IntToString(BASE_ITEM_RING) + ";";
if (CI_IP_ENABLE_BonusSpellResistance != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_BonusSpellResistance == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_BonusSpellResistance, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, 0, 0, 10, 4, 50, iMonsterOnly, 1);
}
// Cast Spell (Potions)
sCategoriesMain = "";
sCategoriesSub = "";
sBaseItems = ";" + IntToString(BASE_ITEM_POTIONS) + ";" + IntToString(BASE_ITEM_BLANK_POTION) + ";";
if (CI_IP_ENABLE_CastSpellPotion != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_CastSpellPotion == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_CastSpellPotion, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, 0, 0, 1, 2, 40, iMonsterOnly, 1);
ip_AutoPropertyPlus(CI_IP_CastSpellPotion, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 20, 0, 0, 41, 0, 50, iMonsterOnly, 0);
}
// Cast Spell (Wands and Rods)
sCategoriesMain = "";
sCategoriesSub = "";
sBaseItems = ";" + IntToString(BASE_ITEM_MAGICWAND) + ";" + IntToString(BASE_ITEM_BLANK_WAND) + ";" + IntToString(BASE_ITEM_MAGICROD) + ";";
// 5 Charges per Use
if (CI_IP_ENABLE_CastSpellWand_5ChargesPerUse != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_CastSpellWand_5ChargesPerUse == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_CastSpellWand, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, IP_CONST_CASTSPELL_NUMUSES_5_CHARGES_PER_USE, 0, 1, 2, 40, iMonsterOnly, 1);
ip_AutoPropertyPlus(CI_IP_CastSpellWand, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 20, IP_CONST_CASTSPELL_NUMUSES_5_CHARGES_PER_USE, 0, 41, 0, 50, iMonsterOnly, 1);
}
// 1 Charge per Use
if (CI_IP_ENABLE_CastSpellWand_1ChargePerUse != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_CastSpellWand_1ChargePerUse == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_CastSpellWand, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, IP_CONST_CASTSPELL_NUMUSES_1_CHARGE_PER_USE, 0, 5, 3, 50, iMonsterOnly, 1);
}
// 1 Use/Day
if (CI_IP_ENABLE_CastSpellWand_1PerDay != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_CastSpellWand_1PerDay == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_CastSpellWand, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY, 0, 5, 3, 50, iMonsterOnly, 1);
}
// 2 Uses/Day
if (CI_IP_ENABLE_CastSpellWand_2PerDay != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_CastSpellWand_2PerDay == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_CastSpellWand, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, IP_CONST_CASTSPELL_NUMUSES_2_USES_PER_DAY, 0, 15, 3, 50, iMonsterOnly, 1);
}
// 3 Uses/Day
if (CI_IP_ENABLE_CastSpellWand_3PerDay != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_CastSpellWand_3PerDay == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_CastSpellWand, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, IP_CONST_CASTSPELL_NUMUSES_3_USES_PER_DAY, 0, 25, 3, 50, iMonsterOnly, 1);
}
// Unlimited Use
if (CI_IP_ENABLE_CastSpellWand_Unlimited != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_CastSpellWand_Unlimited == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_CastSpellWand, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE, 0, 35, 5, 50, iMonsterOnly, 1);
}
// Cast Spell (Staves and Books)
if (CI_IP_ENABLE_CastSpell != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_CastSpell == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
sCategoriesMain = "";
sCategoriesSub = "";
sBaseItems = ";" + IntToString(BASE_ITEM_MAGICSTAFF) + ";" + IntToString(BASE_ITEM_BOOK) + ";";
ip_AutoPropertyPlus(CI_IP_CastSpell, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE, 0, 5, 3, 50, iMonsterOnly, 1);
sCategoriesMain = "";
sCategoriesSub = "";
sBaseItems = ";" + IntToString(BASE_ITEM_MAGICSTAFF) + ";";
ip_AutoPropertyPlus(CI_IP_CastSpell, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, IP_CONST_CASTSPELL_NUMUSES_5_CHARGES_PER_USE, 0, 1, 3, 50, iMonsterOnly, 1);
ip_AutoPropertyPlus(CI_IP_CastSpell, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, IP_CONST_CASTSPELL_NUMUSES_4_CHARGES_PER_USE, 0, 3, 3, 50, iMonsterOnly, 1);
ip_AutoPropertyPlus(CI_IP_CastSpell, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, IP_CONST_CASTSPELL_NUMUSES_3_CHARGES_PER_USE, 0, 5, 4, 50, iMonsterOnly, 1);
ip_AutoPropertyPlus(CI_IP_CastSpell, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, IP_CONST_CASTSPELL_NUMUSES_2_CHARGES_PER_USE, 0, 7, 4, 50, iMonsterOnly, 1);
}
// Container reduced weight, applicable to containers only
sCategoriesMain = "";
sCategoriesSub = "";
sBaseItems = ";" + IntToString(BASE_ITEM_LARGEBOX) + ";";
if (CI_IP_ENABLE_ContainerReducedWeight != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_ContainerReducedWeight == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_ContainerReducedWeight, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 15, 15, 50, iMonsterOnly, 1);
}
// Damage Bonus, applicable to Melee, Thrown Weapons, Ammo, Staves, Gloves
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_AMMO) + ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON_CREATURE) + ";";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_MELEE) + ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_THROWN) + ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_STAFF) + ";";
sBaseItems = ";" + IntToString(BASE_ITEM_GLOVES) + ";";
if (CI_IP_ENABLE_DamageBonus != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_DamageBonus == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_DamageBonus, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 1, 3, 15, iMonsterOnly, 1);
ip_AutoPropertyPlus(CI_IP_DamageBonus, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 6, 0, 0, 5, 5, 34, iMonsterOnly, 1);
ip_AutoPropertyPlus(CI_IP_DamageBonus, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 13, 0, 0, 35, 0, 50, iMonsterOnly, 0);
}
// Damage Bonus vs. Alignment Group, applicable to Wieldables and Ammo
if (CI_IP_ENABLE_DamageBonusVsAlignment != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_DamageBonusVsAlignment == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_DamageBonus, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 3, 3, 17, iMonsterOnly, 1);
ip_AutoPropertyPlus(CI_IP_DamageBonus, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 8, 0, 0, 15, 5, 34, iMonsterOnly, 1);
ip_AutoPropertyPlus(CI_IP_DamageBonus, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 13, 0, 0, 35, 0, 50, iMonsterOnly, 0);
}
// Damage Bonus vs. Race, applicable to Wieldables and Ammo
if (CI_IP_ENABLE_DamageBonusVsRace != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_DamageBonusVsRace == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_DamageBonus, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 3, 3, 17, iMonsterOnly, 1);
ip_AutoPropertyPlus(CI_IP_DamageBonus, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 8, 0, 0, 15, 5, 34, iMonsterOnly, 1);
ip_AutoPropertyPlus(CI_IP_DamageBonus, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 13, 0, 0, 35, 0, 50, iMonsterOnly, 0);
}
// Damage Bonus vs. Specific Alignment, applicable to Wieldables and Ammo
if (CI_IP_ENABLE_DamageBonusVsSpecificAlignment != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_DamageBonusVsSpecificAlignment == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_DamageBonus, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 3, 3, 17, iMonsterOnly, 1);
ip_AutoPropertyPlus(CI_IP_DamageBonus, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 8, 0, 0, 15, 5, 34, iMonsterOnly, 1);
ip_AutoPropertyPlus(CI_IP_DamageBonus, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 13, 0, 0, 35, 0, 50, iMonsterOnly, 0);
}
// Damage Immunity, applicable to All Armor Types and Accessories
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_MONSTERRING) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_ACCESSORY) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";";
sCategoriesSub = "";
sBaseItems = "";
if (CI_IP_ENABLE_DamageImmunity != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_DamageImmunity == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_DamageImmunity, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 51, 0, 0, 1, 2, 50, iMonsterOnly, 1);
}
// Damage Penalty, Applicable to Weapons and Ammo
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON_CREATURE) + ";";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_MELEE) + ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_THROWN) + ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_STAFF) + ";";
sBaseItems = ";" + IntToString(BASE_ITEM_GLOVES) + ";";
if (CI_IP_ENABLE_DamagePenalty != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_DamagePenalty == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_DamagePenalty, CI_IP_TYPE_NEGATIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 5, 5, 50, iMonsterOnly, 1);
}
// Damage Reduction, Applicable to Clothing, Armor, Shields, Helmets, Jewelry and Cloaks
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_MONSTERRING) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";";
sCategoriesSub = "";
sBaseItems = ";" + IntToString(BASE_ITEM_AMULET) + ";" + IntToString(BASE_ITEM_RING) + ";" + IntToString(BASE_ITEM_CLOAK) + ";";
if (CI_IP_ENABLE_DamageReduction != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_DamageReduction == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_DamageReduction, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, IP_CONST_DAMAGESOAK_5_HP, 0, 7, 8, 50, iMonsterOnly, 1);
ip_AutoPropertyPlus(CI_IP_DamageReduction, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, IP_CONST_DAMAGESOAK_10_HP, 0, 14, 8, 50, iMonsterOnly, 1);
ip_AutoPropertyPlus(CI_IP_DamageReduction, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, IP_CONST_DAMAGESOAK_15_HP, 0, 21, 8, 50, iMonsterOnly, 1);
ip_AutoPropertyPlus(CI_IP_DamageReduction, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, IP_CONST_DAMAGESOAK_20_HP, 0, 28, 8, 50, TRUE, 1);
}
// Damage Resistance, Applicable to Clothing, Armor, Shields, Helmets and MonsterRing
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_MONSTERRING) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";";
sCategoriesSub = "";
sBaseItems = "";
if (CI_IP_ENABLE_DamageResistance != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_DamageResistance == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
// Check for Anphillia's custom .2da and act accordingly
string CheckDamageResistance = Get2DAString("iprp_resistcost", "Label", 21);
if (CheckDamageResistance == "")
{
ip_AutoPropertyPlus(CI_IP_DamageResistance, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 15, 15, 50, iMonsterOnly, 1);
}
else
{
ip_AutoPropertyPlus(CI_IP_DamageResistance, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 21, 0, 0, 3, 3, 50, iMonsterOnly, 1);
}
}
// Damage Vulnerability, Applicable to Clothing, Armor, Shields, Helmets
if (CI_IP_ENABLE_DamageVulnerability != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_DamageVulnerability == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_DamageVulnerability, CI_IP_TYPE_NEGATIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 5, 10, 50, iMonsterOnly, 1);
}
// DarkVision, Applicable to Helmets and Amulets;
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_ARMOR_HELMET) + ";";
sBaseItems = ";" + IntToString(BASE_ITEM_AMULET) + ";";
if (CI_IP_ENABLE_Darkvision != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_Darkvision == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_Darkvision, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, 0, 0, 15, 0, 50, iMonsterOnly, 0);
}
// Decrease Ability, applicable to Wearables and Weapons
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON) + ";" + IntToString(CI_EGS_ITEM_MAIN_ACCESSORY) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";";
sCategoriesSub = "";
sBaseItems = "";
if (CI_IP_ENABLE_DecreaseAbility != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_DecreaseAbility == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_DecreaseAbility, CI_IP_TYPE_NEGATIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 6, 8, 50, iMonsterOnly, 1);
}
// Decrease Armor Class, applicable to Wearables and Weapons
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON) + ";" + IntToString(CI_EGS_ITEM_MAIN_ACCESSORY) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";";
sCategoriesSub = "";
sBaseItems = "";
if (CI_IP_ENABLE_DecreaseAC != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_DecreaseAC == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_DecreaseAC, CI_IP_TYPE_NEGATIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 7, 11, 50, iMonsterOnly, 1);
}
// Decrease Skill, applicable to Wearables and Weapons
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON) + ";" + IntToString(CI_EGS_ITEM_MAIN_ACCESSORY) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";";
sCategoriesSub = "";
sBaseItems = "";
if (CI_IP_ENABLE_DecreaseSkill != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_DecreaseSkill == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_DecreaseSkill, CI_IP_TYPE_NEGATIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 12, 2, 50, iMonsterOnly, 1);
}
// Decrease Skill ("All Skills" included, applicable to Wearables and Weapons
if (CI_IP_ENABLE_DecreaseSkillAllSkillsIncluded != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_DecreaseSkillAllSkillsIncluded == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_DecreaseSkillAllSkillsIncluded, CI_IP_TYPE_NEGATIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 30, 10, 50, iMonsterOnly, 1);
}
// Enhancement Bonus, applicable to Weapons and Ammo
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON_CREATURE) + ";";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_MELEE) + ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_THROWN) + ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_STAFF) + ";";
sBaseItems = "";
if (CI_IP_ENABLE_EnhancementBonus != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_EnhancementBonus == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_EnhancementBonus, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 6, 8, 50, iMonsterOnly, 1);
}
// Enhancement Bonus vs. Alignment Group, applicable to Weapons and Ammo
if (CI_IP_ENABLE_EnhancementBonusVsAlignment != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_EnhancementBonusVsAlignment == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_EnhancementBonusVsAlign, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 4, 8, 50, iMonsterOnly, 1);
}
// Enhancement Bonus vs. Race, applicable to Weapons and Ammo
if (CI_IP_ENABLE_EnhancementBonusVsRace != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_EnhancementBonusVsRace == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_EnhancementBonusVsRace, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 4, 8, 50, iMonsterOnly, 1);
}
// Enhancement Bonus vs. Specific Alignment, applicable to Weapons and Ammo
if (CI_IP_ENABLE_EnhancementBonusVsSpecificAlignment != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_EnhancementBonusVsSpecificAlignment == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_EnhancementBonusVsSAlign, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 2, 8, 50, iMonsterOnly, 1);
}
/* Not sure if this Property even exists
// Enhancement Penalty, Applicable to Weapons and Ammo
ip_AutoPropertyPlus(CI_IP_EnhancementPenalty, 10, 5, 29, CI_IP_TYPE_NEGATIVE, 1, 0, 0, iCategories, iMonsterOnly);
ip_AutoPropertyPlus(CI_IP_EnhancementPenalty, 30, 0, 50, CI_IP_TYPE_NEGATIVE, 5, 0, 0, iCategories, iMonsterOnly);
*/
// Extra Melee Damage Type, Weapons only
sCategoriesMain = "";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_MELEE) + ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_STAFF) + ";";
sBaseItems = "";
if (CI_IP_ENABLE_ExtraMeleeDamageType != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_ExtraMeleeDamageType == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_ExtraMeleeDamageType, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, 0, 0, 5, 0, 50, iMonsterOnly, 0);
}
// Extra Ranged Damage Type, Weapons only
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_AMMO) + ";";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_RANGED) + ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_THROWN) + ";";
sBaseItems = "";
if (CI_IP_ENABLE_ExtraRangeDamageType != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_ExtraRangeDamageType == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_ExtraRangeDamageType, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, 0, 0, 5, 0, 50, iMonsterOnly, 0);
}
/* Not sure if that property exists
// Free Action, Applicable to Accessories only
iCategories = CI_EGS_CATEGORY_ACCESSORIES;
ip_AutoPropertyPlus(CI_IP_FreeAction, 40, 0, 50, CI_IP_TYPE_POSITIVE, 0, 0, 0, iCategories, iMonsterOnly);
*/
// Haste, Applicable to Jewelry and Boots
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_MONSTERRING) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";";
sCategoriesSub = "";
sBaseItems = ";" + IntToString(BASE_ITEM_AMULET) + ";" + IntToString(BASE_ITEM_RING) + ";" + IntToString(BASE_ITEM_BOOTS) + ";";
if (CI_IP_ENABLE_Haste != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_Haste == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_Haste, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, 0, 0, 45, 0, 50, iMonsterOnly, 0);
}
// Healer's Kit
sCategoriesMain = "";
sCategoriesSub = "";
sBaseItems = ";" + IntToString(BASE_ITEM_HEALERSKIT) + ";";
if (CI_IP_ENABLE_HealersKit != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_HealersKit == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_HealersKit, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 1, 5, 50, iMonsterOnly, 1);
}
// Holy Avenger, applicable to Melee Weapons
sCategoriesMain = "";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_MELEE) + ";";
sBaseItems = "";
if (CI_IP_ENABLE_HolyAvenger != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_HolyAvenger == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_HolyAvenger, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, 0, 0, 40, 0, 50, iMonsterOnly, 0);
}
// Immunity Misc., Applicable to Armor, Shields, Helmets, Jewelry
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_MONSTERRING) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";";
sCategoriesSub = "";
sBaseItems = ";" + IntToString(BASE_ITEM_AMULET) + ";" + IntToString(BASE_ITEM_RING) + ";";
if (CI_IP_ENABLE_ImmunityMisc != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_ImmunityMisc == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_ImmunityMisc, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 5, 0, 0, 25, 0, 50, iMonsterOnly, 0);
ip_AutoPropertyPlus(CI_IP_ImmunityMisc, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 9, 0, 0, 35, 0, 50, iMonsterOnly, 0);
// Rest is monster-only
ip_AutoPropertyPlus(CI_IP_ImmunityMisc, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 3, 0, 0, 20, 0, 50, TRUE, 0);
ip_AutoPropertyPlus(CI_IP_ImmunityMisc, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 4, 0, 0, 25, 0, 50, TRUE, 0);
ip_AutoPropertyPlus(CI_IP_ImmunityMisc, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, 0, 0, 25, 0, 50, TRUE, 0);
ip_AutoPropertyPlus(CI_IP_ImmunityMisc, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 8, 0, 0, 25, 0, 50, TRUE, 0);
ip_AutoPropertyPlus(CI_IP_ImmunityMisc, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 6, 0, 0, 25, 0, 50, TRUE, 0);
ip_AutoPropertyPlus(CI_IP_ImmunityMisc, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 2, 0, 0, 25, 0, 50, TRUE, 0);
ip_AutoPropertyPlus(CI_IP_ImmunityMisc, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 7, 0, 0, 25, 0, 50, TRUE, 0);
}
// Immunity to Spell Level, Applicable to Armor, Helmets, Jewelry and Staves
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_MONSTERRING) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_STAFF) + ";";
sBaseItems = ";" + IntToString(BASE_ITEM_AMULET) + ";" + IntToString(BASE_ITEM_RING) + ";";
if (CI_IP_ENABLE_ImmunityToSpellLevel != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_ImmunityToSpellLevel == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_ImmunityToSpellLevel, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 20, 15, 50, iMonsterOnly, 1);
// Immunity to Spell Level > Lvl 2, Applicable to Monsters only regardless of setting
ip_AutoPropertyPlus(CI_IP_ImmunityToSpellLevel, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 2, 0, 0, 25, 5, 50, TRUE, 1);
}
// Improved Evasion, Applicable to Boots, Cloaks, Armor and Jewelry
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_MONSTERRING) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";";
sCategoriesSub = "";
sBaseItems = ";" + IntToString(BASE_ITEM_AMULET) + ";" + IntToString(BASE_ITEM_RING) + ";" + IntToString(BASE_ITEM_CLOAK) + ";" + IntToString(BASE_ITEM_BOOTS) + ";";
if (CI_IP_ENABLE_ImprovedEvasion != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_ImprovedEvasion == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_ImprovedEvasion, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, 0, 0, 30, 0, 50, iMonsterOnly, 0);
}
// Keen, Applicable to Melee Weapons
sCategoriesMain = "";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_MELEE) + ";";
sBaseItems = "";
if (CI_IP_ENABLE_Keen != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_Keen == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_Keen, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, 0, 0, 25, 0, 50, iMonsterOnly, 0);
}
// Light, Applicable to all Equippable
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON) + ";" + IntToString(CI_EGS_ITEM_MAIN_ACCESSORY) + ";";
sCategoriesSub = "";
sBaseItems = "";
if (CI_IP_ENABLE_Light != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_Light == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_Light, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, IP_CONST_LIGHTBRIGHTNESS_DIM, 0, 0, 1, 0, 4, iMonsterOnly);
ip_AutoPropertyPlus(CI_IP_Light, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, IP_CONST_LIGHTBRIGHTNESS_LOW, 0, 0, 1, 0, 8, iMonsterOnly);
ip_AutoPropertyPlus(CI_IP_Light, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, IP_CONST_LIGHTBRIGHTNESS_NORMAL, 0, 0, 1, 0, 12, iMonsterOnly);
ip_AutoPropertyPlus(CI_IP_Light, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, IP_CONST_LIGHTBRIGHTNESS_BRIGHT, 0, 0, 5, 0, 50, iMonsterOnly);
}
// Limit Use by Alignment Group, Applicable to ALL items
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON) + ";" + IntToString(CI_EGS_ITEM_MAIN_ACCESSORY) + ";" + IntToString(CI_EGS_ITEM_MAIN_AMMO) + ";" + IntToString(CI_EGS_ITEM_MAIN_RODWAND) + ";";
sCategoriesSub = "";
sBaseItems = "";
if (CI_IP_ENABLE_LimitUseByAlignment != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_LimitUseByAlignment == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_LimitUseByAlign, CI_IP_TYPE_RESTRICTIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, 0, 0, 1, 0, 50, iMonsterOnly, 0);
}
// Limit Use by Class, Applicable to ALL items
if (CI_IP_ENABLE_LimitUseByClass != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_LimitUseByClass == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_LimitUseByClass, CI_IP_TYPE_RESTRICTIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, 0, 0, 1, 0, 50, iMonsterOnly, 0);
}
// Limit Use by Race, Applicable to ALL items
if (CI_IP_ENABLE_LimitUseByRace != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_LimitUseByRace == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_LimitUseByRace, CI_IP_TYPE_RESTRICTIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, 0, 0, 1, 0, 50, iMonsterOnly, 0);
}
// Limit Use by Specific Alignment, Applicable to ALL items
if (CI_IP_ENABLE_LimitUseBySpecificAlignment != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_LimitUseBySpecificAlignment == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_LimitUseBySAlign, CI_IP_TYPE_RESTRICTIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, 0, 0, 1, 0, 50, iMonsterOnly, 0);
}
// Massive Critial, applicable to Weapons
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON) + ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON_CREATURE) + ";";
sCategoriesSub = "";
sBaseItems = "";
if (CI_IP_ENABLE_MassiveCritical != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_MassiveCritical == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_MassiveCritical, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 1, 5, 25, iMonsterOnly, 1);
ip_AutoPropertyPlus(CI_IP_MassiveCritical, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 6, 0, 0, 11, 5, 40, iMonsterOnly, 1);
ip_AutoPropertyPlus(CI_IP_MassiveCritical, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 13, 0, 0, 41, 0, 50, iMonsterOnly, 0);
}
// Mighty, applicable only to ranged weapons
sCategoriesMain = "";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_RANGED) + ";";
sBaseItems = "";
if (CI_IP_ENABLE_Mighty != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_Mighty == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_MassiveCritical, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 13, 0, 0, 41, 0, 50, iMonsterOnly, 0);
}
// Monster Damage, applicable to creature Weapons
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON_CREATURE) + ";";
sCategoriesSub = "";
sBaseItems = "";
if (CI_IP_ENABLE_MonsterDamage != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_MonsterDamage == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_MonsterDamage, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 1, 3, 12, iMonsterOnly, 1);
ip_AutoPropertyPlus(CI_IP_MonsterDamage, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 8, 0, 0, 7, 3, 21, iMonsterOnly, 10);
ip_AutoPropertyPlus(CI_IP_MonsterDamage, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 10, 0, 0, 19, 3, 30, iMonsterOnly, 10);
ip_AutoPropertyPlus(CI_IP_MonsterDamage, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 48, 0, 0, 22, 5, 50, iMonsterOnly, 1);
}
// No Combat Damage, Applicable to Weapons and Ammo
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON) + ";";
sCategoriesSub = "";
sBaseItems = "";
if (CI_IP_ENABLE_NoDamage != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_NoDamage == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_NoDamage, CI_IP_TYPE_NEGATIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, 0, 0, 1, 0, 50, iMonsterOnly, 0);
}
// OnHit: Cast Spell Applicable to Clothing, Armor and Weapons
// OnHit Properties, Applicable to Weapons only
// OnHit Monster props, unused
// Reduced Saving Throw, Applicable to All Wearable + Wieldable
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON) + ";" + IntToString(CI_EGS_ITEM_MAIN_ACCESSORY) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";";
sCategoriesSub = "";
sBaseItems = "";
if (CI_IP_ENABLE_ReducedSavingThrow != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_ReducedSavingThrow == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_ReducedSavingThrow, CI_IP_TYPE_NEGATIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 6, 4, 50, iMonsterOnly, 1);
}
// Reduced Saving Throw vs. Specific Effect or Damage Type (Universal excluded) , Applicable to All Wearable + Wieldable
if (CI_IP_ENABLE_ReducedSavingThrowVsX != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_ReducedSavingThrowVsX == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_ReducedSavingThrowVsX, CI_IP_TYPE_NEGATIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 2, 4, 50, iMonsterOnly, 1);
}
// Reduced Saving Throw vs. Specific Effect or Damage Type (Universal included) , Applicable to All Wearable + Wieldable
if (CI_IP_ENABLE_ReducedSavingThrowVsXUniversalIncluded != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_ReducedSavingThrowVsXUniversalIncluded == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_ReducedSavingThrowVsXUniversalIncluded, CI_IP_TYPE_NEGATIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 10, 10, 50, iMonsterOnly, 1);
}
// Regeneration, Applicable to Jewelry and Accessories
if (CI_IP_RESTRICT_Regeneration)
{
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_MONSTERRING) + ";";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_ACCESSORY_JEWELRY) + ";";
}
else
{
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_MONSTERRING) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_ACCESSORY) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";";
sCategoriesSub = "";
}
sBaseItems = "";
if (CI_IP_ENABLE_Regeneration != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_Regeneration == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_Regeneration, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 12, 8, 50, iMonsterOnly, 1);
}
// Skill Bonus, Applicable to everything Wearable
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_MONSTERRING) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON) + ";" + IntToString(CI_EGS_ITEM_MAIN_ACCESSORY) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON_CREATURE) + ";";
sCategoriesSub = "";
sBaseItems = "";
if (CI_IP_ENABLE_SkillBonus != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_SkillBonus == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_SkillBonus, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 3, 3, 50, iMonsterOnly, 1);
}
// Skill Bonus ("All Skills" included), Applicable to everything Wearable
if (CI_IP_ENABLE_SkillBonusAllIncluded != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_SkillBonusAllIncluded == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_SkillBonusAllIncluded, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 30, 10, 50, iMonsterOnly, 1);
}
/*
// Special Walk (Zombie), Applicable to Creature Hides only, therefor not used for now
ip_AutoPropertyPlus(CI_IP_SpecialWalk, 10, 0, 50, CI_IP_TYPE_NEGATIVE, 0, 0, 0, iCategories, iMonsterOnly);
*/
// Spell Immunity School, Rings and Amulets, Monsters only
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_MONSTERRING) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";";
sCategoriesSub = "";
sBaseItems = ";" + IntToString(BASE_ITEM_RING) + ";" + IntToString(BASE_ITEM_AMULET) + ";";
if (CI_IP_ENABLE_SpellImmunitySchool != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_SpellImmunitySchool == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_SpellImmunitySchool, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, 0, 0, 25, 0, 50, iMonsterOnly, 0);
}
// Spell Immunity Specific not used
// Thieves Tools
sCategoriesMain = "";
sCategoriesSub = "";
sBaseItems = ";" + IntToString(BASE_ITEM_THIEVESTOOLS) + ";";
if (CI_IP_ENABLE_ThievesTools != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_ThievesTools == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_ThievesTools, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 1, 4, 44, iMonsterOnly, 1);
ip_AutoPropertyPlus(CI_IP_ThievesTools, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 12, 0, 0, 45, 0, 50, iMonsterOnly, 0);
}
// Trap
sCategoriesMain = "";
sCategoriesSub = "";
sBaseItems = ";" + IntToString(BASE_ITEM_TRAPKIT) + ";";
if (CI_IP_ENABLE_Trap != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_Trap == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_Trap, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, 0, 0, 1, 10, 50, iMonsterOnly, 1);
}
// True Seeing, Applicable to Helmets and Jewelry
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_MONSTERRING) + ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR_CREATURE) + ";";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_ARMOR_HELMET) + ";";
sBaseItems = ";" + IntToString(BASE_ITEM_RING) + ";" + IntToString(BASE_ITEM_AMULET) + ";";
if (CI_IP_ENABLE_TrueSeeing != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_TrueSeeing == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_TrueSeeing, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, 0, 0, 50, 0, 50, TRUE, 0);
}
// Turn Resistance, applicable to Creature Hides ONLY
// iCategories = CI_EGS_CATEGORY_WIELDABLE + CI_EGS_CATEGORY_WEARABLE;
// ip_AutoPropertyPlus(CI_IP_TurnResistance, 1, 1, 25, CI_IP_TYPE_POSITIVE, 1, 0, 0, iCategories, iMonsterOnly);
// ip_AutoPropertyPlus(CI_IP_TurnResistance, 26, 1, 50, CI_IP_TYPE_POSITIVE, 26, 0, 0, iCategories, iMonsterOnly);
// Unlimited Ammo, applicable to Ranged Weapons
sCategoriesMain = "";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_RANGED) + ";";
sBaseItems = "";
if (CI_IP_ENABLE_UnlimitedAmmo != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_UnlimitedAmmo == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_UnlimitedAmmo, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 15, 0, 24, iMonsterOnly, 0);
ip_AutoPropertyPlus(CI_IP_UnlimitedAmmo, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 11, 0, 0, 25, 0, 29, iMonsterOnly, 0);
ip_AutoPropertyPlus(CI_IP_UnlimitedAmmo, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 12, 0, 0, 30, 0, 34, iMonsterOnly, 0);
ip_AutoPropertyPlus(CI_IP_UnlimitedAmmo, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 13, 0, 0, 35, 0, 39, iMonsterOnly, 0);
ip_AutoPropertyPlus(CI_IP_UnlimitedAmmo, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 14, 0, 0, 40, 0, 44, iMonsterOnly, 0);
ip_AutoPropertyPlus(CI_IP_UnlimitedAmmo, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 15, 0, 0, 45, 0, 50, iMonsterOnly, 0);
ip_AutoPropertyPlus(CI_IP_UnlimitedAmmo, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 2, 0, 0, 30, 0, 50, iMonsterOnly, 0);
ip_AutoPropertyPlus(CI_IP_UnlimitedAmmo, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 3, 0, 0, 30, 0, 50, iMonsterOnly, 0);
ip_AutoPropertyPlus(CI_IP_UnlimitedAmmo, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 4, 0, 0, 30, 0, 50, iMonsterOnly, 0);
}
// Vampiric Regeneration, Ammo, Melee, Thrown, Staves
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_AMMO) + ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON_CREATURE) + ";";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_MELEE) + ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_THROWN) + ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_STAFF)+ ";";
sBaseItems = "";
if (CI_IP_ENABLE_VampiricRegeneration != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_VampiricRegeneration == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_VampiricRegeneration, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 20, 5, 50, iMonsterOnly, 1);
}
/* Deactivated
// Visual Effect, Melee Weapons only
sCategoriesMain = "";
sCategoriesSub = ";" + IntToString(CI_EGS_ITEM_SUB_WEAPON_MELEE) + ";";
sBaseItems = "";
ip_AutoPropertyPlus(CI_IP_VisualEffect, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 0, 0, 0, 10, 0, 50, iMonsterOnly);
*/
// Weight Increase, Wands and Rods only (Doesn't work)
/*
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_RODWAND) + ";";
sCategoriesSub = "";
sBaseItems = "";
ip_AutoPropertyPlus(CI_IP_WeightIncrease, CI_IP_TYPE_NEGATIVE, sCategoriesMain, sCategoriesSub, sBaseItems, IP_CONST_WEIGHTINCREASE_5_LBS, 0, 0, 6, 0, 9, iMonsterOnly);
ip_AutoPropertyPlus(CI_IP_WeightIncrease, CI_IP_TYPE_NEGATIVE, sCategoriesMain, sCategoriesSub, sBaseItems, IP_CONST_WEIGHTINCREASE_10_LBS, 0, 0, 10, 0, 13, iMonsterOnly);
ip_AutoPropertyPlus(CI_IP_WeightIncrease, CI_IP_TYPE_NEGATIVE, sCategoriesMain, sCategoriesSub, sBaseItems, IP_CONST_WEIGHTINCREASE_15_LBS, 0, 0, 14, 0, 17, iMonsterOnly);
ip_AutoPropertyPlus(CI_IP_WeightIncrease, CI_IP_TYPE_NEGATIVE, sCategoriesMain, sCategoriesSub, sBaseItems, IP_CONST_WEIGHTINCREASE_30_LBS, 0, 0, 18, 0, 21, iMonsterOnly);
ip_AutoPropertyPlus(CI_IP_WeightIncrease, CI_IP_TYPE_NEGATIVE, sCategoriesMain, sCategoriesSub, sBaseItems, IP_CONST_WEIGHTINCREASE_50_LBS, 0, 0, 22, 0, 25, iMonsterOnly);
ip_AutoPropertyPlus(CI_IP_WeightIncrease, CI_IP_TYPE_NEGATIVE, sCategoriesMain, sCategoriesSub, sBaseItems, IP_CONST_WEIGHTINCREASE_100_LBS, 0, 0, 26, 0, 50, iMonsterOnly);
*/
// Weight Decrease, applicable to everything
sCategoriesMain = ";" + IntToString(CI_EGS_ITEM_MAIN_ARMOR) + ";" + IntToString(CI_EGS_ITEM_MAIN_WEAPON) + ";" + IntToString(CI_EGS_ITEM_MAIN_ACCESSORY) + ";" + IntToString(CI_EGS_ITEM_MAIN_AMMO) + ";";
sCategoriesSub = "";
sBaseItems = "";
if (CI_IP_ENABLE_WeightReduction != CI_IP_PROPERTY_DISABLED)
{
iMonsterOnly = (CI_IP_ENABLE_WeightReduction == CI_IP_PROPERTY_ENABLED_MONSTERONLY);
ip_AutoPropertyPlus(CI_IP_WeightReduction, CI_IP_TYPE_POSITIVE, sCategoriesMain, sCategoriesSub, sBaseItems, 1, 0, 0, 5, 10, 50, iMonsterOnly, 1);
}
if (!CI_IP_USE_NWNX)
{
// We need to stay right here until everything was added
//object oStorePreload = GetLocalObject(oMod, CS_IP_DB_PRELOAD_STORE_OBJ);
//int iCurrentPropertyID = GetLocalInt(oMod, CS_IP_ARRAY_INIT);
//int iTotalProperties = eas_Array_GetSize(oStorePreload, CS_IP_DB_PRELOAD_ARRAY);
//if (iCurrentPropertyID % 250 == 0)
//SendMessageToAllDMs("Inserting Property " + IntToString(iCurrentPropertyID) + "/" + IntToString(iTotalProperties));
//if (iCurrentPropertyID < iTotalProperties)
//{
DelayCommand(0.1, ExecuteScript("ip_ini_b", oMod));
//}
}
object oLog = GetObjectByTag("LOG");
SetDescription(oLog, GetDescription(oLog) + "\nIP - Item Properties initialized.");
WriteTimestampedLogEntry("IP - Item Properties initalized");
}
void main()
{
// If all tables exist, do not (re)initialize
if (ip_GetTableExists())
{
object oLog = GetObjectByTag("LOG");
SetDescription(oLog, GetDescription(oLog) + "\nIP - database already exists.");
WriteTimestampedLogEntry("IP - database already exists - skipping initialization.");
return;
}
// Drop any existing tables
ip_DropTable();
// Create table
ip_CreateTable();
// Initialize
DelayCommand(0.2, InitAll());
}