//////////////////////////////////////////////////////////////////////////////// // Unique Dragon Isle Treasure //////////////////////////////////////////////////////////////////////////////// #include "x2_inc_itemprop" object fnBaseItem(string sRes,object oLocation) { // create base item and set it to plot and proper tag object oItem=CreateObject(OBJECT_TYPE_ITEM,sRes,GetLocation(oLocation),FALSE,"rts_it_magic"); SetPlotFlag(oItem,TRUE); return oItem; } // fnBaseItem() itemproperty fnWeaponProperty(int nType=0) { // type 0=common,1=uncommon,2=rare itemproperty iRet; int nR=d20(); int nN; if (nType==0) { // common if (nR<6) iRet=ItemPropertyAttackBonus(1); else if (nR<9) iRet=ItemPropertyAttackBonus(2); else if (nR<11) iRet=ItemPropertyAttackBonus(3); else if (nR==11) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEBONUS_1); else if (nR==12) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_BLUDGEONING,IP_CONST_DAMAGEBONUS_1); else if (nR==13) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_1); else if (nR==14) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1); else if (nR==15) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_1); else if (nR==16) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1); else if (nR==17) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_NEGATIVE,IP_CONST_DAMAGEBONUS_1); else if (nR==18) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_PIERCING,IP_CONST_DAMAGEBONUS_1); else if (nR==19) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_POSITIVE,IP_CONST_DAMAGEBONUS_1); else if (nR==20) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_1); } // common else if (nType==1) { // uncommon if (nR==1) iRet=ItemPropertyOnMonsterHitProperties(IP_CONST_ONHIT_WOUNDING,1); else if (nR==2) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEBONUS_1d4); else if (nR==3) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_BLUDGEONING,IP_CONST_DAMAGEBONUS_1d4); else if (nR==4) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_1d4); else if (nR==5) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4); else if (nR==6) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_1d4); else if (nR==7) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d4); else if (nR==8) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_NEGATIVE,IP_CONST_DAMAGEBONUS_1d4); else if (nR==9) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_PIERCING,IP_CONST_DAMAGEBONUS_1d4); else if (nR==10) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_POSITIVE,IP_CONST_DAMAGEBONUS_1d4); else if (nR==11) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEBONUS_1d4); else if (nR==12) iRet=ItemPropertyOnMonsterHitProperties(IP_CONST_ONHIT_DISEASE,DISEASE_SHAKES); else if (nR==13) iRet=ItemPropertyOnMonsterHitProperties(IP_CONST_ONHIT_ITEMPOISON,POISON_BLACK_ADDER_VENOM); else if (nR==14) iRet=ItemPropertyOnMonsterHitProperties(IP_CONST_ONHIT_SLOW); else if (nR==15) iRet=ItemPropertyOnMonsterHitProperties(IP_CONST_ONHIT_STUN); else if (nR==16) iRet=ItemPropertyOnMonsterHitProperties(IP_CONST_ONHIT_FEAR); else if (nR==17) iRet=ItemPropertyOnMonsterHitProperties(IP_CONST_ONHIT_DAZE); else if (nR>17) { // bonus vs. nR=d20(); if (nR==1) iRet=ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_ABERRATION,4); else if (nR==2) iRet=ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_ANIMAL,4); else if (nR==3) iRet=ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_BEAST,4); else if (nR==4) iRet=ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_CONSTRUCT,4); else if (nR==5) iRet=ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_DRAGON,4); else if (nR==6) iRet=ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_DWARF,4); else if (nR==7) iRet=ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_ELEMENTAL,4); else if (nR==8) iRet=ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_ELF,4); else if (nR==9) iRet=ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_FEY,4); else if (nR==10) iRet=ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_GIANT,4); else if (nR==11) iRet=ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_HUMAN,4); else if (nR==12) iRet=ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_HUMANOID_GOBLINOID,4); else if (nR==13) iRet=ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_HUMANOID_MONSTROUS,4); else if (nR==14) iRet=ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_HUMANOID_ORC,4); else if (nR==15) iRet=ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_HUMANOID_REPTILIAN,4); else if (nR==16) iRet=ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_MAGICAL_BEAST,4); else if (nR==17) iRet=ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_OUTSIDER,4); else if (nR==18) iRet=ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_SHAPECHANGER,4); else if (nR==19) iRet=ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD,4); else if (nR==20) iRet=ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_VERMIN,4); } // bonus vs. } // uncommon else if (nType==2) { // rare if (nR==1)iRet=ItemPropertyACBonusVsAlign(IP_CONST_ALIGNMENTGROUP_CHAOTIC,2); else if (nR==2)iRet=ItemPropertyACBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,2); else if (nR==3)iRet=ItemPropertyACBonusVsAlign(IP_CONST_ALIGNMENTGROUP_GOOD,2); else if (nR==4)iRet=ItemPropertyACBonusVsAlign(IP_CONST_ALIGNMENTGROUP_LAWFUL,2); else if (nR==5)iRet=ItemPropertyACBonusVsAlign(IP_CONST_ALIGNMENTGROUP_NEUTRAL,2); else if (nR==6)iRet=ItemPropertyAttackBonusVsAlign(IP_CONST_ALIGNMENTGROUP_CHAOTIC,5); else if (nR==7)iRet=ItemPropertyAttackBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,5); else if (nR==8)iRet=ItemPropertyAttackBonusVsAlign(IP_CONST_ALIGNMENTGROUP_GOOD,5); else if (nR==9)iRet=ItemPropertyAttackBonusVsAlign(IP_CONST_ALIGNMENTGROUP_LAWFUL,5); else if (nR==10)iRet=ItemPropertyAttackBonusVsAlign(IP_CONST_ALIGNMENTGROUP_NEUTRAL,5); else if (nR==11)iRet=ItemPropertyOnMonsterHitProperties(IP_CONST_ONHIT_WOUNDING,3); else if (nR==12) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEBONUS_2d4); else if (nR==13) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_2d4); else if (nR==14) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_2d4); else if (nR==15) iRet=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_2d4); else if (nR==16) iRet=ItemPropertyVampiricRegeneration(3); else if (nR==17) iRet=ItemPropertyVampiricRegeneration(4); else if (nR==18) iRet=ItemPropertyVampiricRegeneration(5); else if (nR==19) iRet=ItemPropertyMassiveCritical(IP_CONST_DAMAGEBONUS_2d8); else if (nR==20) iRet=ItemPropertySkillBonus(SKILL_TUMBLE,10); } // rare return iRet; } // fnWeaponProperty() itemproperty fnHelmetProperty(int nType=0) { // type 0=common,1=uncommon,2=rare itemproperty iRet; int nR=d20(); int nN; if (nType==0) { // common if (nR==1) iRet=ItemPropertySkillBonus(SKILL_TUMBLE,2); else if (nR==2) iRet=ItemPropertySkillBonus(SKILL_ANIMAL_EMPATHY,2); else if (nR==3) iRet=ItemPropertySkillBonus(SKILL_APPRAISE,2); else if (nR==4) iRet=ItemPropertySkillBonus(SKILL_CONCENTRATION,2); else if (nR==5) iRet=ItemPropertySkillBonus(SKILL_DISCIPLINE,2); else if (nR==6) iRet=ItemPropertySkillBonus(SKILL_HEAL,2); else if (nR==7) iRet=ItemPropertySkillBonus(SKILL_HIDE,2); else if (nR==8) iRet=ItemPropertySkillBonus(SKILL_LISTEN,2); else if (nR==9) iRet=ItemPropertySkillBonus(SKILL_LORE,2); else if (nR==10) iRet=ItemPropertySkillBonus(SKILL_MOVE_SILENTLY,2); else if (nR==11) iRet=ItemPropertySkillBonus(SKILL_PARRY,2); else if (nR==12) iRet=ItemPropertySkillBonus(SKILL_SEARCH,2); else if (nR==13) iRet=ItemPropertySkillBonus(SKILL_SPELLCRAFT,2); else if (nR==14) iRet=ItemPropertySkillBonus(SKILL_SPOT,2); else if (nR==15) iRet=ItemPropertySkillBonus(SKILL_INTIMIDATE,3); else if (nR>15) iRet=ItemPropertyDarkvision(); } // common else if (nType==1) { // uncommon if (nR<11) iRet=ItemPropertyACBonus(1); else if (nR==11) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_CHA,1); else if (nR==12) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_CON,1); else if (nR==13) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_DEX,1); else if (nR==14) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_INT,1); else if (nR==15) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_STR,1); else if (nR==16) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_WIS,1); else if (nR==17) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_CURE_LIGHT_WOUNDS_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==18) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_BARKSKIN_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==19) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_INFLICT_LIGHT_WOUNDS_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==20) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_LIGHT_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); } // uncommon else if (nType==2) { // rare if (nR==1) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_ANIMATE_DEAD_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==2) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_BESTOW_CURSE_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==3) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_BULLS_STRENGTH_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==4) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_CALL_LIGHTNING_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==5) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_CHARM_PERSON_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==6) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_CLAIRAUDIENCE_CLAIRVOYANCE_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==7) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_CONTINUAL_FLAME_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==8) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_CURE_SERIOUS_WOUNDS_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==9) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_DISPEL_MAGIC_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==10) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_DRAGON_BREATH_COLD_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==11) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_DRAGON_BREATH_FIRE_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==12) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_ELEMENTAL_SHIELD_12,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==13) iRet=ItemPropertyTrueSeeing(); else if (nR==14) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_FREEDOM_OF_MOVEMENT_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==15) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_GLOBE_OF_INVULNERABILITY_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==16) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_INVISIBILITY_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==17) iRet=ItemPropertyRegeneration(1); else if (nR==18) iRet=ItemPropertyBonusFeat(IP_CONST_FEAT_ALERTNESS); else if (nR==19) iRet=ItemPropertyBonusFeat(IP_CONST_FEAT_EXTRA_TURNING); else if (nR==20) iRet=ItemPropertyBonusFeat(IP_CONST_FEAT_DODGE); } // rare return iRet; } // fnHelmetProperty() itemproperty fnShieldProperty(int nType=0) { // type 0=common,1=uncommon,2=rare itemproperty iRet; int nR=d20(); int nN; if (nType==0) { // common if (nR<11) iRet=ItemPropertyACBonus(1); else if (nR<19) iRet=ItemPropertyLight(IP_CONST_LIGHTBRIGHTNESS_LOW,IP_CONST_LIGHTCOLOR_WHITE); else { iRet=ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_NEGATIVE,5); } } // common else if (nType==1) { // uncommon if (nR<11) iRet=ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,IP_CONST_DAMAGESOAK_5_HP); else if (nR==11) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_CHA,1); else if (nR==12) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_CON,1); else if (nR==13) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_DEX,1); else if (nR==14) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_INT,1); else if (nR==15) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_STR,1); else if (nR==16) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_WIS,1); else if (nR==17) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_CURE_LIGHT_WOUNDS_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==18) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_BARKSKIN_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==19) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_INFLICT_LIGHT_WOUNDS_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==20) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_LIGHT_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); } // uncommon else if (nType==2) { // rare if (nR==1) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_ANIMATE_DEAD_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==2) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_BESTOW_CURSE_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==3) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_BULLS_STRENGTH_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==4) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_CALL_LIGHTNING_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==5) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_CHARM_PERSON_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==6) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_CLAIRAUDIENCE_CLAIRVOYANCE_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==7) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_CONTINUAL_FLAME_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==8) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_CURE_SERIOUS_WOUNDS_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==9) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_DISPEL_MAGIC_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==10) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_DRAGON_BREATH_COLD_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==11) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_DRAGON_BREATH_FIRE_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==12) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_ELEMENTAL_SHIELD_12,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==13) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_EVARDS_BLACK_TENTACLES_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==14) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_FREEDOM_OF_MOVEMENT_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==15) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_GLOBE_OF_INVULNERABILITY_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==16) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_INVISIBILITY_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==17) iRet=ItemPropertyRegeneration(1); else if (nR==18) iRet=ItemPropertyBonusFeat(IP_CONST_FEAT_ALERTNESS); else if (nR==19) iRet=ItemPropertyBonusFeat(IP_CONST_FEAT_EXTRA_TURNING); else if (nR==20) iRet=ItemPropertyBonusFeat(IP_CONST_FEAT_DODGE); } // rare return iRet; } // fnWeaponProperty() itemproperty fnArmorProperty(int nType=0) { // type 0=common,1=uncommon,2=rare itemproperty iRet; int nR=d20(); int nN; if (nType==0) { // common if (nR<10) iRet=ItemPropertyACBonus(1); else if (nR==10) iRet=ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_NEGATIVE,5); else if (nR==11) iRet=ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ACID,5); else if (nR==12) iRet=ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_BLUDGEONING,5); else if (nR==13) iRet=ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD,5); else if (nR==14) iRet=ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_DIVINE,5); else if (nR==15) iRet=ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ELECTRICAL,5); else if (nR==16) iRet=ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_FIRE,5); else if (nR==17) iRet=ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_PIERCING,5); else if (nR==18) iRet=ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_POSITIVE,5); else if (nR==19) iRet=ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SLASHING,5); else if (nR==20) iRet=ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SONIC,5); } // common else if (nType==1) { // uncommon if (nR<11) iRet=ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,IP_CONST_DAMAGESOAK_5_HP); else if (nR==11) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_CHA,1); else if (nR==12) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_CON,1); else if (nR==13) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_DEX,1); else if (nR==14) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_INT,1); else if (nR==15) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_STR,1); else if (nR==16) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_WIS,1); else if (nR==17) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_CURE_LIGHT_WOUNDS_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==18) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_BARKSKIN_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==19) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_INFLICT_LIGHT_WOUNDS_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==20) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_LIGHT_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); } // uncommon else if (nType==2) { // rare if (nR==1) iRet=ItemPropertyRegeneration(1); else if (nR==2) iRet=ItemPropertyTrueSeeing(); else if (nR==3) iRet=ItemPropertyWeightReduction(IP_CONST_WEIGHTINCREASE_10_LBS); else if (nR==4) iRet=ItemPropertyWeightReduction(IP_CONST_WEIGHTINCREASE_15_LBS); else if (nR==5) iRet=ItemPropertyWeightReduction(IP_CONST_WEIGHTINCREASE_30_LBS); else if (nR==6) iRet=ItemPropertyWeightReduction(IP_CONST_WEIGHTINCREASE_50_LBS); else if (nR==7) iRet=ItemPropertyWeightReduction(IP_CONST_WEIGHTINCREASE_100_LBS); else if (nR==8) iRet=ItemPropertyHaste(); else if (nR==9) iRet=ItemPropertyImprovedEvasion(); else if (nR==10) iRet=ItemPropertyFreeAction(); else if (nR==11) iRet=ItemPropertyDarkvision(); else if (nR==12) iRet=ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1,IP_CONST_DAMAGESOAK_5_HP); else if (nR==13) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_CHA,2); else if (nR==14) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_CON,2); else if (nR==15) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_DEX,2); else if (nR==16) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_INT,2); else if (nR==17) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_STR,2); else if (nR==18) iRet=ItemPropertyAbilityBonus(IP_CONST_ABILITY_WIS,2); else if (nR==19) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_CURE_SERIOUS_WOUNDS_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==20) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_BULLS_STRENGTH_10,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); } // rare return iRet; } // fnArmorProperty() itemproperty fnMiscProperty(int nType=0) { // type 0=common,1=uncommon,2=rare itemproperty iRet; int nR=d20(); int nN; if (nType==0) { // common if (nR==1) iRet=ItemPropertySkillBonus(SKILL_TUMBLE,2); else if (nR==2) iRet=ItemPropertySkillBonus(SKILL_ANIMAL_EMPATHY,2); else if (nR==3) iRet=ItemPropertySkillBonus(SKILL_APPRAISE,2); else if (nR==4) iRet=ItemPropertySkillBonus(SKILL_CONCENTRATION,2); else if (nR==5) iRet=ItemPropertySkillBonus(SKILL_DISCIPLINE,2); else if (nR==6) iRet=ItemPropertySkillBonus(SKILL_HEAL,2); else if (nR==7) iRet=ItemPropertySkillBonus(SKILL_HIDE,2); else if (nR==8) iRet=ItemPropertySkillBonus(SKILL_LISTEN,2); else if (nR==9) iRet=ItemPropertySkillBonus(SKILL_LORE,2); else if (nR==10) iRet=ItemPropertySkillBonus(SKILL_MOVE_SILENTLY,2); else if (nR==11) iRet=ItemPropertySkillBonus(SKILL_PARRY,2); else if (nR==12) iRet=ItemPropertySkillBonus(SKILL_SEARCH,2); else if (nR==13) iRet=ItemPropertySkillBonus(SKILL_SPELLCRAFT,2); else if (nR==14) iRet=ItemPropertySkillBonus(SKILL_SPOT,2); else if (nR==15) iRet=ItemPropertySkillBonus(SKILL_INTIMIDATE,2); else if (nR==16) iRet=ItemPropertySkillBonus(SKILL_BLUFF,2); else if (nR==17) iRet=ItemPropertySkillBonus(SKILL_PERFORM,2); else if (nR==18) iRet=ItemPropertySkillBonus(SKILL_PERSUADE,2); else if (nR==19) iRet=ItemPropertyBonusFeat(IP_CONST_FEAT_EXTRA_TURNING); else if (nR==20) iRet=ItemPropertyBonusFeat(IP_CONST_FEAT_COMBAT_CASTING); } // common else if (nType==1) { // uncommon if (nR==1) iRet=ItemPropertySkillBonus(SKILL_TUMBLE,4); else if (nR==2) iRet=ItemPropertySkillBonus(SKILL_ANIMAL_EMPATHY,4); else if (nR==3) iRet=ItemPropertySkillBonus(SKILL_APPRAISE,4); else if (nR==4) iRet=ItemPropertySkillBonus(SKILL_CONCENTRATION,4); else if (nR==5) iRet=ItemPropertySkillBonus(SKILL_DISCIPLINE,4); else if (nR==6) iRet=ItemPropertySkillBonus(SKILL_HEAL,4); else if (nR==7) iRet=ItemPropertySkillBonus(SKILL_HIDE,4); else if (nR==8) iRet=ItemPropertySkillBonus(SKILL_LISTEN,4); else if (nR==9) iRet=ItemPropertySkillBonus(SKILL_LORE,4); else if (nR==10) iRet=ItemPropertySkillBonus(SKILL_MOVE_SILENTLY,4); else if (nR==11) iRet=ItemPropertySkillBonus(SKILL_PARRY,4); else if (nR==12) iRet=ItemPropertySkillBonus(SKILL_SEARCH,4); else if (nR==13) iRet=ItemPropertySkillBonus(SKILL_SPELLCRAFT,4); else if (nR==14) iRet=ItemPropertySkillBonus(SKILL_SPOT,4); else if (nR==15) iRet=ItemPropertySkillBonus(SKILL_INTIMIDATE,4); else if (nR==16) iRet=ItemPropertySkillBonus(SKILL_BLUFF,4); else if (nR==17) iRet=ItemPropertySkillBonus(SKILL_PERFORM,4); else if (nR==18) iRet=ItemPropertySkillBonus(SKILL_PERSUADE,4); else if (nR==19) iRet=ItemPropertyDarkvision(); else if (nR==20) iRet=ItemPropertyLight(IP_CONST_LIGHTBRIGHTNESS_NORMAL,IP_CONST_LIGHTCOLOR_PURPLE); } // uncommon else if (nType==2) { // rare if (nR==1) iRet=ItemPropertyTrueSeeing(); else if (nR==2) iRet=ItemPropertyRegeneration(1); else if (nR==3) iRet=ItemPropertyHaste(); else if (nR==4) iRet=ItemPropertyFreeAction(); else if (nR==5) iRet=ItemPropertyDamageImmunity(IP_CONST_DAMAGETYPE_ACID,IP_CONST_DAMAGEIMMUNITY_50_PERCENT); else if (nR==6) iRet=ItemPropertyDamageImmunity(IP_CONST_DAMAGETYPE_BLUDGEONING,IP_CONST_DAMAGEIMMUNITY_50_PERCENT); else if (nR==7) iRet=ItemPropertyDamageImmunity(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEIMMUNITY_50_PERCENT); else if (nR==8) iRet=ItemPropertyDamageImmunity(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEIMMUNITY_50_PERCENT); else if (nR==9) iRet=ItemPropertyDamageImmunity(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEIMMUNITY_50_PERCENT); else if (nR==10) iRet=ItemPropertyDamageImmunity(IP_CONST_DAMAGETYPE_PIERCING,IP_CONST_DAMAGEIMMUNITY_50_PERCENT); else if (nR==11) iRet=ItemPropertyDamageImmunity(IP_CONST_DAMAGETYPE_SLASHING,IP_CONST_DAMAGEIMMUNITY_50_PERCENT); else if (nR==12) iRet=ItemPropertyDamageImmunity(IP_CONST_DAMAGETYPE_SONIC,IP_CONST_DAMAGEIMMUNITY_50_PERCENT); else if (nR==13) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_SUNBEAM_13,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==14) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_SPIKE_GROWTH_9,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==15) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_BIGBYS_GRASPING_HAND_17,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==16) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_BIGBYS_INTERPOSING_HAND_15,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==17) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_STONESKIN_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==18) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_CONTROL_UNDEAD_13,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==19) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_CREATE_UNDEAD_11,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); else if (nR==20) iRet=ItemPropertyCastSpell(IP_CONST_CASTSPELL_STONE_TO_FLESH_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY); } // rare return iRet; } // fnMiscProperty() object fnUniqueItem(object oAt,int nRare=0,int nUncommon=1,int nCommon=0) { object oItem; itemproperty iP; int nR; int nN; int nL; nR=d100(); if (nR<31) { // weapon magic item nR=Random(22)+1; if (nR==1) oItem=fnBaseItem("nw_waxbt001",oAt); else if (nR==2) oItem=fnBaseItem("nw_waxgr001",oAt); else if (nR==3) oItem=fnBaseItem("nw_wswbs001",oAt); else if (nR==4) oItem=fnBaseItem("nw_wswdg001",oAt); else if (nR==5) oItem=fnBaseItem("nw_wswgs001",oAt); else if (nR==6) oItem=fnBaseItem("nw_wswls001",oAt); else if (nR==7) oItem=fnBaseItem("nw_wswss001",oAt); else if (nR==8) oItem=fnBaseItem("nw_wswka001",oAt); else if (nR==9) oItem=fnBaseItem("nw_wswsc001",oAt); else if (nR==10) oItem=fnBaseItem("nw_wblcl001",oAt); else if (nR==11) oItem=fnBaseItem("nw_wblfh001",oAt); else if (nR==12) oItem=fnBaseItem("nw_wblfl001",oAt); else if (nR==13) oItem=fnBaseItem("nw_wblhl001",oAt); else if (nR==14) oItem=fnBaseItem("nw_wblhw001",oAt); else if (nR==15) oItem=fnBaseItem("nw_wblml001",oAt); else if (nR==16) oItem=fnBaseItem("nw_wblms001",oAt); else if (nR==17) oItem=fnBaseItem("nw_wdbqs001",oAt); else if (nR==18) oItem=fnBaseItem("nw_wspka001",oAt); else if (nR==19) oItem=fnBaseItem("nw_wspku001",oAt); else if (nR==20) oItem=fnBaseItem("x2_it_wpwhip",oAt); else if (nR==21) oItem=fnBaseItem("x2_wdwraxe001",oAt); else if (nR==22) oItem=fnBaseItem("nw_wplhb001",oAt); nL=1; while(nL<=nRare) { // rare properties IPSafeAddItemProperty(oItem,fnWeaponProperty(2)); nL++; } // rare properties nL=1; while(nL<=nUncommon) { // uncommon properties IPSafeAddItemProperty(oItem,fnWeaponProperty(1)); nL++; } // uncommon properties nL=1; while(nL<=nCommon) { // common properties IPSafeAddItemProperty(oItem,fnWeaponProperty(0)); nL++; } // common properties } // weapon magic item else if (nR<41) { // helmet magic item nR=Random(3)+1; if (nR==1) oItem=fnBaseItem("nw_arhe004",oAt); else if (nR==2) oItem=fnBaseItem("x2_it_arhelm01",oAt); else if (nR==3) oItem=fnBaseItem("nw_arhe002",oAt); nL=1; while(nL<=nRare) { // rare properties IPSafeAddItemProperty(oItem,fnHelmetProperty(2)); nL++; } // rare properties nL=1; while(nL<=nUncommon) { // uncommon properties IPSafeAddItemProperty(oItem,fnHelmetProperty(1)); nL++; } // uncommon properties nL=1; while(nL<=nCommon) { // common properties IPSafeAddItemProperty(oItem,fnHelmetProperty(0)); nL++; } // common properties } // helmet magic item else if (nR<56) { // shield magic item nR=Random(3)+1; if (nR==1) oItem=fnBaseItem("nw_ashsw001",oAt); else if (nR==2) oItem=fnBaseItem("nw_ashlw001",oAt); else if (nR==3) oItem=fnBaseItem("nw_ashto001",oAt); nL=1; while(nL<=nRare) { // rare properties IPSafeAddItemProperty(oItem,fnShieldProperty(2)); nL++; } // rare properties nL=1; while(nL<=nUncommon) { // uncommon properties IPSafeAddItemProperty(oItem,fnShieldProperty(1)); nL++; } // uncommon properties nL=1; while(nL<=nCommon) { // common properties IPSafeAddItemProperty(oItem,fnShieldProperty(0)); nL++; } // common properties } // shield magic item else if (nR<81) { // armor magic item nR=Random(17)+1; if (nR==1) oItem=fnBaseItem("nw_aarcl001",oAt); else if (nR==2) oItem=fnBaseItem("nw_aarcl009",oAt); else if (nR==3) oItem=fnBaseItem("nw_aarcl002",oAt); else if (nR==4) oItem=fnBaseItem("nw_aarcl012",oAt); else if (nR==5) oItem=fnBaseItem("nw_aarcl010",oAt); else if (nR==6) oItem=fnBaseItem("nw_aarcl004",oAt); else if (nR==7) oItem=fnBaseItem("nw_aarcl008",oAt); else if (nR==8) oItem=fnBaseItem("nw_aarcl003",oAt); else if (nR==9) oItem=fnBaseItem("nw_aarcl011",oAt); else if (nR==10) oItem=fnBaseItem("nw_aarcl007",oAt); else if (nR==11) oItem=fnBaseItem("nw_aarcl006",oAt); else if (nR==12) oItem=fnBaseItem("nw_aarcl005",oAt); else if (nR==13) oItem=fnBaseItem("x2_cloth008",oAt); else if (nR==14) oItem=fnBaseItem("nw_cloth020",oAt); nL=1; while(nL<=nRare) { // rare properties IPSafeAddItemProperty(oItem,fnArmorProperty(2)); nL++; } // rare properties nL=1; while(nL<=nUncommon) { // uncommon properties IPSafeAddItemProperty(oItem,fnArmorProperty(1)); nL++; } // uncommon properties nL=1; while(nL<=nCommon) { // common properties IPSafeAddItemProperty(oItem,fnArmorProperty(0)); nL++; } // common properties } // armor magic item else { // ring, necklace, gloves, belt, or cloak nR=Random(6)+1; if (nR==1) oItem=fnBaseItem("belt",oAt); else if (nR==2) oItem=fnBaseItem("boots",oAt); else if (nR==3) oItem=fnBaseItem("fb1_cloak",oAt); else if (nR==4) oItem=fnBaseItem("gauntlets",oAt); else if (nR==5) oItem=fnBaseItem("amulet",oAt); else if (nR==6) oItem=fnBaseItem("ring",oAt); nL=1; while(nL<=nRare) { // rare properties IPSafeAddItemProperty(oItem,fnMiscProperty(2)); nL++; } // rare properties nL=1; while(nL<=nUncommon) { // uncommon properties IPSafeAddItemProperty(oItem,fnMiscProperty(1)); nL++; } // uncommon properties nL=1; while(nL<=nCommon) { // common properties IPSafeAddItemProperty(oItem,fnMiscProperty(0)); nL++; } // common properties } // ring, necklace, gloves, belt, or cloak return oItem; } // fnUniqueItem() void main() { object oAt=GetWaypointByTag("DRAGON_TREASURE2"); object oItem=fnUniqueItem(oAt,1,Random(3),Random(4)); }