Battledale_PRC8/_module/nss/jw_include_funct.nss
Jaysyn904 e5b3f6ad61 Finished PRC8 integration
Finished PRC8 integration.  Moved creature abilities to top hak.  Setup tooling.  Created release archive
2024-03-12 21:27:23 -04:00

2264 lines
106 KiB
Plaintext

#include "jw_smith_copy"
#include "jw_area_funct"
// #include "jw_crafting_lists"
#include "jw_tiles_inc"
#include "jw_custom_spells"
#include "jw_trap_funct"
#include "jw_persist_store"
#include "prc_inc_spells"
// Returns true if this item is meant to decay, otherwise returns false
int GetIsDecayable(object oItem);
// Goes through the PCs and decays their items
void DecayItems();
// Gets the crafting box of the PC
object GetCraftingBox(object oPC);
// Gets the maximum number of enchantments allowed on oItem - this is determined by its tag;
int GetMaxEnchantments(object oItem);
// Gets the number of enchantments currently on oItem;
int GetNumberEnchantments(object oItem);
// Gets the death state of the player - MODULE_EVERYONE_ALIVE or MODULE_NOTEVERYONE_ALIVE
int GetModuleDeathState();
// Sets the death state of the player - MODULE_EVERYONE_ALIVE or MODULE_NOTEVERYONE_ALIVE
void SetModuleDeathState(int nState);
// Gets the death state of the player - PLAYER_ALIVE, PLAYER_BLEEDING or PLAYER_STABLE
int GetDeathState(object oRespawner);
// Sets the death state of the player - PLAYER_ALIVE, PLAYER_BLEEDING or PLAYER_STABLE
void SetDeathState(object oRespawner, int nState);
// Player unequips items
void UnequipPlayer(object oPlayer, int nHandsOnly = TRUE);
// Mob spawns a new mob - best used on death of mob
// Will use special effects if VFX is set. Note that default is to use special
// effects. Set nVFX to 0 to prevent special effects
// Mob will get all effects of old mob is nCopyEffects is set to true
// If nKnockdown is true, the new mob will be knocked down for a second
void SpawnNewMob(string sMobResRef, int nVFX=VFX_FNF_PWSTUN, int nCopyEffects=FALSE, int nKnockdown=FALSE);
// Mob has a repeating visual effect
void RepeatingVisual(int nEffect, object oMob=OBJECT_SELF);
// Adds a random magical effect to the wepon the mob is holding in its right hand
// This will not affect any weapons they equip later so it's not much use for mobs that
// switch weapons, eg melee and ranged
// Int level goes from 1 to 4. 1 is the the weakest and 4 is the best, so use 4 only for high level mobs
void WeaponPowerUp(int nLevel, object oMob=OBJECT_SELF);
// Levels up the mob a random amount up to max nBonusLevels - this is the max number of extra levels it can gain
// The chance of levelling up is nChance. Set nChance to 100 to ensure it gains bonus levels
void BonusLevels(int nBonusLevels, int nChance = 50, object oMob=OBJECT_SELF);
// Sets custom token 2016 to be the type of machine the PC needs to enchant whatever they are enchanting
void SetToken2016(object oPC);
// Sets custom token 2010 to be the type of item this PC is enchanting
void SetToken2010(object oPC);
// Gets the type of crafting the PC is currently doing
int GetCrafting(object oPC);
// Sets the type of enchantment the PC is doing by setting local int isenchanting
// to the relative value on the crafting box of the PC
void SetCrafting(object oPC, int nValue);
// Mob explodes, damaging nearby enemies. Use for on death.
void DeathExplode(int nDamage = 8, int nInitialVFX = VFX_FNF_FIREBALL, int nDamageVFX = VFX_IMP_FLAME_M, int nDamageType = DAMAGE_TYPE_FIRE, int nSaveType= SAVING_THROW_TYPE_FIRE, int nSaveDC = 15, float fRadius = 10.0);
// Mob jumps to enemy randomly. Use in on combat round end
void JumpToEnemy(object oEnemy, int nVis=VFX_FNF_SUMMON_UNDEAD);
// Mob sends fire arrows at nearby enemies. Use in on death
void deathcascade(object oTarget);
// Mob explodes sending poison out to enemies. Use in on death
void PoisonExplode(int nPoison=POISON_BLACK_LOTUS_EXTRACT);
// Mob explodes sending disease out to enemies. Use in on death
void DiseaseExplode(int nDisease=DISEASE_SOLDIER_SHAKES);
// Mob sends rays out to hurt enemies. Use in on heartbeat
void ZapTargets(int nBeam=VFX_BEAM_EVIL, int nDamage = 12, int nDC = 24, int nDamageType=DAMAGE_TYPE_NEGATIVE);
// Mob creates copy of self on oVictim if is dead.
// Instead of making a copy, it can make something else using res ref sMob
// Use in on combat round end
void SpawnCreature(object oVictim, string sMob="");
// Returns BASE_ITEM_GLOVES, BASE_ITEM_BELT or BASE_ITEM_CLOAK
// Depending on the value of nPattern;
int GetMiscClothType (int nPattern);
// returns the tag of the food required for this particular meal
// Tags are jw_meat_lion, jw_meat_polar, jw_meat_deer, jw_meat_rothe ,jw_meat_coug
string GetFoodType (int nPattern);
// Runs graphics when a PC enchants an object
void DoEnchantmentGraphics(object oPC, int nDoing);
// Returns tag of extra reagent 1`for nPattern. If no extra reagent exists,
// returns ""
string TagExtraReg1 (int nPattern);
// Returns tag of extra reagent 2`for nPattern. If no extra reagent exists,
// returns ""
string TagExtraReg2 (int nPattern);
// Sets custom token 2013 to be the description of the technique
// nDoing is the TYPE of technique and nCurrent is the number
// from 0 to 127
void BDSetDescription(int nDoing, int nCurrent);
// Builds the name of the technique, eg jw_pat_wep_007
// from nDoing, which is the TYPE of technique we are doing, and
// nCurrent, which is the number from 0 to 127 we are currently looking at
string BuildTechName (int nDoing, int nCurrent);
// Checks whether the PC is sufficiently close to the relevant crafting device
// This is used for enchantments
int CheckDevice(object oPC, int nDoing);
// Returns TRUE if the PC knows any of the relevant technique.
// Choose from TECHNIQUE_GAUNTLETS, TECHNIQUE_CLOTHING, TECHNIQUE_RINGAMULET
// TECHNIQUE_WEAPON, TECHNIQUE_ARMOUR,TECHNIQUE_FOOD
int KnowsAnyTechnique(object oPC, int nTechnique);
// oUser will learn a new technique based on sTag
// If they already have this pattern, they will get their pattern scroll back
void LearnPattern(object oUser, string sTag, object oItem);
// Sets the conversation tokens suitable to nPattern.
// Tokens are 1 to 7 with Vervain being 7 and Cloth of Gold being 1
// They are set either to the name of the reagent, or to "" if the
// reagent is not required
void SetRegTokens(int nPattern);
// Returns the itemproperty these herbs will bestow on food (turns it into a potion)
itemproperty iFoodProperty (int nHerbValue);
// Returns the itemproperty these herbs will bestow on monk gloves
itemproperty iGlovesProperty (int nHerbValue);
// Returns the itemproperty these herbs will bestow on cloaks, boots or belts
itemproperty iClothMiscProperty (int nHerbValue);
// Returns the itemproperty these herbs will bestow on a ring or amulet
itemproperty iRingAmuletProperty (int nHerbValue);
// Returns the itemproperty these herbs will bestow on armour
itemproperty iArmourProperty (int nHerbValue);
// Returns the itemproperty these herbs will bestow on a weapon
itemproperty iWeaponProperty (int nHerbValue);
// Returns the value of the herbs in oObject
int HerbValue (object oObject=OBJECT_SELF);
// Used in MakeCircle
void DropFlame(location lTemp);
// Make a spectacular pentagram on top of oObject
// Stolen from Twighlight
void MakeCircle(object oObject);
// Strips the PC of everything they own - does not currently remove gold
void jw_strip_items(object oPC);
// Remove all spells from PC as well as summon familiar and
// animal companion
void jw_remove_spells(object oPC);
// Set our constants here
const int REAGENT_VERVAIN=64;
const int REAGENT_SUKAKE=32;
const int REAGENT_ROSEMAGES=16;
const int REAGENT_HYSSOP=8;
const int REAGENT_FOOLSWEED=4;
const int REAGENT_DRYADSTEARS=2;
const int REAGENT_CLOTHGOLD=1;
const int TECHNIQUE_GAUNTLETS=1;
const int TECHNIQUE_CLOTHING=2;
const int TECHNIQUE_RINGAMULET=3;
const int TECHNIQUE_WEAPON=4;
const int TECHNIQUE_ARMOUR=5;
const int TECHNIQUE_FOOD=6;
const int PLAYER_ALIVE=0;
const int PLAYER_BLEEDING=1;
const int PLAYER_STABLE=2;
const int PLAYER_DEAD=3;
const int MODULE_EVERYONE_ALIVE=0;
const int MODULE_NOTEVERYONE_ALIVE=1;
void jw_strip_items(object oPC)
{
int nIdx;
object oItem;
object oStrip;
for (nIdx=0;nIdx<=18;nIdx++)
{
oItem=GetItemInSlot(nIdx,oPC);
DestroyObject(oItem);
}
oItem=GetFirstItemInInventory(oPC);
while (GetIsObjectValid(oItem))
{
oStrip=oItem;
DestroyObject(oStrip);
oItem=GetNextItemInInventory(oPC);
}
}
void jw_remove_spells(object oPC)
{
int nCounter=0;
int nPrepared=0;
// strip spells
for(nCounter = 0; nCounter <= 802; nCounter++)
{
nPrepared=GetHasSpell(nCounter,oPC);
while (nPrepared>0)
{
DecrementRemainingSpellUses(oPC,nCounter);
nPrepared=GetHasSpell(nCounter,oPC);
}
}
// remove familiar
nPrepared=GetHasFeat(FEAT_SUMMON_FAMILIAR,oPC);
if (nPrepared>0)
{
DecrementRemainingFeatUses(oPC,FEAT_SUMMON_FAMILIAR);
}
// remove animal companions
nPrepared=GetHasFeat(FEAT_ANIMAL_COMPANION,oPC);
if (nPrepared>0)
{
DecrementRemainingFeatUses(oPC,FEAT_ANIMAL_COMPANION);
}
}
void DropFlame(location lTemp)
{
object oNew=CreateObject(OBJECT_TYPE_PLACEABLE,"plc_flamemedium",lTemp);
AssignCommand(oNew,PlaySound("sim_exp2flame"));
DelayCommand(6.0,DestroyObject(oNew));
}
void MakeCircle(object oObject)
{
SetLocalObject(OBJECT_SELF,"effectob",OBJECT_INVALID);
int x;
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_SCREEN_SHAKE),oObject);
float Pi = 360.0;
int Radius = 7;
float time = 2.0;
int count = 50/5;
int y;
vector center = GetPosition(oObject);
object oArea = GetArea(oObject);
vector vTemp;
location lTemp;
vTemp.z = center.z;
for (x=1;x<=5;x++)
{
vTemp.x = center.x + cos((Pi/5)*x)*Radius;
vTemp.y = center.y + sin((Pi/5)*x)*Radius;
lTemp = Location(oArea,vTemp,0.0);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_LIGHTNING_M),lTemp);
}
for (x=1;x<=count;x++)
{
for (y=1;y<=5;y++)
{
vTemp.x = center.x + cos(((Pi/(5*count))*x)+(Pi/5)*y)*Radius;
vTemp.y = center.y + sin(((Pi/(5*count))*x)+(Pi/5)*y)*Radius;
lTemp = Location(oArea,vTemp,0.0);
DelayCommand((time/count)*x+1.2, DropFlame(lTemp));
}
}
SetLocalObject(OBJECT_SELF,"effectob",OBJECT_INVALID);
for (x=1;x<=count*5/3;x++)
{
for (y=1;y<=5;y++)
{
vTemp.x = center.x + cos((Pi/5)*y)*Radius - x*(cos((Pi/5)*y) - cos((Pi/5)*(2+y)))*Radius/(count*5/3);
vTemp.y = center.y + sin((Pi/5)*y)*Radius - x*(sin((Pi/5)*y) - sin((Pi/5)*(2+y)))*Radius/(count*5/3);
lTemp = Location(oArea,vTemp,0.0);
DelayCommand(2.0+time+((time*3)/(count*3))*x,DropFlame(lTemp));
}
}
}
int HerbValue (object oObject=OBJECT_SELF)
{
int nReturn=0;
object oHerb=GetItemPossessedBy(oObject,"jw_harpherb1");
if (GetIsObjectValid(oHerb))
{
nReturn=nReturn+1;
}
oHerb=GetItemPossessedBy(oObject,"jw_harpherb2");
if (GetIsObjectValid(oHerb))
{
nReturn=nReturn+2;
}
oHerb=GetItemPossessedBy(oObject,"jw_harpherb3");
if (GetIsObjectValid(oHerb))
{
nReturn=nReturn+4;
}
oHerb=GetItemPossessedBy(oObject,"jw_harpherb4");
if (GetIsObjectValid(oHerb))
{
nReturn=nReturn+8;
}
oHerb=GetItemPossessedBy(oObject,"jw_harpherb5");
if (GetIsObjectValid(oHerb))
{
nReturn=nReturn+16;
}
oHerb=GetItemPossessedBy(oObject,"jw_harpherb6");
if (GetIsObjectValid(oHerb))
{
nReturn=nReturn+32;
}
oHerb=GetItemPossessedBy(oObject,"jw_harpherb7");
if (GetIsObjectValid(oHerb))
{
nReturn=nReturn+64;
}
return nReturn;
}
itemproperty iWeaponProperty (int nHerbValue)
{
itemproperty iProperty;
SendMessageToAllDMs("Debug, doing iWeaponProperty for pattern "+IntToString(nHerbValue));
switch (nHerbValue)
{
case 7: iProperty = ItemPropertyEnhancementBonus (1); break;
case 11: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEBONUS_1d4); break;
case 13: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_BLUDGEONING,IP_CONST_DAMAGEBONUS_1d4); break;
case 14: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_1d4); break;
case 15: iProperty = ItemPropertyEnhancementBonus (2); break;
case 19: iProperty =ItemPropertyBonusSavingThrow (IP_CONST_SAVEBASETYPE_FORTITUDE,1); break;
case 21: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_1d4); break;
case 22: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d4); break;
case 23: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEBONUS_2d4); break;
case 25: iProperty =ItemPropertyBonusSavingThrow (IP_CONST_SAVEBASETYPE_REFLEX,1); break;
case 26: iProperty =ItemPropertyBonusSavingThrow (IP_CONST_SAVEBASETYPE_WILL,1); break;
case 27: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_BLUDGEONING,IP_CONST_DAMAGEBONUS_2d4); break;
case 28: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_PIERCING,IP_CONST_DAMAGEBONUS_1d4); break;
case 29: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_2d4); break;
case 30: iProperty =ItemPropertyBonusSavingThrow (IP_CONST_SAVEBASETYPE_FORTITUDE,2); break;
case 31: iProperty = ItemPropertyEnhancementBonus (3); break;
case 35: iProperty =ItemPropertyVampiricRegeneration (1); break;
case 37: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_SLASHING,IP_CONST_DAMAGEBONUS_1d4); break;
case 38: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_1d4); break;
case 39: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_2d4); break;
case 41: iProperty =ItemPropertyMassiveCritical (IP_CONST_DAMAGEBONUS_1d10); break;
case 42: iProperty =ItemPropertyDamageBonusVsAlign (IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_PIERCING,IP_CONST_DAMAGEBONUS_1d6); break;
case 43: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_2d4); break;
case 44: iProperty =ItemPropertyDamageBonusVsAlign (IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_BLUDGEONING,IP_CONST_DAMAGEBONUS_1d6); break;
case 45: iProperty =ItemPropertyBonusSavingThrow (IP_CONST_SAVEBASETYPE_REFLEX,2); break;
case 46: iProperty =ItemPropertyBonusSavingThrow (IP_CONST_SAVEBASETYPE_WILL,2); break;
case 47: iProperty =ItemPropertyMaxRangeStrengthMod (20); break;
case 49: iProperty =ItemPropertyDamageBonusVsAlign (IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_SLASHING,IP_CONST_DAMAGEBONUS_1d6); break;
case 50: iProperty =ItemPropertySkillBonus (SKILL_DISCIPLINE,4); break;
case 51: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_PIERCING,IP_CONST_DAMAGEBONUS_2d4); break;
case 52: iProperty =ItemPropertySkillBonus (SKILL_TUMBLE,4); break;
case 53: iProperty =ItemPropertyVampiricRegeneration (3); break;
case 54: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_SLASHING,IP_CONST_DAMAGEBONUS_2d4); break;
case 55: iProperty =ItemPropertyUnlimitedAmmo (IP_CONST_UNLIMITEDAMMO_PLUS4); break;
case 56: iProperty =ItemPropertyDamageBonusVsRace (IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEBONUS_1d6); break;
case 57: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_2d4); break;
case 58: iProperty =ItemPropertyMassiveCritical (IP_CONST_DAMAGEBONUS_2d8); break;
case 59: iProperty =ItemPropertyVampiricRegeneration (6); break;
case 60: iProperty =ItemPropertyMaxRangeStrengthMod (14); break;
case 61: iProperty =ItemPropertyMassiveCritical (IP_CONST_DAMAGEBONUS_2d10); break;
case 62: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEBONUS_2d6); break;
case 63: iProperty = ItemPropertyEnhancementBonus (4); break;
case 67: iProperty =ItemPropertyDamageBonusVsRace (IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d6); break;
case 69: iProperty =ItemPropertyDamageBonusVsRace (IP_CONST_RACIALTYPE_HUMANOID_ORC,IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_1d6); break;
case 70: iProperty =ItemPropertyDamageBonusVsRace (IP_CONST_RACIALTYPE_HUMANOID_GOBLINOID,IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_1d6); break;
case 71: iProperty =ItemPropertyUnlimitedAmmo (IP_CONST_UNLIMITEDAMMO_PLUS3); break;
case 73: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_SILENCE,IP_CONST_ONHIT_SAVEDC_16,IP_CONST_ONHIT_DURATION_10_PERCENT_4_ROUNDS); break;
case 74: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_LESSERDISPEL,IP_CONST_ONHIT_SAVEDC_16); break;
case 75: iProperty =ItemPropertySkillBonus (SKILL_DISCIPLINE,7); break;
case 76: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_BLINDNESS,IP_CONST_ONHIT_SAVEDC_16, IP_CONST_ONHIT_DURATION_10_PERCENT_4_ROUNDS); break;
case 77: iProperty =ItemPropertySkillBonus (SKILL_TUMBLE,7); break;
case 78: iProperty =ItemPropertyDamageBonusVsRace (IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEBONUS_2d6); break;
case 79: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_2d6); break;
case 81: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_FEAR,IP_CONST_ONHIT_SAVEDC_16, IP_CONST_ONHIT_DURATION_10_PERCENT_4_ROUNDS); break;
case 82: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_HOLD,IP_CONST_ONHIT_SAVEDC_16, IP_CONST_ONHIT_DURATION_10_PERCENT_4_ROUNDS); break;
case 83: iProperty =ItemPropertyDamageBonusVsRace (IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_2d6); break;
case 84: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_DOOM,IP_CONST_ONHIT_SAVEDC_16, IP_CONST_ONHIT_DURATION_10_PERCENT_4_ROUNDS); break;
case 85: iProperty =ItemPropertyDamageBonusVsRace (IP_CONST_RACIALTYPE_HUMANOID_ORC,IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_2d6); break;
case 86: iProperty =ItemPropertyDamageBonusVsRace (IP_CONST_RACIALTYPE_HUMANOID_GOBLINOID,IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_2d6); break;
case 87: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_2d6); break;
case 88: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_ABILITYDRAIN,IP_CONST_ONHIT_SAVEDC_16, IP_CONST_ABILITY_STR); break;
case 89: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_GREATERDISPEL,IP_CONST_ONHIT_SAVEDC_20); break;
case 90: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_HOLD,IP_CONST_ONHIT_SAVEDC_20, IP_CONST_ONHIT_DURATION_10_PERCENT_4_ROUNDS); break;
case 91: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_2d6); break;
case 92: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_LEVELDRAIN,IP_CONST_ONHIT_SAVEDC_18); break;
case 93: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_MORDSDISJUNCTION,IP_CONST_ONHIT_SAVEDC_24); break;
case 94: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_ABILITYDRAIN,IP_CONST_ONHIT_SAVEDC_24, IP_CONST_ABILITY_STR); break;
case 95: iProperty =ItemPropertyUnlimitedAmmo (IP_CONST_UNLIMITEDAMMO_PLUS5); break;
case 97: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_ABILITYDRAIN,IP_CONST_ONHIT_SAVEDC_16, IP_CONST_ABILITY_DEX); break;
case 98: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_ABILITYDRAIN,IP_CONST_ONHIT_SAVEDC_16, IP_CONST_ABILITY_CON); break;
case 99: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_ABILITYDRAIN,IP_CONST_ONHIT_SAVEDC_20, IP_CONST_ABILITY_STR); break;
case 100: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_WOUNDING,IP_CONST_ONHIT_SAVEDC_16); break;
case 101: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_ABILITYDRAIN,IP_CONST_ONHIT_SAVEDC_20, IP_CONST_ABILITY_DEX); break;
case 102: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_ABILITYDRAIN,IP_CONST_ONHIT_SAVEDC_20, IP_CONST_ABILITY_CON); break;
case 103: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_ABILITYDRAIN,IP_CONST_ONHIT_SAVEDC_24, IP_CONST_ABILITY_CON); break;
case 104: iProperty =ItemPropertyMaxRangeStrengthMod (8); break;
case 105: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_SLOW,IP_CONST_ONHIT_SAVEDC_20, IP_CONST_ONHIT_DURATION_10_PERCENT_4_ROUNDS); break;
case 106: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_SLEEP,IP_CONST_ONHIT_SAVEDC_20, IP_CONST_ONHIT_DURATION_10_PERCENT_4_ROUNDS); break;
case 107: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_ABILITYDRAIN,IP_CONST_ONHIT_SAVEDC_24, IP_CONST_ABILITY_DEX); break;
case 108: iProperty =ItemPropertyOnHitCastSpell (IP_CONST_ONHIT_CASTSPELL_FLESH_TO_STONE,IP_CONST_SPELLLEVEL_8); break;
case 109: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_LEVELDRAIN,IP_CONST_ONHIT_SAVEDC_22); break;
case 110: iProperty =ItemPropertyOnHitCastSpell (IP_CONST_ONHIT_CASTSPELL_INFESTATION_OF_MAGGOTS,IP_CONST_SPELLLEVEL_8); break;
case 111: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_SLOW,IP_CONST_ONHIT_SAVEDC_26, IP_CONST_ONHIT_DURATION_10_PERCENT_4_ROUNDS); break;
case 112: iProperty =ItemPropertyUnlimitedAmmo (IP_CONST_UNLIMITEDAMMO_PLUS2); break;
case 113: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_ABILITYDRAIN,IP_CONST_ONHIT_SAVEDC_20, IP_CONST_ABILITY_CHA); break;
case 114: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_ABILITYDRAIN,IP_CONST_ONHIT_SAVEDC_20, IP_CONST_ABILITY_INT); break;
case 115: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_ABILITYDRAIN,IP_CONST_ONHIT_SAVEDC_20, IP_CONST_ABILITY_WIS); break;
case 116: iProperty =ItemPropertyOnHitCastSpell (IP_CONST_ONHIT_CASTSPELL_FREEZE,IP_CONST_SPELLLEVEL_8); break;
case 117: iProperty =ItemPropertyOnHitCastSpell (IP_CONST_ONHIT_CASTSPELL_KNOCKDOWN,IP_CONST_SPELLLEVEL_8); break;
case 118: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_SLOW,IP_CONST_ONHIT_SAVEDC_24, IP_CONST_ONHIT_DURATION_10_PERCENT_4_ROUNDS); break;
case 119: iProperty =ItemPropertyVampiricRegeneration (10); break;
case 120: iProperty =ItemPropertyBonusFeat (IP_CONST_FEAT_CLEAVE); break;
case 121: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_HOLD,IP_CONST_ONHIT_SAVEDC_24, IP_CONST_ONHIT_DURATION_10_PERCENT_4_ROUNDS); break;
case 122: iProperty =ItemPropertyAttackBonus (5); break;
case 123: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_ABILITYDRAIN,IP_CONST_ONHIT_SAVEDC_26, IP_CONST_ABILITY_STR); break;
case 124: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_STUN,IP_CONST_ONHIT_SAVEDC_24,IP_CONST_ONHIT_DURATION_75_PERCENT_1_ROUND); break;
case 125: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_ABILITYDRAIN,IP_CONST_ONHIT_SAVEDC_26, IP_CONST_ABILITY_CON); break;
case 126: iProperty =ItemPropertyOnHitProps (IP_CONST_ONHIT_ABILITYDRAIN,IP_CONST_ONHIT_SAVEDC_26, IP_CONST_ABILITY_DEX); break;
case 127: iProperty = ItemPropertyEnhancementBonus (5); break;
}
return iProperty;
}
itemproperty iArmourProperty (int nHerbValue)
{
itemproperty iProperty;
switch (nHerbValue)
{
case 7: iProperty = ItemPropertyACBonus (1); break;
case 11: iProperty =ItemPropertyACBonusVsAlign (IP_CONST_ALIGNMENTGROUP_EVIL,2); break;
case 13: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGERESIST_5); break;
case 14: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGERESIST_5); break;
case 15: iProperty = ItemPropertyACBonus (2); break;
case 19: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGERESIST_5); break;
case 21: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGERESIST_5); break;
case 22: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_MAGICAL,IP_CONST_DAMAGERESIST_5); break;
case 23: iProperty =ItemPropertyACBonusVsAlign (IP_CONST_ALIGNMENTGROUP_EVIL,3); break;
case 25: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_NEGATIVE,IP_CONST_DAMAGERESIST_5); break;
case 26: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGERESIST_5); break;
case 27: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGERESIST_10); break;
case 28: iProperty =ItemPropertyImmunityToSpellLevel (2); break;
case 29: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGERESIST_10); break;
case 30: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGERESIST_10); break;
case 31: iProperty = ItemPropertyACBonus (3); break;
case 35: iProperty =ItemPropertyACBonusVsDmgType (IP_CONST_DAMAGETYPE_BLUDGEONING,2); break;
case 37: iProperty =ItemPropertyACBonusVsDmgType (IP_CONST_DAMAGETYPE_PIERCING,2); break;
case 38: iProperty =ItemPropertyACBonusVsDmgType (IP_CONST_DAMAGETYPE_SLASHING,2); break;
case 39: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGERESIST_10); break;
case 41: iProperty =ItemPropertyBonusSpellResistance (IP_CONST_SPELLRESISTANCEBONUS_10); break;
case 42: iProperty =ItemPropertyArcaneSpellFailure (IP_CONST_ARCANE_SPELL_FAILURE_MINUS_10_PERCENT); break;
case 43: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_MAGICAL,IP_CONST_DAMAGERESIST_10); break;
case 44: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_ABERRATION,3); break;
case 45: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_NEGATIVE,IP_CONST_DAMAGERESIST_10); break;
case 46: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGERESIST_10); break;
case 47: iProperty =ItemPropertyACBonusVsAlign (IP_CONST_ALIGNMENTGROUP_EVIL,3); break;
case 49: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_ANIMAL,3); break;
case 50: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_BEAST,3); break;
case 51: iProperty =ItemPropertyImmunityToSpellLevel (3); break;
case 52: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_CONSTRUCT,3); break;
case 53: iProperty =ItemPropertyACBonusVsDmgType (IP_CONST_DAMAGETYPE_BLUDGEONING,3); break;
case 54: iProperty =ItemPropertyACBonusVsDmgType (IP_CONST_DAMAGETYPE_PIERCING,3); break;
case 55: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGERESIST_15); break;
case 56: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_DWARF,3); break;
case 57: iProperty =ItemPropertyACBonusVsDmgType (IP_CONST_DAMAGETYPE_SLASHING,3); break;
case 58: iProperty =ItemPropertyBonusSpellResistance (IP_CONST_SPELLRESISTANCEBONUS_16); break;
case 59: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGERESIST_15); break;
case 60: iProperty =ItemPropertyBonusFeat (IP_CONST_FEAT_COMBAT_CASTING); break;
case 61: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGERESIST_15); break;
case 62: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGERESIST_15); break;
case 63: iProperty = ItemPropertyACBonus (4); break;
case 67: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_ELEMENTAL,3); break;
case 69: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_HUMANOID_GOBLINOID,3); break;
case 70: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_HUMANOID_MONSTROUS,3); break;
case 71: iProperty =ItemPropertyBonusFeat (IP_CONST_FEAT_KNOCKDOWN); break;
case 73: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_HUMANOID_ORC,3); break;
case 74: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_HUMANOID_REPTILIAN,3); break;
case 75: iProperty =ItemPropertyBonusFeat (IP_CONST_FEAT_POINTBLANK); break;
case 76: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_MAGICAL_BEAST,3); break;
case 77: iProperty =ItemPropertyBonusFeat (IP_CONST_FEAT_AMBIDEXTROUS); break;
case 78: iProperty =ItemPropertyArcaneSpellFailure (IP_CONST_ARCANE_SPELL_FAILURE_MINUS_20_PERCENT); break;
case 79: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_MAGICAL,IP_CONST_DAMAGERESIST_15); break;
case 81: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_OUTSIDER,3); break;
case 82: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_UNDEAD,3); break;
case 83: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_ABERRATION,4); break;
case 84: iProperty =ItemPropertyBonusSavingThrowVsX (IP_CONST_SAVEVS_FEAR,2); break;
case 85: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_ANIMAL,4); break;
case 86: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_BEAST,4); break;
case 87: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_NEGATIVE,IP_CONST_DAMAGERESIST_15); break;
case 88: iProperty =ItemPropertyBonusSavingThrowVsX (IP_CONST_SAVEVS_MINDAFFECTING,2); break;
case 89: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_CONSTRUCT,4); break;
case 90: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_DRAGON,4); break;
case 91: iProperty =ItemPropertyDamageResistance (IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGERESIST_15); break;
case 92: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_ELEMENTAL,4); break;
case 93: iProperty =ItemPropertyImmunityToSpellLevel (4); break;
case 94: iProperty =ItemPropertyACBonusVsDmgType (IP_CONST_DAMAGETYPE_BLUDGEONING,4); break;
case 95: iProperty =ItemPropertyUnlimitedAmmo (IP_CONST_UNLIMITEDAMMO_PLUS5); break;
case 97: iProperty =ItemPropertyBonusSavingThrowVsX (IP_CONST_SAVEVS_DISEASE,2); break;
case 98: iProperty =ItemPropertyBonusSavingThrowVsX (IP_CONST_SAVEVS_NEGATIVE,2); break;
case 99: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_HUMANOID_GOBLINOID,4); break;
case 100: iProperty =ItemPropertyBonusSavingThrowVsX (IP_CONST_SAVEVS_DEATH,2); break;
case 101: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_HUMANOID_MONSTROUS,4); break;
case 102: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_HUMANOID_ORC,4); break;
case 103: iProperty =ItemPropertyACBonusVsDmgType (IP_CONST_DAMAGETYPE_PIERCING,4); break;
case 104: iProperty =ItemPropertyRegeneration (1); break;
case 105: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_HUMANOID_REPTILIAN,4); break;
case 106: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_MAGICAL_BEAST,4); break;
case 107: iProperty =ItemPropertyACBonusVsDmgType (IP_CONST_DAMAGETYPE_SLASHING,4); break;
case 108: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_OUTSIDER,4); break;
case 109: iProperty =ItemPropertyBonusSpellResistance (IP_CONST_SPELLRESISTANCEBONUS_22); break;
case 110: iProperty =ItemPropertyArcaneSpellFailure (IP_CONST_ARCANE_SPELL_FAILURE_MINUS_30_PERCENT); break;
case 111: iProperty =ItemPropertyImmunityToSpellLevel (5); break;
case 112: iProperty =ItemPropertySkillBonus (SKILL_CONCENTRATION,5); break;
case 113: iProperty =ItemPropertyACBonusVsRace (IP_CONST_RACIALTYPE_UNDEAD,4); break;
case 114: iProperty =ItemPropertyRegeneration (3); break;
case 115: iProperty =ItemPropertySkillBonus (SKILL_CONCENTRATION,10); break;
case 116: iProperty =ItemPropertyBonusSavingThrowVsX (IP_CONST_SAVEVS_DEATH,4); break;
case 117: iProperty = ItemPropertyImmunityMisc (IP_CONST_IMMUNITYMISC_FEAR); break;
case 118: iProperty = ItemPropertyImmunityMisc (IP_CONST_IMMUNITYMISC_MINDSPELLS); break;
case 119: iProperty = ItemPropertyImmunityMisc (IP_CONST_IMMUNITYMISC_PARALYSIS); break;
case 120: iProperty =ItemPropertyBonusSavingThrowVsX (IP_CONST_SAVEVS_UNIVERSAL,2); break;
case 121: iProperty =ItemPropertyDamageImmunity (IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEIMMUNITY_50_PERCENT); break;
case 122: iProperty =ItemPropertyDamageImmunity (IP_CONST_DAMAGETYPE_BLUDGEONING,IP_CONST_DAMAGEIMMUNITY_50_PERCENT); break;
case 123: iProperty = ItemPropertyImmunityMisc (IP_CONST_IMMUNITYMISC_CRITICAL_HITS); break;
case 124: iProperty =ItemPropertyDamageImmunity (IP_CONST_DAMAGETYPE_SLASHING,IP_CONST_DAMAGEIMMUNITY_50_PERCENT); break;
case 125: iProperty =ItemPropertyImmunityMisc (IP_CONST_IMMUNITYMISC_KNOCKDOWN); break;
case 126: iProperty =ItemPropertyImmunityMisc (IP_CONST_IMMUNITYMISC_DEATH_MAGIC); break;
case 127: iProperty = ItemPropertyACBonus (5); break;
}
return iProperty;
}
itemproperty iRingAmuletProperty (int nHerbValue)
{
itemproperty iProperty;
switch (nHerbValue)
{
case 7: iProperty = ItemPropertyDarkvision (); break;
case 11: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_CHA,1); break;
case 13: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_INT,1); break;
case 14: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_WIS,1); break;
case 15: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_CHA,2); break;
case 19: iProperty =ItemPropertyBonusSavingThrow (IP_CONST_SAVEBASETYPE_FORTITUDE,1); break;
case 21: iProperty =ItemPropertyBonusSavingThrow (IP_CONST_SAVEBASETYPE_REFLEX,1); break;
case 22: iProperty =ItemPropertyBonusSavingThrow (IP_CONST_SAVEBASETYPE_WILL,1); break;
case 23: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_INT,2); break;
case 25: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_BARD,IP_CONST_SPELLLEVEL_1); break;
case 26: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_CLERIC,IP_CONST_SPELLLEVEL_2); break;
case 27: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_WIS,2); break;
case 28: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_DRUID,IP_CONST_SPELLLEVEL_2); break;
case 29: iProperty =ItemPropertyBonusSavingThrow (IP_CONST_SAVEBASETYPE_FORTITUDE,2); break;
case 30: iProperty =ItemPropertyBonusSavingThrow (IP_CONST_SAVEBASETYPE_REFLEX,2); break;
case 31: iProperty = ItemPropertyRegeneration (4); break;
case 35: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_SORCERER,IP_CONST_SPELLLEVEL_2); break;
case 37: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_WIZARD,IP_CONST_SPELLLEVEL_2); break;
case 38: iProperty =ItemPropertyLight (IP_CONST_LIGHTBRIGHTNESS_LOW,IP_CONST_LIGHTCOLOR_BLUE); break;
case 39: iProperty =ItemPropertyBonusSavingThrow (IP_CONST_SAVEBASETYPE_WILL,2); break;
case 41: iProperty =ItemPropertyLight (IP_CONST_LIGHTBRIGHTNESS_LOW,IP_CONST_LIGHTCOLOR_PURPLE); break;
case 42: iProperty =ItemPropertyLight (IP_CONST_LIGHTBRIGHTNESS_LOW,IP_CONST_LIGHTCOLOR_RED); break;
case 43: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_BARD,IP_CONST_SPELLLEVEL_4); break;
case 44: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_AID_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 45: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_CLERIC,IP_CONST_SPELLLEVEL_4); break;
case 46: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_DRUID,IP_CONST_SPELLLEVEL_4); break;
case 47: iProperty =ItemPropertySpellImmunitySchool (SPELL_SCHOOL_EVOCATION); break;
case 49: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_BLESS_2,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 50: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GHOSTLY_VISAGE_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 51: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_SORCERER,IP_CONST_SPELLLEVEL_4); break;
case 52: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_EAGLE_SPLEDOR_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 53: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_WIZARD,IP_CONST_SPELLLEVEL_2); break;
case 54: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_RANGER,IP_CONST_SPELLLEVEL_2); break;
case 55: iProperty =ItemPropertyBonusSavingThrow (IP_CONST_SAVEBASETYPE_WILL,3); break;
case 56: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_ENDURANCE_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 57: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_PALADIN,IP_CONST_SPELLLEVEL_2); break;
case 58: iProperty =ItemPropertyLight (IP_CONST_LIGHTBRIGHTNESS_NORMAL,IP_CONST_LIGHTCOLOR_YELLOW); break;
case 59: iProperty =ItemPropertyBonusSavingThrow (IP_CONST_SAVEBASETYPE_REFLEX,3); break;
case 60: iProperty =ItemPropertyLight (IP_CONST_LIGHTBRIGHTNESS_NORMAL,IP_CONST_LIGHTCOLOR_GREEN); break;
case 61: iProperty =ItemPropertyBonusSavingThrow (IP_CONST_SAVEBASETYPE_FORTITUDE,3); break;
case 62: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_WIS,3); break;
case 63: iProperty = ItemPropertyCastSpell (IP_CONST_CASTSPELL_HEAL_11,IP_CONST_CASTSPELL_NUMUSES_2_USES_PER_DAY); break;
case 67: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_CURE_LIGHT_WOUNDS_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 69: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_BULLS_STRENGTH_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 70: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_OWLS_WISDOM_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 71: iProperty =ItemPropertyLight (IP_CONST_LIGHTBRIGHTNESS_NORMAL,IP_CONST_LIGHTCOLOR_WHITE); break;
case 73: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_FOXS_CUNNING_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 74: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_SUMMON_CREATURE_III_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 75: iProperty =ItemPropertyBonusFeat (IP_CONST_FEAT_EXTRA_TURNING); break;
case 76:iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_ENTROPIC_SHIELD_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 77: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_ETHEREAL_VISAGE_9,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 78: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_EAGLES_SPLENDOR_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 79: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_INT,3); break;
case 81: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_CLARITY_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 82: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_MAGE_ARMOR_2,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 83: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_BARKSKIN_6,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 84: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_VIRTUE_1,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 85: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_ENDURANCE_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 86: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_CURE_SERIOUS_WOUNDS_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 87: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_CHA,3); break;
case 88: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_FIND_TRAPS_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 89: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_ELEMENTAL_SHIELD_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 90: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_ETHEREAL_VISAGE_9,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 91: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_BULLS_STRENGTH_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 92: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_OWLS_WISDOM_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 93: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_IMPROVED_INVISIBILITY_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 94: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_RESTORATION_13,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 95: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_WIZARD,IP_CONST_SPELLLEVEL_8); break;
case 97: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_LESSER_RESTORATION_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 98: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_LESSER_MIND_BLANK_9,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 99: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_FOXS_CUNNING_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 100: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_DARKVISION_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 101: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_HEALING_CIRCLE_9,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 102: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_RESISTANCE_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 103: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GLOBE_OF_INVULNERABILITY_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 104: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_REMOVE_DISEASE_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 105: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_SUMMON_CREATURE_III_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 106: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_IDENTIFY_3,IP_CONST_CASTSPELL_NUMUSES_3_USES_PER_DAY); break;
case 107: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_STONESKIN_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 108: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_AURAOFGLORY_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 109: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_BARD,IP_CONST_SPELLLEVEL_6); break;
case 110: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_PALADIN,IP_CONST_SPELLLEVEL_4); break;
case 111: iProperty = ItemPropertyBonusLevelSpell (IP_CONST_CLASS_SORCERER,IP_CONST_SPELLLEVEL_8); break;
case 112: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_SHIELD_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 113: iProperty =ItemPropertyDamageImmunity (IP_CONST_DAMAGETYPE_PIERCING,IP_CONST_DAMAGEIMMUNITY_25_PERCENT); break;
case 114: iProperty =ItemPropertyDamageImmunity (IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEIMMUNITY_25_PERCENT); break;
case 115: iProperty =ItemPropertyDamageImmunity (IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEIMMUNITY_25_PERCENT); break;
case 116: iProperty =ItemPropertyDamageImmunity (IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEIMMUNITY_25_PERCENT); break;
case 117: iProperty = ItemPropertyBonusLevelSpell (IP_CONST_CLASS_RANGER,IP_CONST_SPELLLEVEL_4); break;
case 118: iProperty = ItemPropertyBonusLevelSpell (IP_CONST_CLASS_WIZARD,IP_CONST_SPELLLEVEL_6); break;
case 119: iProperty = ItemPropertyBonusLevelSpell (IP_CONST_CLASS_DRUID,IP_CONST_SPELLLEVEL_8); break;
case 120: iProperty =ItemPropertyImmunityMisc (IP_CONST_IMMUNITYMISC_POISON); break;
case 121: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_SORCERER,IP_CONST_SPELLLEVEL_6); break;
case 122: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_DRUID,IP_CONST_SPELLLEVEL_6); break;
case 123: iProperty = ItemPropertyBonusLevelSpell (IP_CONST_CLASS_CLERIC,IP_CONST_SPELLLEVEL_8); break;
case 124: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_CLERIC,IP_CONST_SPELLLEVEL_6); break;
case 125: iProperty =ItemPropertyImprovedEvasion (); break;
case 126: iProperty =ItemPropertyTrueSeeing (); break;
case 127: iProperty = ItemPropertyHaste (); break;
}
return iProperty;
}
itemproperty iClothMiscProperty (int nHerbValue)
{
itemproperty iProperty;
switch (nHerbValue)
{
case 7: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_CON,1); break;
case 11: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_DEX,1); break;
case 13: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_STR,1); break;
case 14: iProperty =ItemPropertySkillBonus (SKILL_ANIMAL_EMPATHY,5); break;
case 15: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_CON,2); break;
case 19: iProperty =ItemPropertySkillBonus (SKILL_APPRAISE,5); break;
case 21: iProperty =ItemPropertySkillBonus (SKILL_CONCENTRATION,5); break;
case 22: iProperty =ItemPropertySkillBonus (SKILL_DISABLE_TRAP,5); break;
case 23: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_DEX,2); break;
case 25: iProperty =ItemPropertySkillBonus (FEAT_SKILL_FOCUS_DISCIPLINE,5); break;
case 26: iProperty =ItemPropertySkillBonus (SKILL_HEAL,5); break;
case 27: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_STR,2); break;
case 28: iProperty =ItemPropertySkillBonus (SKILL_HIDE,5); break;
case 29: iProperty =ItemPropertySkillBonus (SKILL_ANIMAL_EMPATHY,10); break;
case 30: iProperty =ItemPropertySkillBonus (SKILL_ANIMAL_EMPATHY,10); break;
case 31: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_CON,3); break;
case 35: iProperty =ItemPropertySkillBonus (SKILL_LISTEN,5); break;
case 37: iProperty =ItemPropertySkillBonus (SKILL_LORE,5); break;
case 38: iProperty =ItemPropertySkillBonus (SKILL_MOVE_SILENTLY,5); break;
case 39: iProperty =ItemPropertySkillBonus (SKILL_CONCENTRATION,10); break;
case 41: iProperty =ItemPropertySkillBonus (SKILL_PERFORM,5); break;
case 42: iProperty =ItemPropertySkillBonus (SKILL_SEARCH,5); break;
case 43: iProperty =ItemPropertySkillBonus (FEAT_SKILL_FOCUS_DISABLE_TRAP,10); break;
case 44: iProperty =ItemPropertySkillBonus (SKILL_SPOT,5); break;
case 45: iProperty =ItemPropertySkillBonus (SKILL_DISCIPLINE,10); break;
case 46: iProperty =ItemPropertySkillBonus (SKILL_HEAL,10); break;
case 47: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_DEX,3); break;
case 49: iProperty =ItemPropertySkillBonus (SKILL_USE_MAGIC_DEVICE,5); break;
case 50: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GHOSTLY_VISAGE_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 51: iProperty =ItemPropertySkillBonus (SKILL_HIDE,10); break;
case 52: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_EAGLE_SPLEDOR_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 53: iProperty =ItemPropertySkillBonus (SKILL_LISTEN,10); break;
case 54: iProperty =ItemPropertySkillBonus (SKILL_LORE,10); break;
case 55: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_STR,3); break;
case 56: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_ENDURANCE_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 57: iProperty =ItemPropertySkillBonus (SKILL_LORE,10); break;
case 58: iProperty =ItemPropertySkillBonus (SKILL_PERFORM,10); break;
case 59: iProperty =ItemPropertySkillBonus (SKILL_ANIMAL_EMPATHY,15); break;
case 60: iProperty =ItemPropertySkillBonus (SKILL_SEARCH,10); break;
case 61: iProperty =ItemPropertySkillBonus (SKILL_CONCENTRATION,15); break;
case 62: iProperty =ItemPropertySkillBonus (SKILL_DISCIPLINE,15); break;
case 63: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_CON,4); break;
case 67: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_CURE_LIGHT_WOUNDS_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 69: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_BULLS_STRENGTH_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 70: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_OWLS_WISDOM_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 71: iProperty =ItemPropertySkillBonus (SKILL_SPOT,10); break;
case 73: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_FOXS_CUNNING_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 74: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_SUMMON_CREATURE_III_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 75: iProperty =ItemPropertySkillBonus (SKILL_USE_MAGIC_DEVICE,10); break;
case 76:iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_ENTROPIC_SHIELD_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 77: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_ETHEREAL_VISAGE_9,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 78: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_EAGLES_SPLENDOR_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 79: iProperty =ItemPropertySkillBonus (SKILL_SEARCH,15); break;
case 81: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_CLARITY_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 82: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_MAGE_ARMOR_2,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 83: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_BARKSKIN_6,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 84: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_VIRTUE_1,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 85: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_ENDURANCE_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 86: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_CURE_SERIOUS_WOUNDS_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 87: iProperty =ItemPropertySkillBonus (SKILL_USE_MAGIC_DEVICE,15); break;
case 88: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_FIND_TRAPS_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 89: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_ELEMENTAL_SHIELD_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 90: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_ETHEREAL_VISAGE_9,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 91: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_BULLS_STRENGTH_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 92: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_OWLS_WISDOM_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 93: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_IMPROVED_INVISIBILITY_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 94: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_RESTORATION_13,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 95: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_DEX,4); break;
case 97: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_LESSER_RESTORATION_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 98: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_LESSER_MIND_BLANK_9,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 99: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_FOXS_CUNNING_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 100: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_DARKVISION_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 101: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_HEALING_CIRCLE_9,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 102: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_RESISTANCE_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 103: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GLOBE_OF_INVULNERABILITY_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 104: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_REMOVE_DISEASE_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 105: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_SUMMON_CREATURE_III_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 106: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_IDENTIFY_3,IP_CONST_CASTSPELL_NUMUSES_3_USES_PER_DAY); break;
case 107: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_STONESKIN_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 108: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_AURAOFGLORY_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 109: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_BARD,IP_CONST_SPELLLEVEL_6); break;
case 110: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_PALADIN,IP_CONST_SPELLLEVEL_4); break;
case 111: iProperty =ItemPropertyAbilityBonus (IP_CONST_ABILITY_STR,4); break;
case 112: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_SHIELD_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 113: iProperty =ItemPropertyDamageImmunity (IP_CONST_DAMAGETYPE_PIERCING,IP_CONST_DAMAGEIMMUNITY_25_PERCENT); break;
case 114: iProperty =ItemPropertyDamageImmunity (IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEIMMUNITY_25_PERCENT); break;
case 115: iProperty =ItemPropertyDamageImmunity (IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEIMMUNITY_25_PERCENT); break;
case 116: iProperty =ItemPropertyDamageImmunity (IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEIMMUNITY_25_PERCENT); break;
case 117: iProperty = ItemPropertyBonusLevelSpell (IP_CONST_CLASS_RANGER,IP_CONST_SPELLLEVEL_4); break;
case 118: iProperty = ItemPropertyBonusLevelSpell (IP_CONST_CLASS_WIZARD,IP_CONST_SPELLLEVEL_6); break;
case 119: iProperty = ItemPropertyBonusLevelSpell (IP_CONST_CLASS_DRUID,IP_CONST_SPELLLEVEL_8); break;
case 120: iProperty =ItemPropertyImmunityMisc (IP_CONST_IMMUNITYMISC_POISON); break;
case 121: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_SORCERER,IP_CONST_SPELLLEVEL_6); break;
case 122: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_DRUID,IP_CONST_SPELLLEVEL_6); break;
case 123: iProperty = ItemPropertyBonusLevelSpell (IP_CONST_CLASS_CLERIC,IP_CONST_SPELLLEVEL_8); break;
case 124: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_CLERIC,IP_CONST_SPELLLEVEL_6); break;
case 125: iProperty =ItemPropertyImprovedEvasion (); break;
case 126: iProperty =ItemPropertyTrueSeeing (); break;
case 127: iProperty = ItemPropertyFreeAction (); break;
}
return iProperty;
}
itemproperty iGlovesProperty (int nHerbValue)
{
itemproperty iProperty;
switch (nHerbValue)
{
case 7: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEBONUS_1d6); break;
case 11: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d6); break;
case 13: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_1d6); break;
case 14: iProperty =ItemPropertyAttackBonus (3); break;
case 15: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEBONUS_1d8); break;
case 19: iProperty =ItemPropertySkillBonus (SKILL_APPRAISE,5); break;
case 21: iProperty =ItemPropertySkillBonus (SKILL_CONCENTRATION,5); break;
case 22: iProperty =ItemPropertySkillBonus (SKILL_DISABLE_TRAP,5); break;
case 23: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d8); break;
case 25: iProperty =ItemPropertySkillBonus (FEAT_SKILL_FOCUS_DISCIPLINE,5); break;
case 26: iProperty =ItemPropertySkillBonus (SKILL_HEAL,5); break;
case 27: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_1d8); break;
case 28: iProperty =ItemPropertySkillBonus (SKILL_HIDE,5); break;
case 29: iProperty =ItemPropertyAttackBonus (6); break;
case 30: iProperty =ItemPropertySkillBonus (SKILL_ANIMAL_EMPATHY,10); break;
case 31: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEBONUS_2d6); break;
case 35: iProperty =ItemPropertySkillBonus (SKILL_LISTEN,5); break;
case 37: iProperty =ItemPropertySkillBonus (SKILL_LORE,5); break;
case 38: iProperty =ItemPropertySkillBonus (SKILL_MOVE_SILENTLY,5); break;
case 39: iProperty =ItemPropertySkillBonus (SKILL_CONCENTRATION,10); break;
case 41: iProperty =ItemPropertySkillBonus (SKILL_PERFORM,5); break;
case 42: iProperty =ItemPropertySkillBonus (SKILL_SEARCH,5); break;
case 43: iProperty =ItemPropertySkillBonus (FEAT_SKILL_FOCUS_DISABLE_TRAP,10); break;
case 44: iProperty =ItemPropertySkillBonus (SKILL_SPOT,5); break;
case 45: iProperty =ItemPropertySkillBonus (SKILL_DISCIPLINE,10); break;
case 46: iProperty =ItemPropertySkillBonus (SKILL_HEAL,10); break;
case 47: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_2d6); break;
case 49: iProperty =ItemPropertySkillBonus (SKILL_USE_MAGIC_DEVICE,5); break;
case 50: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GHOSTLY_VISAGE_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 51: iProperty =ItemPropertySkillBonus (SKILL_HIDE,10); break;
case 52: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_EAGLE_SPLEDOR_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 53: iProperty =ItemPropertySkillBonus (SKILL_LISTEN,10); break;
case 54: iProperty =ItemPropertySkillBonus (SKILL_LORE,10); break;
case 55: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_2d6); break;
case 56: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_ENDURANCE_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 57: iProperty =ItemPropertySkillBonus (SKILL_LORE,10); break;
case 58: iProperty =ItemPropertySkillBonus (SKILL_PERFORM,10); break;
case 59: iProperty =ItemPropertyAttackBonus (10); break;
case 60: iProperty =ItemPropertySkillBonus (SKILL_SEARCH,10); break;
case 61: iProperty =ItemPropertySkillBonus (SKILL_CONCENTRATION,15); break;
case 62: iProperty =ItemPropertySkillBonus (SKILL_DISCIPLINE,15); break;
case 63: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEBONUS_2d8); break;
case 67: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_CURE_LIGHT_WOUNDS_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 69: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_BULLS_STRENGTH_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 70: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_OWLS_WISDOM_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 71: iProperty =ItemPropertySkillBonus (SKILL_SPOT,10); break;
case 73: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_FOXS_CUNNING_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 74: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_SUMMON_CREATURE_III_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 75: iProperty =ItemPropertySkillBonus (SKILL_USE_MAGIC_DEVICE,10); break;
case 76:iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_ENTROPIC_SHIELD_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 77: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_ETHEREAL_VISAGE_9,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 78: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_EAGLES_SPLENDOR_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 79: iProperty =ItemPropertySkillBonus (SKILL_SEARCH,15); break;
case 81: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_CLARITY_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 82: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_MAGE_ARMOR_2,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 83: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_BARKSKIN_6,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 84: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_VIRTUE_1,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 85: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_ENDURANCE_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 86: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_CURE_SERIOUS_WOUNDS_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 87: iProperty =ItemPropertySkillBonus (SKILL_USE_MAGIC_DEVICE,15); break;
case 88: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_FIND_TRAPS_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 89: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_ELEMENTAL_SHIELD_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 90: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_ETHEREAL_VISAGE_9,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 91: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_BULLS_STRENGTH_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 92: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_OWLS_WISDOM_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 93: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_IMPROVED_INVISIBILITY_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 94: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_RESTORATION_13,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 95: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_2d8); break;
case 97: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_LESSER_RESTORATION_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 98: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_LESSER_MIND_BLANK_9,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 99: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_FOXS_CUNNING_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 100: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_DARKVISION_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 101: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_HEALING_CIRCLE_9,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 102: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_RESISTANCE_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 103: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GLOBE_OF_INVULNERABILITY_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 104: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_REMOVE_DISEASE_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 105: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_SUMMON_CREATURE_III_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 106: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_IDENTIFY_3,IP_CONST_CASTSPELL_NUMUSES_3_USES_PER_DAY); break;
case 107: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_STONESKIN_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 108: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_AURAOFGLORY_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 109: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_BARD,IP_CONST_SPELLLEVEL_6); break;
case 110: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_PALADIN,IP_CONST_SPELLLEVEL_4); break;
case 111: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_2d8); break;
case 112: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_SHIELD_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 113: iProperty =ItemPropertyDamageImmunity (IP_CONST_DAMAGETYPE_PIERCING,IP_CONST_DAMAGEIMMUNITY_25_PERCENT); break;
case 114: iProperty =ItemPropertyDamageImmunity (IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEIMMUNITY_25_PERCENT); break;
case 115: iProperty =ItemPropertyDamageImmunity (IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEIMMUNITY_25_PERCENT); break;
case 116: iProperty =ItemPropertyDamageImmunity (IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEIMMUNITY_25_PERCENT); break;
case 117: iProperty = ItemPropertyBonusLevelSpell (IP_CONST_CLASS_RANGER,IP_CONST_SPELLLEVEL_4); break;
case 118: iProperty = ItemPropertyBonusLevelSpell (IP_CONST_CLASS_WIZARD,IP_CONST_SPELLLEVEL_6); break;
case 119: iProperty =ItemPropertyAttackBonus (3); break;
case 120: iProperty =ItemPropertyImmunityMisc (IP_CONST_IMMUNITYMISC_POISON); break;
case 121: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_SORCERER,IP_CONST_SPELLLEVEL_6); break;
case 122: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_DRUID,IP_CONST_SPELLLEVEL_6); break;
case 123: iProperty = ItemPropertyBonusLevelSpell (IP_CONST_CLASS_CLERIC,IP_CONST_SPELLLEVEL_8); break;
case 124: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_CLERIC,IP_CONST_SPELLLEVEL_6); break;
case 125: iProperty =ItemPropertyImprovedEvasion (); break;
case 126: iProperty =ItemPropertyTrueSeeing (); break;
case 127: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_BOMBARDMENT_20,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
}
return iProperty;
}
itemproperty iFoodProperty (int nHerbValue)
{
itemproperty iProperty;
switch (nHerbValue)
{
case 7: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_AID_3,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 11: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_BLESS_2,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 13: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_BULLS_STRENGTH_10,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 14: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_CATS_GRACE_10,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 15: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_ANIMATE_DEAD_10,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 19: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_CLARITY_3,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 21: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_CURE_LIGHT_WOUNDS_5,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 22: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_CURE_MODERATE_WOUNDS_10,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 23: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_BARKSKIN_6,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 25: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_ELEMENTAL_SHIELD_12,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 26: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_AID_3,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 27: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_ENDURANCE_10,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 28: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_LESSER_MIND_BLANK_9,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 29: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_CREATE_GREATER_UNDEAD_15,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 30: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_CURE_SERIOUS_WOUNDS_10,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 31: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEBONUS_2d6); break;
case 35: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_LESSER_RESTORATION_3,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 37: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_MAGE_ARMOR_2,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 38: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_MASS_HEAL_15,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 39: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_CURE_CRITICAL_WOUNDS_15,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 41: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_MIND_BLANK_15,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 42: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_MINOR_GLOBE_OF_INVULNERABILITY_7,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 43: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_DEATH_WARD_7,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 44: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GHOSTLY_VISAGE_15,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 45: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_FREEDOM_OF_MOVEMENT_7,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 46: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GLOBE_OF_INVULNERABILITY_11,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 47: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_2d6); break;
case 49: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_NATURES_BALANCE_15,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 50: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_NEGATIVE_ENERGY_PROTECTION_15,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 51: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_RESTORATION_13,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 52: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_NEUTRALIZE_POISON_5,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 53: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_SPELL_MANTLE_17,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 54: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_STONESKIN_11,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 55: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_2d6); break;
case 56: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_PRAYER_5,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 57: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_HASTE_10,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 58: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_HEALING_CIRCLE_16,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 59: iProperty =ItemPropertyAttackBonus (10); break;
case 60: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_IMPROVED_INVISIBILITY_7,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 61: iProperty =ItemPropertySkillBonus (SKILL_CONCENTRATION,15); break;
case 62: iProperty =ItemPropertySkillBonus (SKILL_DISCIPLINE,15); break;
case 63: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEBONUS_2d8); break;
case 67: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_PROTECTION_FROM_ALIGNMENT_5,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 69: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_REMOVE_BLINDNESS_DEAFNESS_5,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 70: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_REMOVE_FEAR_2,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 71: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_INVISIBILITY_SPHERE_5,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 73: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_REMOVE_DISEASE_5,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 74: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_REMOVE_CURSE_5,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 75: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_MASS_HASTE_11,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 76: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_REMOVE_PARALYSIS_3,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 77: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_ETHEREAL_VISAGE_15,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 78: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_MORDENKAINENS_SWORD_13,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 79: iProperty =ItemPropertySkillBonus (SKILL_SEARCH,15); break;
case 81: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_RESISTANCE_5,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 82: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_RESTORATION_7,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 83: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_POLYMORPH_SELF_7,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 84: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_SPELL_RESISTANCE_15,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 85: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_PREMONITION_15,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 86: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_SANCTUARY_2,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 87: iProperty =ItemPropertySkillBonus (SKILL_USE_MAGIC_DEVICE,15); break;
case 88: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_SPELL_MANTLE_13,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 89: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_SHADOW_SHIELD_13,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 90: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_SHAPECHANGE_17,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 91: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_BULLS_STRENGTH_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 92: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_STONESKIN_7,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 93: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_IMPROVED_INVISIBILITY_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 94: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GREATER_RESTORATION_13,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 95: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_2d8); break;
case 97: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_REGENERATE_13,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 98: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_LESSER_MIND_BLANK_9,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 99: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_TENSERS_TRANSFORMATION_11,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 100: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_DARKVISION_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 101: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_HEAL_11,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE); break;
case 102: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_RESISTANCE_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 103: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_GLOBE_OF_INVULNERABILITY_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 104: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_REMOVE_DISEASE_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 105: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_SUMMON_CREATURE_III_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 106: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_IDENTIFY_3,IP_CONST_CASTSPELL_NUMUSES_3_USES_PER_DAY); break;
case 107: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_STONESKIN_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 108: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_AURAOFGLORY_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 109: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_BARD,IP_CONST_SPELLLEVEL_6); break;
case 110: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_PALADIN,IP_CONST_SPELLLEVEL_4); break;
case 111: iProperty =ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_2d8); break;
case 112: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_SHIELD_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
case 113: iProperty =ItemPropertyDamageImmunity (IP_CONST_DAMAGETYPE_PIERCING,IP_CONST_DAMAGEIMMUNITY_25_PERCENT); break;
case 114: iProperty =ItemPropertyDamageImmunity (IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEIMMUNITY_25_PERCENT); break;
case 115: iProperty =ItemPropertyDamageImmunity (IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEIMMUNITY_25_PERCENT); break;
case 116: iProperty =ItemPropertyDamageImmunity (IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEIMMUNITY_25_PERCENT); break;
case 117: iProperty = ItemPropertyBonusLevelSpell (IP_CONST_CLASS_RANGER,IP_CONST_SPELLLEVEL_4); break;
case 118: iProperty = ItemPropertyBonusLevelSpell (IP_CONST_CLASS_WIZARD,IP_CONST_SPELLLEVEL_6); break;
case 119: iProperty =ItemPropertyAttackBonus (3); break;
case 120: iProperty =ItemPropertyImmunityMisc (IP_CONST_IMMUNITYMISC_POISON); break;
case 121: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_SORCERER,IP_CONST_SPELLLEVEL_6); break;
case 122: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_DRUID,IP_CONST_SPELLLEVEL_6); break;
case 123: iProperty = ItemPropertyBonusLevelSpell (IP_CONST_CLASS_CLERIC,IP_CONST_SPELLLEVEL_8); break;
case 124: iProperty =ItemPropertyBonusLevelSpell (IP_CONST_CLASS_CLERIC,IP_CONST_SPELLLEVEL_6); break;
case 125: iProperty =ItemPropertyImprovedEvasion (); break;
case 126: iProperty =ItemPropertyTrueSeeing (); break;
case 127: iProperty =ItemPropertyCastSpell (IP_CONST_CASTSPELL_BOMBARDMENT_20,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); break;
}
return iProperty;
}
void SetRegTokens(int nPattern)
{
// First of all, do our two extra reagents
SetCustomToken(2008,GetName(GetObjectByTag(TagExtraReg1(nPattern))));
SetCustomToken(2009,GetName(GetObjectByTag(TagExtraReg2(nPattern))));
if (nPattern>=REAGENT_VERVAIN)
{
nPattern=nPattern-REAGENT_VERVAIN;
if (nPattern>0)
{
SetCustomToken(2007," vervain,");
}
else
{
SetCustomToken(2007," and vervain.");
}
}
else
{
SetCustomToken(2007,"");
}
if (nPattern>=REAGENT_SUKAKE)
{
nPattern=nPattern-REAGENT_SUKAKE;
if (nPattern>0)
{
SetCustomToken(2006," sukake,");
}
else
{
SetCustomToken(2006," and sukake.");
}
}
else
{
SetCustomToken(2006,"");
}
if (nPattern>=REAGENT_ROSEMAGES)
{
nPattern=nPattern-REAGENT_ROSEMAGES;
if (nPattern>0)
{
SetCustomToken(2005," rose of mages,");
}
else
{
SetCustomToken(2005," and rose of mages.");
}
}
else
{
SetCustomToken(2005,"");
}
if (nPattern>=REAGENT_HYSSOP)
{
nPattern=nPattern-REAGENT_HYSSOP;
if (nPattern>0)
{
SetCustomToken(2004," hyssop,");
}
else
{
SetCustomToken(2004," and hyssop.");
}
}
else
{
SetCustomToken(2004,"");
}
if (nPattern>=REAGENT_FOOLSWEED)
{
nPattern=nPattern-REAGENT_FOOLSWEED;
if (nPattern>0)
{
SetCustomToken(2003," fool's weed,");
}
else
{
SetCustomToken(2003," and fool's weed.");
}
}
else
{
SetCustomToken(2003,"");
}
if (nPattern>=REAGENT_DRYADSTEARS)
{
nPattern=nPattern-REAGENT_DRYADSTEARS;
if (nPattern>0)
{
SetCustomToken(2002," dryad's tears,");
}
else
{
SetCustomToken(2002," and dryad's tears.");
}
}
else
{
SetCustomToken(2002,"");
}
if (nPattern>=REAGENT_CLOTHGOLD)
{
nPattern=nPattern-REAGENT_CLOTHGOLD;
if (nPattern>0)
{
SetCustomToken(2001," cloth of gold,");
}
else
{
SetCustomToken(2001," and cloth of gold.");
}
}
else
{
SetCustomToken(2001,"");
}
}
void LearnPattern(object oUser, string sTag, object oItem)
{
// Sample tag of item jw_pat_gau_000
// gau is gauntlets. clo is boots, belts and cloak
// rin is amulets and rings. arm is armour. wep is weapons
// Get their persistent storage item
object oModule=GetItemPossessedBy(oUser,"jw_crafting_gem");
if (!GetIsObjectValid(oModule))
{
SendMessageToPC(oUser,"You have lost your persistent storage module. Please contact a DM");
return;
}
// The string we use for the technique need not be the same as the
// Actual tag of the technique, because we
// Might add some letters on to the end of the tag to represent
// Additional ingredients
string sTech=GetStringLeft(sTag,14);
// Check to see if the module aready has this local int stored
if (GetLocalInt(oModule,sTag)==TRUE)
{
SendMessageToPC(oUser,"You already know this technique");
CreateItemOnObject(sTag,oUser);
return;
}
// Learn the technique
SetLocalInt(oModule,sTag,TRUE);
// Give the player a message
string sName=GetName(GetObjectByTag(sTag));
FloatingTextStringOnCreature("Learned the technique "+sName,oUser,TRUE);
// Give the player a visual effect
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_HOLY_AID),oUser);
// Make it so that we know they have learned at least one technique of this type
string sType=GetSubString(sTag,7,3);
// Should give us gau, clo, rin, arm or wep or fod
SetLocalInt(oModule,sType,TRUE);
}
int KnowsAnyTechnique(object oPC, int nTechnique)
{
int nReturn=FALSE;
object oModule=GetItemPossessedBy(oPC,"jw_crafting_gem");
if (nTechnique==TECHNIQUE_GAUNTLETS&&GetLocalInt(oModule,"gau")==TRUE)
{
nReturn=TRUE;
}
if (nTechnique==TECHNIQUE_CLOTHING&&GetLocalInt(oModule,"clo")==TRUE)
{
nReturn=TRUE;
}
if (nTechnique==TECHNIQUE_RINGAMULET&&GetLocalInt(oModule,"rin")==TRUE)
{
nReturn=TRUE;
}
if (nTechnique==TECHNIQUE_ARMOUR&&GetLocalInt(oModule,"arm")==TRUE)
{
nReturn=TRUE;
}
if (nTechnique==TECHNIQUE_WEAPON&&GetLocalInt(oModule,"wep")==TRUE)
{
nReturn=TRUE;
}
if (nTechnique==TECHNIQUE_FOOD&&GetLocalInt(oModule,"fod")==TRUE)
{
nReturn=TRUE;
}
return nReturn;
}
int CheckDevice(object oPC, int nDoing)
{
// We need to check whether the PC is close to the relevant device
string sDevice;
object oDevice;
switch (nDoing)
{
case TECHNIQUE_GAUNTLETS: sDevice="jw_gaunt_dev";
break;
case TECHNIQUE_CLOTHING: sDevice="jw_cloth_dev";
break;
case TECHNIQUE_RINGAMULET: sDevice="jw_ring_dev";
break;
case TECHNIQUE_WEAPON: sDevice="jw_weapon_dev";
break;
case TECHNIQUE_ARMOUR: sDevice="jw_arm_dev";
break;
case TECHNIQUE_FOOD: sDevice="jw_fod_dev";
break;
}
oDevice=GetNearestObjectByTag(sDevice,oPC);
if (!GetIsObjectValid(oDevice))
{
return FALSE;
}
float fDistance=GetDistanceBetween(oPC,oDevice);
if (fDistance<0.0)
{
return FALSE;
}
if (fDistance>7.0)
{
return FALSE;
}
return TRUE;
}
string BuildTechName (int nDoing, int nCurrent)
{
string sName;
string sTechStart;
switch (nDoing)
{
case TECHNIQUE_GAUNTLETS: sTechStart="jw_pat_gau_";
break;
case TECHNIQUE_CLOTHING: sTechStart="jw_pat_clo_";
break;
case TECHNIQUE_RINGAMULET: sTechStart="jw_pat_rin_";
break;
case TECHNIQUE_WEAPON: sTechStart="jw_pat_wep_";
break;
case TECHNIQUE_ARMOUR: sTechStart="jw_pat_arm_";
break;
case TECHNIQUE_FOOD: sTechStart="jw_pat_fod_";
break;
}
string sTechEnd=IntToString(nCurrent);
if (GetStringLength(sTechEnd)==1)
{
sTechEnd="00"+sTechEnd;
}
else if (GetStringLength(sTechEnd)==2)
{
sTechEnd="0"+sTechEnd;
}
sName=sTechStart+sTechEnd;
return sName;
}
void BDSetDescription(int nDoing, int nCurrent)
{
SetCustomToken(2013,"description not yet implemented");
}
string TagExtraReg1 (int nPattern)
{
string sReturn;
sReturn="rare1_"+IntToString(nPattern);
object oReg=GetObjectByTag(sReturn);
if (!GetIsObjectValid(oReg))
{
sReturn="";
}
return sReturn;
}
string TagExtraReg2 (int nPattern)
{
string sReturn;
sReturn="rare2_"+IntToString(nPattern);
object oReg=GetObjectByTag(sReturn);
if (!GetIsObjectValid(oReg))
{
sReturn="";
}
return sReturn;
}
void DoEnchantmentGraphics(object oPC, int nDoing)
{
// We need to check whether the PC is close to the relevant device
string sDevice;
int nGlow;
object oDevice;
string sSound;
switch (nDoing)
{
case TECHNIQUE_GAUNTLETS: sDevice="jw_gaunt_dev";
nGlow=VFX_DUR_GLOW_ORANGE;
sSound="sco_mehedevil01";
break;
case TECHNIQUE_CLOTHING: sDevice="jw_cloth_dev";
nGlow=VFX_DUR_GLOW_RED;
sSound="sco_mehanmind02";
break;
case TECHNIQUE_RINGAMULET: sDevice="jw_ring_dev";
nGlow=VFX_DUR_GLOW_WHITE;
sSound="sco_mehedsonc01";
break;
case TECHNIQUE_WEAPON: sDevice="jw_weapon_dev";
nGlow=VFX_DUR_GLOW_PURPLE;
sSound="sco_mebalodd01";
break;
case TECHNIQUE_ARMOUR: sDevice="jw_arm_dev";
nGlow=VFX_DUR_GLOW_YELLOW;
sSound="sco_lgupelec01";
break;
case TECHNIQUE_FOOD: sDevice="jw_fod_dev";
nGlow=VFX_DUR_INFERNO_NO_SOUND; // This tells it to make a flame instead and not to make the PC effect
sSound="al_cv_firecamp1";
break;
}
oDevice=GetNearestObjectByTag(sDevice,oPC);
AssignCommand(oPC,SetFacingPoint(GetPosition(oDevice)));
if (nGlow==VFX_DUR_INFERNO_NO_SOUND)
{
DropFlame(GetLocation(oDevice));
}
else
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(nGlow),oDevice,6.0);
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_POLYMORPH),oPC);
}
AssignCommand(oDevice,PlaySound(sSound));
//ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectBeam(nBeam,oDevice,BODY_NODE_CHEST),oPC,2.0);
}
string GetFoodType (int nPattern)
{
// Default is deer
string sString = "jw_meat_deer";
// lion
if (nPattern==13||nPattern==14||nPattern==19||nPattern==50||nPattern==81||nPattern==82||nPattern==84||
nPattern==53||nPattern==60||nPattern==77||nPattern==86)
{
sString="jw_meat_lion";
}
else
// polar bear
if (nPattern==25||nPattern==28||nPattern==35||nPattern==97||nPattern==23||nPattern==29||nPattern==45||
nPattern==46||nPattern==54||nPattern==83||nPattern==90)
{
sString="jw_meat_polar";
}
else
// deep rothe
if (nPattern==42||nPattern==15||nPattern==27||nPattern==30||nPattern==43||nPattern==75||nPattern==85||
nPattern==89||nPattern==92||nPattern==99||nPattern==101)
{
sString="jw_meat_rothe";
}
else
// desert cougar
if (nPattern==22||nPattern==49||nPattern==88||nPattern==39||nPattern==51||nPattern==57||nPattern==58||
nPattern==78)
{
sString="jw_meat_coug";
}
return sString;
}
int GetMiscClothType (int nPattern)
{
// Default is belt
int nReturn=BASE_ITEM_BELT;
// cloak
if (nPattern==7||nPattern==14||nPattern==21||nPattern==28||nPattern==37||nPattern==41||nPattern==49||
nPattern==15||nPattern==29||nPattern==39||nPattern==51||nPattern==54||nPattern==58||nPattern==75||
nPattern==31||nPattern==59||nPattern==61||nPattern==87||
nPattern==7)
{
nReturn=BASE_ITEM_CLOAK;
}
else
// boots
if (nPattern==11||nPattern==25||nPattern==35||nPattern==38||nPattern==42||nPattern==23||nPattern==45||
nPattern==53||nPattern==57||nPattern==60||nPattern==47||nPattern==62||nPattern==79||nPattern==95)
{
nReturn=BASE_ITEM_BOOTS;
}
return nReturn;
}
void JumpToEnemy(object oEnemy, int nVis=VFX_FNF_SUMMON_UNDEAD)
{
object oTargetVictim = oEnemy;
// * won't jump if closer than 4 meters to victim
if ((GetDistanceToObject(oTargetVictim) > 4.0) && (GetObjectSeen(oTargetVictim) == TRUE))
{
ClearAllActions();
effect eVis = EffectVisualEffect(nVis);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
// SpeakString("Jump to " + GetName(oTargetVictim));
DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF));
DelayCommand(0.3,ActionJumpToObject(oTargetVictim));
DelayCommand(0.5,ActionAttack(oTargetVictim));
}
}
void DeathExplode(int nDamage = 8, int nInitialVFX = VFX_FNF_FIREBALL, int nDamageVFX = VFX_IMP_FLAME_M, int nDamageType = DAMAGE_TYPE_FIRE, int nSaveType= SAVING_THROW_TYPE_FIRE, int nSaveDC = 15, float fRadius = 10.0)
{
//Declare major variables
object oCaster = OBJECT_SELF;
int nMetaMagic = PRCGetMetaMagicFeat();
int nDamageBase=nDamage;
float fDelay;
location llocation = GetLocation(OBJECT_SELF);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(nInitialVFX), llocation);
effect eVis = EffectVisualEffect(nDamageVFX);
effect eDam;
//Get the spell target location as opposed to the spell target.
location lTarget = GetLocation(OBJECT_SELF);
//Limit Caster level for the purposes of damage
//Apply the fireball explosion at the location captured above.
///Declare the spell shape, size and the location. Capture the first target object in the shape.
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, fRadius, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR);
//Cycle through the targets within the spell shape until an invalid object is captured.
while (GetIsObjectValid(oTarget))
{
if(GetIsReactionTypeHostile(oTarget))
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_ICE_STORM));
//Get the distance between the explosion and the target to calculate delay
fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20;
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
nDamage = PRCGetReflexAdjustedDamage(nDamageBase, oTarget, nSaveDC, nSaveType);
//Set the damage effect
eDam = EffectDamage(nDamage, nDamageType);
if(nDamage > 0)
{
// Apply effects to the currently selected target.
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
//This visual effect is applied to the target object not the location as above. This visual effect
//represents the flame that erupts on the target not on the ground.
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
}
}
//Select the next target within the spell shape.
oTarget = GetNextObjectInShape(SHAPE_SPHERE, fRadius, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR);
}
}
void deathcascade(object oTarget)
{
//Declare major variables
int nCasterLevel = 6;
int nDamage = d6(nCasterLevel);
int nDamStrike;
int nNumAffected = 0;
//Declare lightning effect connected the casters hands
effect eLightning = EffectBeam(VFX_BEAM_FIRE, OBJECT_SELF, BODY_NODE_HAND);;
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
effect eDamage;
object oFirstTarget = oTarget;
object oHolder;
object oTarget;
location lSpellLocation;
//Damage the initial target
if(!GetIsReactionTypeFriendly(oFirstTarget,OBJECT_SELF))
{
//Fire cast spell at event for the specified target
SignalEvent(oFirstTarget, EventSpellCastAt(OBJECT_SELF, SPELL_CHAIN_LIGHTNING));
//Make an SR Check
//Adjust damage via Reflex Save or Evasion or Improved Evasion
nDamStrike = PRCGetReflexAdjustedDamage(nDamage, oFirstTarget, 24, SAVING_THROW_TYPE_FIRE);
//Set the damage effect for the first target
eDamage = EffectDamage(nDamStrike, DAMAGE_TYPE_FIRE);
//Apply damage to the first target and the VFX impact.
if(nDamStrike > 0)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,oFirstTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,oFirstTarget);
}
}
//Apply the lightning stream effect to the first target, connecting it with the caster
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eLightning,oFirstTarget,0.5);
//Reinitialize the lightning effect so that it travels from the first target to the next target
eLightning = EffectBeam(VFX_BEAM_FIRE, oFirstTarget, BODY_NODE_CHEST);
//Halve the damage for all secondary targets beyond the first.
// eDamage = EffectDamage(nDamage/2, DAMAGE_TYPE_ELECTRICAL);
float fDelay = 0.2;
int nCnt;
//Get the first target in the spell shape
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oFirstTarget), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
while (GetIsObjectValid(oTarget) && nCnt < nCasterLevel)
{
//Make sure the caster's faction is not hit and the first target is not hit
if (oTarget != oFirstTarget && !GetIsReactionTypeFriendly(oTarget) && oTarget != OBJECT_SELF)
{
//Connect the new lightning stream to the older target and the new target
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eLightning,oTarget,0.5));
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_CHAIN_LIGHTNING));
//Do an SR check
nDamage = d6(nCasterLevel);
//Adjust damage via Reflex Save or Evasion or Improved Evasion
nDamStrike = PRCGetReflexAdjustedDamage(nDamage, oTarget, 24, SAVING_THROW_TYPE_FIRE);
//Apply the damage and VFX impact to the current target
eDamage = EffectDamage(nDamStrike, DAMAGE_TYPE_FIRE);
if(nDamStrike > 0) //age > 0)
{
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,oTarget));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,oTarget));
}
oHolder = oTarget;
//change the currect holder of the lightning stream to the current target
eLightning = EffectBeam(VFX_BEAM_FIRE, oHolder, BODY_NODE_CHEST);
fDelay = fDelay + 0.1f;
}
//Count the number of targets that have been hit.
if(GetObjectType(oTarget) == OBJECT_TYPE_CREATURE)
{
nCnt++;
}
//Get the next target in the shape.
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oFirstTarget), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
}
void DiseaseExplode(int nDisease=DISEASE_SOLDIER_SHAKES)
{
location llocation = GetLocation(OBJECT_SELF);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PULSE_NATURE), llocation);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DISEASE_S), llocation);
object oCaster = OBJECT_SELF;
int nMetaMagic = PRCGetMetaMagicFeat();
int nDamage;
float fDelay;
effect eCon = EffectDisease(nDisease);
effect eTest;
eCon = ExtraordinaryEffect(eCon);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
//effect eDis = EffectVisualEffect(VFX_IMP_DISEASE_S);
effect eLink = EffectLinkEffects(eCon, eDur);
//eLink = EffectLinkEffects(eDis, eDur);
//Get the spell target location as opposed to the spell target.
location lTarget = GetLocation(OBJECT_SELF);
//Limit Caster level for the purposes of damage
//Apply the fireball explosion at the location captured above.
///Declare the spell shape, size and the location. Capture the first target object in the shape.
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR);
//Cycle through the targets within the spell shape until an invalid object is captured.
while (GetIsObjectValid(oTarget))
{
if(GetIsReactionTypeHostile(oTarget))
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(oTarget, SPELL_CONTAGION));
//Get the distance between the explosion and the target to calculate delay
fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20;
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget));
}
//Select the next target within the spell shape.
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR);
}
}
void PoisonExplode(int nPoison=POISON_BLACK_LOTUS_EXTRACT)
{
location llocation = GetLocation(OBJECT_SELF);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PULSE_WIND), llocation);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_POISON_S), llocation);
object oCaster = OBJECT_SELF;
int nMetaMagic = PRCGetMetaMagicFeat();
int nDamage;
float fDelay;
effect eCon = EffectPoison(nPoison);
effect eTest;
eCon = ExtraordinaryEffect(eCon);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
//effect eDis = EffectVisualEffect(VFX_IMP_DISEASE_S);
effect eLink = EffectLinkEffects(eCon, eDur);
//eLink = EffectLinkEffects(eDis, eDur);
//Get the spell target location as opposed to the spell target.
location lTarget = GetLocation(OBJECT_SELF);
//Limit Caster level for the purposes of damage
//Apply the fireball explosion at the location captured above.
///Declare the spell shape, size and the location. Capture the first target object in the shape.
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR);
//Cycle through the targets within the spell shape until an invalid object is captured.
while (GetIsObjectValid(oTarget))
{
if(GetIsReactionTypeHostile(oTarget))
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(oTarget, SPELL_POISON));
//Get the distance between the explosion and the target to calculate delay
fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20;
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget));
}
//Select the next target within the spell shape.
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR);
}
}
void ZapTargets(int nBeam=VFX_BEAM_EVIL, int nDamage = 12, int nDC = 24, int nDamageType=DAMAGE_TYPE_NEGATIVE)
{
effect e = EffectBeam(nBeam, OBJECT_SELF, BODY_NODE_HAND);
effect eDam;
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
int nDamage;
while (GetIsObjectValid(oTarget))
{
if (!GetPlotFlag(oTarget)&&(!GetIsFriend(oTarget)))
{
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_EVIL);
eDam = EffectDamage(nDamage, nDamageType);
if(nDamage > 0 )
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, e, oTarget, 1.0);
}
}
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
}
void SpawnCreature(object oVictim, string sMob="")
{
if (sMob=="")
{
sMob=GetResRef(OBJECT_SELF);
}
if (GetIsDead(oVictim)&&(GetLocalInt(OBJECT_SELF,"spawned")!=2))
{
location lLoc=GetLocation(oVictim);
effect eVis = EffectVisualEffect(VFX_IMP_RAISE_DEAD);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lLoc);
object oSpawn=CreateObject(OBJECT_TYPE_CREATURE,sMob,lLoc,TRUE);
// This makes it an encounter creature
SetLocalInt(oSpawn,"norw",2);
SetLocalInt(OBJECT_SELF,"spawned",2);
}
}
void SetCrafting(object oPC, int nValue)
{
object oBox=GetItemPossessedBy(oPC,"jw_crafting_gem");
SetLocalInt(oBox,"isenchanting",nValue);
}
int GetCrafting(object oPC)
{
object oBox=GetItemPossessedBy(oPC,"jw_crafting_gem");
int nReturn=GetLocalInt(oBox,"isenchanting");
return nReturn;
}
void SetToken2010(object oPC)
{
string sString;
int nDoing=GetCrafting(oPC);
switch (nDoing)
{
case TECHNIQUE_GAUNTLETS: sString="monk's gauntlets";
break;
case TECHNIQUE_CLOTHING: sString="boots, belt or cloak";
break;
case TECHNIQUE_RINGAMULET: sString="ring or amulet";
break;
case TECHNIQUE_WEAPON: sString="weapon";
break;
case TECHNIQUE_ARMOUR: sString="armour";
break;
case TECHNIQUE_FOOD: sString="food";
break;
}
SetCustomToken(2010,sString);
}
void SetToken2016(object oPC)
{
string sString;
int nDoing=GetCrafting(oPC);
switch (nDoing)
{
case TECHNIQUE_GAUNTLETS: sString="gauntlet enchanting rune";
break;
case TECHNIQUE_CLOTHING: sString="boots, belt or cloak enchanting rune";
break;
case TECHNIQUE_RINGAMULET: sString="ring or amulet enchanting rune";
break;
case TECHNIQUE_WEAPON: sString="weapon enchanting rune";
break;
case TECHNIQUE_ARMOUR: sString="armour enchanting rune";
break;
case TECHNIQUE_FOOD: sString="oven or campfire";
break;
}
SetCustomToken(2016,sString);
}
void BonusLevels(int nBonusLevels, int nChance = 50, object oMob=OBJECT_SELF)
{
if (Random(100)+1>nChance)
{
return;
}
int nLevels=Random(nBonusLevels)+1;
int nIdx;
for (nIdx=1;nIdx<=nLevels;nIdx++)
{
LevelUpHenchman(oMob,GetClassByPosition(1,oMob),TRUE);
SendMessageToAllDMs("debug - levelling");
}
}
void WeaponPowerUp(int nLevel, object oMob=OBJECT_SELF)
{
object oWeapon=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oMob);
if (!GetIsObjectValid(oWeapon))
{
return;
}
int nRandom=Random(20)+1;
int nEffect;
// Level 4 power ups
if (nLevel==4)
{
switch (nRandom)
{
case 1: nEffect=121;
break;
case 2: nEffect=122;
break;
case 3: nEffect=124;
break;
case 4: nEffect=63;
break;
case 5: nEffect=111;
break;
case 6: nEffect=119;
break;
case 7: nEffect=123;
break;
case 8: nEffect=125;
break;
case 9: nEffect=126;
break;
case 10: nEffect=127;
break;
case 11: nEffect=31;
break;
case 12: nEffect=59;
break;
case 13: nEffect=61;
break;
case 14: nEffect=62;
break;
case 15: nEffect=79;
break;
case 16: nEffect=87;
break;
case 17: nEffect=91;
break;
case 18: nEffect=93;
break;
case 19: nEffect=94;
break;
case 20: nEffect=103;
break;
}
}
else
// Level 3 power ups
if (nLevel==3)
{
switch (nRandom)
{
case 1: nEffect=108;
break;
case 2: nEffect=113;
break;
case 3: nEffect=114;
break;
case 4: nEffect=115;
break;
case 5: nEffect=116;
break;
case 6: nEffect=31;
break;
case 7: nEffect=59;
break;
case 8: nEffect=61;
break;
case 9: nEffect=62;
break;
case 10: nEffect=79;
break;
case 11: nEffect=87;
break;
case 12: nEffect=91;
break;
case 13: nEffect=93;
break;
case 14: nEffect=94;
break;
case 15: nEffect=103;
break;
case 16: nEffect=107;
break;
case 17: nEffect=109;
break;
case 18: nEffect=110;
break;
case 19: nEffect=117;
break;
case 20: nEffect=118;
break;
}
}
else
// Level 2 power ups
if (nLevel==2)
{
switch (nRandom)
{
case 1: nEffect=100;
break;
case 2: nEffect=15;
break;
case 3: nEffect=23;
break;
case 4: nEffect=27;
break;
case 5: nEffect=29;
break;
case 6: nEffect=39;
break;
case 7: nEffect=43;
break;
case 8: nEffect=51;
break;
case 9: nEffect=53;
break;
case 10: nEffect=54;
break;
case 11: nEffect=57;
break;
case 12: nEffect=58;
break;
case 13: nEffect=89;
break;
case 14: nEffect=90;
break;
case 15: nEffect=92;
break;
case 16: nEffect=99;
break;
case 17: nEffect=101;
break;
case 18: nEffect=102;
break;
case 19: nEffect=105;
break;
case 20: nEffect=106;
break;
}
}
else
// Level 1 power ups
if (nLevel==1)
{
switch (nRandom)
{
case 1: nEffect=7;
break;
case 2: nEffect=11;
break;
case 3: nEffect=13;
break;
case 4: nEffect=14;
break;
case 5: nEffect=21;
break;
case 6: nEffect=22;
break;
case 7: nEffect=28;
break;
case 8: nEffect=35;
break;
case 9: nEffect=37;
break;
case 10: nEffect=38;
break;
case 11: nEffect=41;
break;
case 12: nEffect=73;
break;
case 13: nEffect=74;
break;
case 14: nEffect=76;
break;
case 15: nEffect=81;
break;
case 16: nEffect=82;
break;
case 17: nEffect=84;
break;
case 18: nEffect=88;
break;
case 19: nEffect=97;
break;
case 20: nEffect=98;
break;
}
}
itemproperty iProp=iWeaponProperty (nEffect);
IPSafeAddItemProperty(oWeapon,iProp,3600.0,X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
}
void RepeatingVisual(int nEffect, object oMob=OBJECT_SELF)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(nEffect),oMob);
DelayCommand(0.5,RepeatingVisual(nEffect));
}
void SpawnNewMob(string sMobResRef, int nVFX=VFX_FNF_PWSTUN, int nCopyEffects=FALSE, int nKnockdown=FALSE)
{
location llocation = GetLocation(OBJECT_SELF);
if (nVFX!=0)
{
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(nVFX), llocation);
}
object oNew=CreateObject(OBJECT_TYPE_CREATURE, sMobResRef, llocation, FALSE);
SetLocalInt(oNew,"norw",2);
if (nKnockdown==TRUE)
{
effect eKnockdwn = ExtraordinaryEffect(EffectKnockdown());
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eKnockdwn, oNew, 1.0);
}
if (nCopyEffects==TRUE)
{
effect eEffect=GetFirstEffect(OBJECT_SELF);
while (GetIsEffectValid(eEffect))
{
ApplyEffectToObject(GetEffectDurationType(eEffect),eEffect,oNew,60.0);
eEffect=GetNextEffect(OBJECT_SELF);
}
}
}
void UnequipPlayer(object oPlayer, int nHandsOnly = TRUE)
{
AssignCommand(oPlayer, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_LEFTHAND)));
AssignCommand(oPlayer, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND)));
if (nHandsOnly == FALSE)
{
AssignCommand(oPlayer, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_ARMS, oPlayer)));
AssignCommand(oPlayer, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_ARROWS, oPlayer)));
AssignCommand(oPlayer, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_BELT, oPlayer)));
AssignCommand(oPlayer, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_BOLTS, oPlayer)));
AssignCommand(oPlayer, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_BOOTS, oPlayer)));
AssignCommand(oPlayer, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_BULLETS, oPlayer)));
AssignCommand(oPlayer, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_CHEST, oPlayer)));
AssignCommand(oPlayer, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_CLOAK, oPlayer)));
AssignCommand(oPlayer, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_HEAD, oPlayer)));
AssignCommand(oPlayer, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_LEFTRING, oPlayer)));
AssignCommand(oPlayer, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_NECK, oPlayer)));
AssignCommand(oPlayer, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oPlayer)));
}
}
void SetDeathState(object oRespawner, int nState)
{
object oModule=GetItemPossessedBy(oRespawner,"jw_crafting_gem");
SetLocalInt(oModule,"deathstate",nState);
}
int GetDeathState(object oRespawner)
{
object oModule=GetItemPossessedBy(oRespawner,"jw_crafting_gem");
int nState=GetLocalInt(oModule,"deathstate");
return nState;
}
void SetModuleDeathState(int nState)
{
SetLocalInt(GetModule(),"moduledeathstate",nState);
}
int GetModuleDeathState()
{
int nState=GetLocalInt(GetModule(),"moduledeathstate");
return nState;
}
int GetNumberEnchantments(object oItem)
{
int nReturn=0;
itemproperty iProp=GetFirstItemProperty(oItem);
while (GetIsItemPropertyValid(iProp))
{
nReturn=nReturn+1;
iProp=GetNextItemProperty(oItem);
}
return nReturn;
}
int GetMaxEnchantments(object oItem)
{
int nReturn=0;
string sTag=GetTag(oItem);
// Meat
if (GetStringLeft(sTag,7)=="jw_meat")
{
return 1;
}
//anything but meat must start ccr or ctr to be allowed
if (GetStringLeft(sTag,3)!="ccr"&&GetStringLeft(sTag,3)!="ctr")
{
return 0;
}
// Mithral || weirwood || dire bear hide || worg hide
if (FindSubString(sTag,"ad")!=-1||FindSubString(sTag,"bv")!=-1||FindSubString(sTag,"bj")!=-1||FindSubString(sTag,"bb")!=-1)
{
nReturn=3;
}
else
// Adamantine || cherry || bullet oxe hide || winter wolf hide || diamond
if (FindSubString(sTag,"ac")!=-1||FindSubString(sTag,"bu")!=-1||FindSubString(sTag,"bi")!=-1||FindSubString(sTag,"ba")!=-1||FindSubString(sTag,"by")!=-1)
{
nReturn=2;
}
else
// Lead || cedar || antelope hide || dire wolf hide || ruby
if (FindSubString(sTag,"ab")!=-1||FindSubString(sTag,"bt")!=-1||FindSubString(sTag,"bh")!=-1||FindSubString(sTag,"a0")!=-1||FindSubString(sTag,"bx")!=-1)
{
nReturn=1;
}
return nReturn;
}
object GetCraftingBox(object oPC)
{
object oBox=GetItemPossessedBy(oPC,"jw_crafting_gem");
return oBox;
}
void DecayItems()
{
object oItem;
object oStrip;
int nDecay;
int nIdx;
object oPC=GetFirstPC();
while (GetIsObjectValid(oPC))
{
if (!GetIsDM(oPC))
{
for (nIdx=0;nIdx<=18;nIdx++)
{
oItem=GetItemInSlot(nIdx,oPC);
if (GetIsDecayable(oItem))
{
nDecay=GetLocalInt(oItem,"decay");
if (nDecay<100)
{
nDecay=nDecay+1;
SetLocalInt(oItem,"decay",nDecay);
}
else
{
SendMessageToPC(oPC,"Your "+GetName(oItem)+" is worn out");
DestroyObject(oItem);
}
}
}
oItem=GetFirstItemInInventory(oPC);
while (GetIsObjectValid(oItem))
{
oStrip=oItem;
if (GetIsDecayable(oStrip))
{
nDecay=GetLocalInt(oStrip,"decay");
if (nDecay<100)
{
nDecay=nDecay+1;
SetLocalInt(oStrip,"decay",nDecay);
}
else
{
SendMessageToPC(oPC,"Your "+GetName(oStrip)+" is worn out");
DestroyObject(oStrip);
}
}
oItem=GetNextItemInInventory(oPC);
}
}
oPC=GetNextPC();
}
}
int GetIsDecayable(object oItem)
{
itemproperty iProperty=GetFirstItemProperty(oItem);
if (!GetIsItemPropertyValid(iProperty))
{
return FALSE;
}
if (GetPlotFlag(oItem)==TRUE)
{
return FALSE;
}
int nBase=GetBaseItemType(oItem);
if (nBase==BASE_ITEM_AMULET||nBase==BASE_ITEM_ARMOR||nBase==BASE_ITEM_BELT||nBase==BASE_ITEM_BOOTS||
nBase==BASE_ITEM_BRACER||nBase==BASE_ITEM_CLOAK||nBase==BASE_ITEM_GLOVES||nBase==BASE_ITEM_RING)
{
return TRUE;
}
if (IPGetIsMeleeWeapon(oItem))
{
return TRUE;
}
if (IPGetIsRangedWeapon(oItem))
{
return TRUE;
}
return FALSE;
}