HoS_PRC8/_mod/_module/nss/unique_dragon_t.nss
Jaysyn904 04165202c0 Initial upload
Initial upload
2024-11-25 19:36:07 -05:00

530 lines
30 KiB
Plaintext

////////////////////////////////////////////////////////////////////////////////
// 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));
}