#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; }