3385 lines
98 KiB
Plaintext
3385 lines
98 KiB
Plaintext
#include "en5_misc"
|
|
#include "en5_w_a_check"
|
|
#include "en5_weapons"
|
|
#include "prc_x2_itemprop"
|
|
|
|
void GetMagicItem(object oCreature, int iItemLevel=0, int iSpecificItemType=0, object oPC=OBJECT_SELF);
|
|
string GetArms(object oPC,int iItemLevel=1);
|
|
string GetBelt(object oPC,int iItemLevel=1);
|
|
string GetBoots(object oPC,int iItemLevel=1);
|
|
string GetCloak(object oPC,int iItemLevel=1);
|
|
string GetNeck(object oPC,int iItemLevel=1);
|
|
string GetRing(object oPC,int iItemLevel=1);
|
|
string GetHead(object oPC,int iItemLevel=1);
|
|
string GetArmor(object oPC,int iItemLevel=1);
|
|
string GetLightArmor(object oPC,int iItemLevel=1);
|
|
string GetMediumArmor(object oPC,int iItemLevel=1);
|
|
string GetHeavyArmor(object oPC,int iItemLevel=1);
|
|
string GetMonkArmor(object oPC,int iItemLevel=1);
|
|
string GetRobes(object oPC,int iItemLevel=1);
|
|
string GetShield(object oPC,int iItemLevel=1);
|
|
string GetMiscMagic(object oPC,int iItemLevel=1);
|
|
void GetRandomMagic(object oCreature,int iItemLevel=1, int iType=0,object oPC=OBJECT_SELF);
|
|
int GetEnchantBonus(int iEnchant);
|
|
itemproperty WeaponProperty(int iEnchant, object oItem);
|
|
itemproperty ArmorProperty(int iEnchant, object oItem);
|
|
itemproperty MiscProperty(int iEnchant, object oItem);
|
|
int DamageType();
|
|
int DamageBonus();
|
|
int CastSpellUses();
|
|
itemproperty GetCastSpell(int iItemLevel);
|
|
int GetUnlimitedEnchantBonus(int iEnchant);
|
|
int CheckPossibleBrawler(object oPC);
|
|
void SetDBName(object oItem,int iX);
|
|
void SetPostName(object oItem,string sName);
|
|
void SetPreName(object oItem,string sName,string sAltName);
|
|
string Trim(string sString);
|
|
itemproperty ArtifactProperty();
|
|
void GetArtifact(object oCreature);
|
|
string SetTagName(string sItemName);
|
|
|
|
void GetMagicItem(object oCreature, int iItemLevel=0, int iSpecificItemType=0, object oPC=OBJECT_SELF)
|
|
{
|
|
object oItem;
|
|
int iSlot;
|
|
int iRandom;
|
|
int iRandom2;
|
|
int iLevel;
|
|
string sTag;
|
|
|
|
if (!(GetObjectType(oPC) == OBJECT_TYPE_CREATURE))
|
|
if (GetObjectType(oCreature) == OBJECT_TYPE_CREATURE)
|
|
oPC=oCreature;
|
|
else
|
|
oPC = GetRandomPC();
|
|
|
|
if (iItemLevel==0)
|
|
{
|
|
iLevel = GetHitDice(oPC);
|
|
iItemLevel = GetItemLevel(iLevel);
|
|
}
|
|
|
|
iRandom=Random(50);
|
|
if (iRandom == 0)
|
|
iItemLevel--;
|
|
if (iRandom == 1)
|
|
iItemLevel++;
|
|
|
|
if (iItemLevel<1)
|
|
iItemLevel==1;
|
|
|
|
if (iItemLevel>6)
|
|
iItemLevel==6;
|
|
|
|
iRandom = Random(5)+1;
|
|
|
|
if (iSpecificItemType>0)
|
|
iRandom = iSpecificItemType;
|
|
|
|
int iArcanePlus = GetLevelByClass(CLASS_TYPE_WIZARD, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_SORCERER, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_DRAGONFIRE_ADEPT, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_DRAGON_SHAMAN, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_BEGUILER, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_SHADOWCASTER, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_WARMAGE, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_BINDER, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_BARD, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_TRUENAMER, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_WARLOCK, oPC);
|
|
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="WEAPON"; break;
|
|
case 2: sTag="ARMOR"; break;
|
|
case 3: case 4: sTag="RANDOM"; break;
|
|
case 5: iRandom2=Random(12)+1;
|
|
switch (iRandom2)
|
|
{
|
|
case 1: case 2: sTag=GetMagicWeapon(oPC,iItemLevel); iSlot=INVENTORY_SLOT_RIGHTHAND; break;
|
|
case 3: case 4: sTag=GetArmor(oPC,iItemLevel); iSlot=INVENTORY_SLOT_CHEST; break;
|
|
case 5: sTag=GetArms(oPC,iItemLevel); iSlot=INVENTORY_SLOT_ARMS; break;
|
|
case 6: sTag=GetBelt(oPC,iItemLevel); iSlot=INVENTORY_SLOT_BELT; break;
|
|
case 7: sTag=GetBoots(oPC,iItemLevel); iSlot=INVENTORY_SLOT_BOOTS; break;
|
|
case 8: sTag=GetCloak(oPC,iItemLevel); iSlot=INVENTORY_SLOT_CLOAK; break;
|
|
case 9: sTag=GetNeck(oPC,iItemLevel); iSlot=INVENTORY_SLOT_NECK; break;
|
|
case 10: sTag=GetRing(oPC,iItemLevel); iSlot=INVENTORY_SLOT_LEFTRING; break;
|
|
case 11: sTag=GetHead(oPC,iItemLevel); iSlot=INVENTORY_SLOT_HEAD; break;
|
|
case 12:
|
|
if (iArcanePlus > 0)
|
|
{
|
|
sTag=GetMiscMagic(oPC,iItemLevel);
|
|
} else {
|
|
if (Random(2) == 0)
|
|
sTag=GetMiscMagic(oPC,iItemLevel);
|
|
else
|
|
sTag=GetMagicWeapon(oPC,iItemLevel);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (sTag == "RANDOM")
|
|
GetRandomMagic(oCreature,iItemLevel,0,oPC);
|
|
else if (sTag == "WEAPON")
|
|
GetRandomMagic(oCreature,iItemLevel,1,oPC);
|
|
else if (sTag == "ARMOR")
|
|
GetRandomMagic(oCreature,iItemLevel,3,oPC);
|
|
else
|
|
{
|
|
oItem=CreateItemOnObject(sTag,oCreature);
|
|
|
|
if (iSlot==INVENTORY_SLOT_RIGHTHAND && CheckPossibleBrawler(oPC))
|
|
{
|
|
itemproperty ip;
|
|
ip=ItemPropertyLimitUseByClass(IP_CONST_CLASS_MONK);
|
|
IPRemoveMatchingItemProperties(oItem,GetItemPropertyType(ip),DURATION_TYPE_PERMANENT,GetItemPropertySubType(ip));
|
|
}
|
|
|
|
if (GetObjectType(oCreature)==OBJECT_TYPE_CREATURE && !GetIsPC(oPC))
|
|
{
|
|
EquipItem(iSlot, oItem, oPC);
|
|
}
|
|
}
|
|
//DelayCommand(0.1,SendMessageToPC(GetFirstPC(),"Level=" + IntToString(iItemLevel) + " | Item = " + sTag));
|
|
|
|
}
|
|
|
|
int CheckPossibleBrawler(object oPC)
|
|
{
|
|
int iResult;
|
|
|
|
iResult=FALSE;
|
|
|
|
if (FeatCheck(FEAT_IMPROVED_UNARMED_STRIKE, oPC) || GetLevelByClass(CLASS_TYPE_MONK, oPC) < 1)
|
|
iResult=TRUE;
|
|
|
|
return iResult;
|
|
}
|
|
|
|
string GetArms(object oPC,int iItemLevel=1)
|
|
{
|
|
int iRandom;
|
|
string sTag;
|
|
|
|
if (iItemLevel == 1)
|
|
{
|
|
iRandom = Random(5)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_IT_MBRACER002"; break;
|
|
case 2: sTag="NW_IT_MBRACER001"; break;
|
|
case 3: sTag="X0_IT_MBRACER001"; break;
|
|
case 4: sTag="NW_IT_MBRACER012"; break;
|
|
case 5: sTag="x2_nash_glove"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 2)
|
|
{
|
|
iRandom = Random(5)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_IT_MBRACER007"; break;
|
|
case 2: sTag="NW_IT_MBRACER003"; break;
|
|
case 3: sTag="NW_IT_MBRACER011"; break;
|
|
case 4: sTag="NW_IT_MBRACER013"; break;
|
|
case 5: sTag="X0_IT_MGLOVE007"; break;
|
|
}
|
|
}
|
|
|
|
if (iItemLevel == 3)
|
|
{
|
|
iRandom = Random(4)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_IT_MBRACER008"; break;
|
|
case 2: sTag="NW_IT_MBRACER004"; break;
|
|
case 3: sTag="X0_IT_MGLOVE006"; break;
|
|
case 4: sTag="NW_IT_MGLOVE001"; break;
|
|
}
|
|
}
|
|
|
|
if (iItemLevel == 4)
|
|
{
|
|
iRandom = Random(2)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_IT_MBRACER009"; break;
|
|
case 2: sTag="NW_IT_MBRACER005"; break;
|
|
}
|
|
}
|
|
|
|
if (iItemLevel == 5)
|
|
{
|
|
iRandom = Random(4)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_IT_MBRACER010"; break;
|
|
case 2: sTag="NW_IT_MBRACER006"; break;
|
|
case 3: sTag="X0_IT_MBRACER002"; break;
|
|
case 4: sTag="X0_IT_MGLOVE005"; break;
|
|
}
|
|
}
|
|
|
|
if (iItemLevel == 6)
|
|
{
|
|
iRandom = Random(1)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X2_IT_MBRACER001"; break;
|
|
}
|
|
}
|
|
|
|
return sTag;
|
|
}
|
|
|
|
string GetBelt(object oPC,int iItemLevel=1)
|
|
{
|
|
int iRandom;
|
|
string sTag;
|
|
|
|
if (iItemLevel == 1)
|
|
{
|
|
iRandom = Random(4)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="nw_it_mbelt011"; break;
|
|
case 2: sTag="nw_it_mbelt010"; break;
|
|
case 3: sTag="nw_it_mbelt009"; break;
|
|
case 4: sTag="X0_IT_MBELT002"; break;
|
|
}
|
|
}
|
|
|
|
if (iItemLevel == 2)
|
|
{
|
|
iRandom = Random(5)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="nw_it_mbelt018"; break;
|
|
case 2: sTag="NW_ITEM_000"; break;
|
|
case 3: sTag="nw_it_mbelt015"; break;
|
|
case 4: sTag="NW_IT_MBELT004"; break;
|
|
case 5: sTag="NW_IT_MBELT005"; break;
|
|
}
|
|
}
|
|
|
|
if (iItemLevel == 3)
|
|
{
|
|
iRandom = Random(5)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="nw_it_mbelt019"; break;
|
|
case 2: sTag="X0_IT_MBELT001"; break;
|
|
case 3: sTag="NW_IT_MBELT002"; break;
|
|
case 4: sTag="nw_it_mbelt016"; break;
|
|
case 5: sTag="x2_belt_001"; break;
|
|
}
|
|
}
|
|
|
|
if (iItemLevel == 4)
|
|
{
|
|
iRandom = Random(8)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="nw_it_mbelt020"; break;
|
|
case 2: sTag="NW_IT_MBELT007"; break;
|
|
case 3: sTag="NW_IT_MBELT003"; break;
|
|
case 4: sTag="NW_IT_MBELT001"; break;
|
|
case 5: sTag="nw_it_mbelt017"; break;
|
|
case 6: sTag="X0_IT_MBELT006"; break;
|
|
case 7: sTag="X0_IT_MBELT005"; break;
|
|
case 8: sTag="X0_IT_MBELT003"; break;
|
|
}
|
|
}
|
|
|
|
if (iItemLevel == 5)
|
|
{
|
|
iRandom = Random(5)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="nw_it_mbelt021"; break;
|
|
case 2: sTag="NW_IT_MBELT008"; break;
|
|
case 3: sTag="nw_it_mbelt014"; break;
|
|
case 4: sTag="nw_it_mbelt013"; break;
|
|
case 5: sTag="nw_it_mbelt012"; break;
|
|
}
|
|
}
|
|
|
|
if (iItemLevel == 6)
|
|
{
|
|
iRandom = Random(3)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X2_IT_MBELT003"; break;
|
|
case 2: sTag="X2_IT_MBELT001"; break;
|
|
case 3: sTag="X2_IT_MBELT002"; break;
|
|
}
|
|
}
|
|
return sTag;
|
|
}
|
|
|
|
string GetBoots(object oPC,int iItemLevel=1)
|
|
{
|
|
int iRandom;
|
|
string sTag;
|
|
|
|
if (iItemLevel == 1)
|
|
{
|
|
iRandom = Random(6)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="nw_it_mboots010"; break;
|
|
case 2: sTag="NW_IT_MBOOTS001"; break;
|
|
case 3: sTag="NW_IT_MBOOTS018"; break;
|
|
case 4: sTag="X0_IT_MBOOTS001"; break;
|
|
case 5: sTag="X0_IT_MBOOTS002"; break;
|
|
case 6: sTag="en5_boots_1_1"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 2)
|
|
{
|
|
iRandom = Random(5)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="nw_it_mboots011"; break;
|
|
case 2: sTag="NW_IT_MBOOTS006"; break;
|
|
case 3: sTag="NW_IT_MBOOTS019"; break;
|
|
case 4: sTag="X0_IT_MBOOTS003"; break;
|
|
case 5: sTag="en5_boots_2_1"; break;
|
|
|
|
}
|
|
}
|
|
if (iItemLevel == 3)
|
|
{
|
|
iRandom = Random(8)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="nw_it_mboots012"; break;
|
|
case 2: sTag="NW_IT_MBOOTS015"; break;
|
|
case 3: sTag="NW_IT_MBOOTS007"; break;
|
|
case 4: sTag="NW_IT_MBOOTS020"; break;
|
|
case 5: sTag="NW_IT_MBOOTS003"; break;
|
|
case 6: sTag="NW_IT_MBOOTS004"; break;
|
|
case 7: sTag="X0_IT_MBOOTS004"; break;
|
|
case 8: sTag="x2_nash_boot"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 4)
|
|
{
|
|
iRandom = Random(6)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="nw_it_mboots013"; break;
|
|
case 2: sTag="NW_IT_MBOOTS016"; break;
|
|
case 3: sTag="NW_IT_MBOOTS005"; break;
|
|
case 4: sTag="NW_IT_MBOOTS008"; break;
|
|
case 5: sTag="NW_IT_MBOOTS021"; break;
|
|
case 6: sTag="en5_boots_4_1"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 5)
|
|
{
|
|
iRandom = Random(5)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="nw_it_mboots014"; break;
|
|
case 2: sTag="NW_IT_MBOOTS017"; break;
|
|
case 3: sTag="NW_IT_MBOOTS009"; break;
|
|
case 4: sTag="X1_IT_MBOOTS001"; break;
|
|
case 5: sTag="NW_IT_MBOOTS022"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 6)
|
|
{
|
|
iRandom = Random(2)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X2_IT_MBOOTS003"; break;
|
|
case 2: sTag="X2_IT_MBOOTS006"; break;
|
|
}
|
|
}
|
|
|
|
return sTag;
|
|
}
|
|
|
|
string GetCloak(object oPC,int iItemLevel=1)
|
|
{
|
|
int iRandom;
|
|
string sTag;
|
|
|
|
if (iItemLevel == 1)
|
|
{
|
|
iRandom = Random(8)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MAARCL055"; break;
|
|
case 2: sTag="nw_maarcl098"; break;
|
|
case 3: sTag="nw_maarcl097"; break;
|
|
case 4: sTag="nw_maarcl096"; break;
|
|
case 5: sTag="nw_maarcl099"; break;
|
|
case 6: sTag="X0_MAARCL025"; break;
|
|
case 7: sTag="NW_MAARCL031"; break;
|
|
case 8: sTag="en5_cloak3"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 2)
|
|
{
|
|
iRandom = Random(8)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MAARCL088"; break;
|
|
case 2: sTag="NW_MAARCL104"; break;
|
|
case 3: sTag="X0_MAARCL030"; break;
|
|
case 4: sTag="NW_MAARCL057"; break;
|
|
case 5: sTag="NW_MAARCL030"; break;
|
|
case 6: sTag="X2_IT_DROWCL001"; break;
|
|
case 7: sTag="NW_MAARCL092"; break;
|
|
case 8: sTag="X1_IT_MCLOAK001"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 3)
|
|
{
|
|
iRandom = Random(11)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MAARCL089"; break;
|
|
case 2: sTag="NW_MAARCL105"; break;
|
|
case 3: sTag="X0_MAARCL038"; break;
|
|
case 4: sTag="X0_MAARCL039"; break;
|
|
case 5: sTag="X0_MAARCL040"; break;
|
|
case 6: sTag="NW_MAARCL056"; break;
|
|
case 7: sTag="X0_MAARCL027"; break;
|
|
case 8: sTag="X0_MAARCL031"; break;
|
|
case 9: sTag="X0_MAARCL034"; break;
|
|
case 10: sTag="x2_nash_cloak"; break;
|
|
case 11: sTag="NW_MAARCL093"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 4)
|
|
{
|
|
iRandom = Random(11)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MAARCL090"; break;
|
|
case 2: sTag="NW_MAARCL106"; break;
|
|
case 3: sTag="X0_MAARCL028"; break;
|
|
case 4: sTag="nw_maarcl102"; break;
|
|
case 5: sTag="nw_maarcl101"; break;
|
|
case 6: sTag="nw_maarcl100"; break;
|
|
case 7: sTag="nw_maarcl103"; break;
|
|
case 8: sTag="NW_MAARCL094"; break;
|
|
case 9: sTag="X0_MAARCL035"; break;
|
|
case 10: sTag="en5_cloak1"; break;
|
|
case 11: sTag="en5_cloak2"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 5)
|
|
{
|
|
iRandom = Random(6)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MAARCL091"; break;
|
|
case 2: sTag="X2_IT_MCLOAK004"; break;
|
|
case 3: sTag="X0_MAARCL032"; break;
|
|
case 4: sTag="X0_MAARCL033"; break;
|
|
case 5: sTag="X0_MAARCL029"; break;
|
|
case 6: sTag="NW_MAARCL095"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 6)
|
|
{
|
|
iRandom = Random(5)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X2_IT_MCLOAK006"; break;
|
|
case 2: sTag="X2_IT_MCLOAK005"; break;
|
|
case 3: sTag="X2_IT_MCLOAK002"; break;
|
|
case 4: sTag="X2_IT_MCLOAK003"; break;
|
|
case 5: sTag="X2_IT_MCLOAK008"; break;
|
|
}
|
|
}
|
|
return sTag;
|
|
}
|
|
|
|
string GetNeck(object oPC,int iItemLevel=1)
|
|
{
|
|
int iRandom;
|
|
string sTag;
|
|
|
|
if (iItemLevel == 1)
|
|
{
|
|
iRandom = Random(6)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_IT_MNECK001"; break;
|
|
case 2: sTag="nw_it_mneck024"; break;
|
|
case 3: sTag="X0_IT_MNECK005"; break;
|
|
case 4: sTag="NW_IT_MNECK023"; break;
|
|
case 5: sTag="NW_IT_MNECK007"; break;
|
|
case 6: sTag="NW_IT_MNECK006"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 2)
|
|
{
|
|
iRandom = Random(15)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_IT_MNECK012"; break;
|
|
case 2: sTag="nw_it_mneck032"; break;
|
|
case 3: sTag="nw_it_mneck030"; break;
|
|
case 4: sTag="nw_it_mneck031"; break;
|
|
case 5: sTag="nw_it_mneck029"; break;
|
|
case 6: sTag="NW_IT_MNECK005"; break;
|
|
case 7: sTag="X0_IT_MNECK006"; break;
|
|
case 8: sTag="NW_IT_MNECK034"; break;
|
|
case 9: sTag="X0_IT_MNECK001"; break;
|
|
case 10: sTag="nw_it_mneck025"; break;
|
|
case 11: sTag="NW_IT_MNECK035"; break;
|
|
case 12: sTag="NW_IT_MNECK033"; break;
|
|
case 13: sTag="X0_IT_MNECK004"; break;
|
|
case 14: sTag="NW_IT_MNECK008"; break;
|
|
case 15: sTag="NW_IT_MNECK016"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 3)
|
|
{
|
|
iRandom = Random(7)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_IT_MNECK013"; break;
|
|
case 2: sTag="NW_IT_MNECK036"; break;
|
|
case 3: sTag="nw_it_mneck026"; break;
|
|
case 4: sTag="X0_IT_MNECK002"; break;
|
|
case 5: sTag="NW_IT_MNECK003"; break;
|
|
case 6: sTag="NW_IT_MNECK009"; break;
|
|
case 7: sTag="NW_IT_MNECK017"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 4)
|
|
{
|
|
iRandom = Random(10)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_IT_MNECK014"; break;
|
|
case 2: sTag="X2_IT_MNECK002"; break;
|
|
case 3: sTag="nw_it_mneck027"; break;
|
|
case 4: sTag="NW_IT_MNECK037"; break;
|
|
case 5: sTag="X0_IT_MNECK007"; break;
|
|
case 6: sTag="NW_IT_MNECK010"; break;
|
|
case 7: sTag="X0_IT_MNECK003"; break;
|
|
case 8: sTag="NW_IT_MNECK018"; break;
|
|
case 9: sTag="NW_IT_MNECK002"; break;
|
|
case 10: sTag="NW_IT_MNECK004"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 5)
|
|
{
|
|
iRandom = Random(5)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_IT_MNECK015"; break;
|
|
case 2: sTag="X2_IT_MNECK004"; break;
|
|
case 3: sTag="nw_it_mneck028"; break;
|
|
case 4: sTag="NW_IT_MNECK011"; break;
|
|
case 5: sTag="NW_IT_MNECK019"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 6)
|
|
{
|
|
iRandom = Random(5)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X2_IT_MNECK021"; break;
|
|
case 2: sTag="X2_IT_MNECK003"; break;
|
|
case 3: sTag="X2_IT_MNECK017"; break;
|
|
case 4: sTag="X2_IT_MNECK006"; break;
|
|
case 5: sTag="X2_IT_MNECK011"; break;
|
|
}
|
|
}
|
|
return sTag;
|
|
}
|
|
|
|
string GetRing(object oPC,int iItemLevel=1)
|
|
{
|
|
int iRandom;
|
|
string sTag;
|
|
|
|
if (iItemLevel == 1)
|
|
{
|
|
iRandom = Random(11)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_IT_MRING006"; break;
|
|
case 2: sTag="NW_IT_MRING010"; break;
|
|
case 3: sTag="NW_IT_MRING009"; break;
|
|
case 4: sTag="X0_IT_MRING005"; break;
|
|
case 5: sTag="nw_it_mring024"; break;
|
|
case 6: sTag="NW_IT_MRING012"; break;
|
|
case 7: sTag="NW_IT_MRING011"; break;
|
|
case 8: sTag="NW_IT_MRING001"; break;
|
|
case 9: sTag="NW_IT_MRING031"; break;
|
|
case 10: sTag="NW_IT_MRING013"; break;
|
|
case 11: sTag="en3_mrofregen"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 2)
|
|
{
|
|
iRandom = Random(18)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_IT_MRING014"; break;
|
|
case 2: sTag="X0_IT_MRING007"; break;
|
|
case 3: sTag="X0_IT_MRING008"; break;
|
|
case 4: sTag="NW_IT_MRING029"; break;
|
|
case 5: sTag="X0_IT_MRING013"; break;
|
|
case 6: sTag="X0_IT_MRING001"; break;
|
|
case 7: sTag="X0_IT_MRING010"; break;
|
|
case 8: sTag="nw_it_mring025"; break;
|
|
case 9: sTag="X0_IT_MRING002"; break;
|
|
case 10: sTag="NW_IT_MRING005"; break;
|
|
case 11: sTag="X0_IT_MRING011"; break;
|
|
case 12: sTag="NW_IT_MRING008"; break;
|
|
case 13: sTag="NW_IT_MRING032"; break;
|
|
case 14: sTag="X0_IT_MRING014"; break;
|
|
case 15: sTag="X2_IT_MRING006"; break;
|
|
case 16: sTag="NW_IT_NOVEL001"; break;
|
|
case 17: sTag="en3_item"; break;
|
|
case 18: sTag="ZEP_NECRO_RING"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 3)
|
|
{
|
|
iRandom = Random(13)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_IT_MRING015"; break;
|
|
case 2: sTag="X0_IT_MRING009"; break;
|
|
case 3: sTag="x2_nash_ring"; break;
|
|
case 4: sTag="nw_it_mring026"; break;
|
|
case 5: sTag="X0_IT_MRING006"; break;
|
|
case 6: sTag="NW_IT_MRING007"; break;
|
|
case 7: sTag="NW_IT_MRING003"; break;
|
|
case 8: sTag="NW_IT_MRING018"; break;
|
|
case 9: sTag="NW_IT_MRING033"; break;
|
|
case 10: sTag="x2_ring_pet"; break;
|
|
case 11: sTag="X1_IT_MRING001"; break;
|
|
case 12: sTag="X1_IT_MRING002"; break;
|
|
case 13: sTag="en5_ring2"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 4)
|
|
{
|
|
iRandom = Random(10)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_IT_MRING016"; break;
|
|
case 2: sTag="nw_it_mring027"; break;
|
|
case 3: sTag="X0_IT_MRING004"; break;
|
|
case 4: sTag="X2_IT_MRING001"; break;
|
|
case 5: sTag="X2_IT_MRING002"; break;
|
|
case 6: sTag="X2_IT_MRING003"; break;
|
|
case 7: sTag="X2_IT_MRING004"; break;
|
|
case 8: sTag="X2_IT_MRING005"; break;
|
|
case 9: sTag="NW_IT_MRING019"; break;
|
|
case 10: sTag="en5_ring1"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 5)
|
|
{
|
|
iRandom = Random(6)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_IT_MRING017"; break;
|
|
case 2: sTag="nw_it_mring028"; break;
|
|
case 3: sTag="X0_IT_MRING012"; break;
|
|
case 4: sTag="NW_IT_MRING030"; break;
|
|
case 5: sTag="NW_IT_MRING020"; break;
|
|
case 6: sTag="NW_IT_MRING004"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 6)
|
|
{
|
|
iRandom = Random(12)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X2_IT_MRING020"; break;
|
|
case 2: sTag="X2_IT_MRING017"; break;
|
|
case 3: sTag="X2_IT_MRING019"; break;
|
|
case 4: sTag="X2_IT_MRING007"; break;
|
|
case 5: sTag="X2_IT_MRING008"; break;
|
|
case 6: sTag="X2_IT_MRING010"; break;
|
|
case 7: sTag="X2_IT_MRING009"; break;
|
|
case 8: sTag="NW_IT_MRING002"; break;
|
|
case 9: sTag="X2_IT_MRING011"; break;
|
|
case 10: sTag="X2_IT_MRING025"; break;
|
|
case 11: sTag="X2_IT_MRING012"; break;
|
|
case 12: sTag="X2_IT_MRING018"; break;
|
|
}
|
|
}
|
|
return sTag;
|
|
}
|
|
|
|
string GetHead(object oPC,int iItemLevel=1)
|
|
{
|
|
int iRandom;
|
|
string sTag;
|
|
|
|
if (iItemLevel == 1)
|
|
{
|
|
iRandom = Random(6)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X0_ARMHE005"; break;
|
|
case 2: sTag="X0_ARMHE007"; break;
|
|
case 3: sTag="X0_ARMHE008"; break;
|
|
case 4: sTag="X0_ARMHE016"; break;
|
|
case 5: sTag="NW_ARMHE011"; break;
|
|
case 6: sTag="NW_IT_NOVEL004"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 2)
|
|
{
|
|
iRandom = Random(7)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="x2_it_adahelm"; break;
|
|
case 2: sTag="X0_ARMHE004"; break;
|
|
case 3: sTag="NW_ARMHE012"; break;
|
|
case 4: sTag="X0_ARMHE009"; break;
|
|
case 5: sTag="X0_ARMHE001"; break;
|
|
case 6: sTag="NW_ARMHE008"; break;
|
|
case 7: sTag="NW_ARMHE006"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 3)
|
|
{
|
|
iRandom = Random(4)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="x2_helm_001"; break;
|
|
case 2: sTag="X0_ARMHE002"; break;
|
|
case 3: sTag="NW_ARMHE009"; break;
|
|
case 4: sTag="NW_ARMHE007"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 4)
|
|
{
|
|
iRandom = Random(9)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X0_ARMHE014"; break;
|
|
case 2: sTag="X0_ARMHE003"; break;
|
|
case 3: sTag="X0_ARMHE006"; break;
|
|
case 4: sTag="NW_ARMHE010"; break;
|
|
case 5: sTag="X0_ARMHE010"; break;
|
|
case 6: sTag="X0_ARMHE017"; break;
|
|
case 7: sTag="X2_ARMHE001"; break;
|
|
case 8: sTag="X0_ARMHE013"; break;
|
|
case 9: sTag="X2_ARMHE002"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 5)
|
|
{
|
|
iRandom = Random(3)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X0_ARMHE015"; break;
|
|
case 2: sTag="X0_ARMHE012"; break;
|
|
case 3: sTag="x2_helm_003"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 6)
|
|
{
|
|
iRandom = Random(3)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="x2_helm_004"; break;
|
|
case 2: sTag="X0_ARMHE011"; break;
|
|
case 3: sTag="x2_helm_002"; break;
|
|
}
|
|
}
|
|
return sTag;
|
|
}
|
|
|
|
string GetArmor(object oPC,int iItemLevel=1)
|
|
{
|
|
string sTag;
|
|
int iArmor;
|
|
|
|
iArmor = ENGetArmorType(oPC);
|
|
if (iArmor == 0 || iArmor > 5)
|
|
iArmor = Random(5)+1;
|
|
if (iArmor == 2 && Random(10)==0)
|
|
iArmor = 1;
|
|
if (iArmor == 3 && Random(10)==0)
|
|
iArmor = Random(2)+1;
|
|
|
|
if (Random(3)==0)
|
|
sTag = GetShield(oPC,iItemLevel);
|
|
else
|
|
{
|
|
switch (iArmor)
|
|
{
|
|
case 1: sTag=GetLightArmor(oPC,iItemLevel); break;
|
|
case 2: sTag=GetMediumArmor(oPC,iItemLevel); break;
|
|
case 3: sTag=GetHeavyArmor(oPC,iItemLevel); break;
|
|
case 4: sTag=GetRobes(oPC,iItemLevel); break;
|
|
case 5: sTag=GetMonkArmor(oPC,iItemLevel); break;
|
|
}
|
|
}
|
|
return sTag;
|
|
}
|
|
|
|
string GetLightArmor(object oPC,int iItemLevel=1)
|
|
{
|
|
int iRandom;
|
|
string sTag;
|
|
|
|
if (iItemLevel == 1)
|
|
{
|
|
iRandom = Random(6)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MAARCL046"; break;
|
|
case 2: sTag="NW_MAARCL011"; break;
|
|
case 3: sTag="NW_MAARCL044"; break;
|
|
case 4: sTag="x2_it_mithralsh"; break;
|
|
case 5: sTag="NW_MAARCL043"; break;
|
|
case 6: sTag="NW_MAARCL045"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 2)
|
|
{
|
|
iRandom = Random(10)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MAARCL067"; break;
|
|
case 2: sTag="NW_MAARCL013"; break;
|
|
case 3: sTag="NW_MAARCL006"; break;
|
|
case 4: sTag="NW_MAARCL032"; break;
|
|
case 5: sTag="NW_MAARCL012"; break;
|
|
case 6: sTag="NW_MAARCL071"; break;
|
|
case 7: sTag="NW_MAARCL072"; break;
|
|
case 8: sTag="X1_MAARCL001"; break;
|
|
case 9: sTag="NW_MAARCL075"; break;
|
|
case 10: sTag="NW_MAARCL007"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 3)
|
|
{
|
|
iRandom = Random(12)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MAARCL079"; break;
|
|
case 2: sTag="NW_MAARCL003"; break;
|
|
case 3: sTag="NW_MAARCL001"; break;
|
|
case 4: sTag="NW_MCLOTH005"; break;
|
|
case 5: sTag="NW_MAARCL017"; break;
|
|
case 6: sTag="X0_MAARCL041"; break;
|
|
case 7: sTag="NW_MAARCL083"; break;
|
|
case 8: sTag="NW_MAARCL002"; break;
|
|
case 9: sTag="NW_MAARCL084"; break;
|
|
case 10: sTag="NW_MAARCL034"; break;
|
|
case 11: sTag="NW_MAARCL008"; break;
|
|
case 12: sTag="NW_MAARCL087"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 4)
|
|
{
|
|
iRandom = Random(8)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X0_MAARCL009"; break;
|
|
case 2: sTag="NW_MAARCL004"; break;
|
|
case 3: sTag="NW_MAARCL009"; break;
|
|
case 4: sTag="X0_MAARCL003"; break;
|
|
case 5: sTag="X0_MAARCL001"; break;
|
|
case 6: sTag="NW_MAARCL005"; break;
|
|
case 7: sTag="NW_IT_NOVEL003"; break;
|
|
case 8: sTag="X0_MAARCL005"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 5)
|
|
{
|
|
iRandom = Random(7)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X0_MAARCL010"; break;
|
|
case 2: sTag="x2_cus_bindingsofblood"; break;
|
|
case 3: sTag="NW_MAARCL033"; break;
|
|
case 4: sTag="X0_MAARCL004"; break;
|
|
case 5: sTag="X0_MAARCL002"; break;
|
|
case 6: sTag="X0_MAARCL006"; break;
|
|
case 7: sTag="en5_light5_1"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 6)
|
|
{
|
|
iRandom = Random(6)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X2_MAARCL033"; break;
|
|
case 2: sTag="x2_cus_dancerssilhouette"; break;
|
|
case 3: sTag="x2_cus_fletchersfriend"; break;
|
|
case 4: sTag="X2_MAARCL027"; break;
|
|
case 5: sTag="X2_MAARCL025"; break;
|
|
case 6: sTag="X2_MAARCL029"; break;
|
|
}
|
|
}
|
|
|
|
return sTag;
|
|
}
|
|
|
|
|
|
string GetMediumArmor(object oPC,int iItemLevel=1)
|
|
{
|
|
int iRandom;
|
|
string sTag;
|
|
|
|
if (iItemLevel == 1)
|
|
{
|
|
iRandom = Random(5)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MAARCL049"; break;
|
|
case 2: sTag="NW_MAARCL035"; break;
|
|
case 3: sTag="NW_MAARCL047"; break;
|
|
case 4: sTag="x2_it_mithralch"; break;
|
|
case 5: sTag="NW_MAARCL048"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 2)
|
|
{
|
|
iRandom = Random(8)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MAARCL065"; break;
|
|
case 2: sTag="NW_MAARCL040"; break;
|
|
case 3: sTag="x2_it_adachain"; break;
|
|
case 4: sTag="NW_MAARCL066"; break;
|
|
case 5: sTag="NW_MAARCL058"; break;
|
|
case 6: sTag="NW_MAARCL036"; break;
|
|
case 7: sTag="NW_MAARCL070"; break;
|
|
case 8: sTag="NW_MAARCL073"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 3)
|
|
{
|
|
iRandom = Random(7)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MAARCL077"; break;
|
|
case 2: sTag="NW_MAARCL014"; break;
|
|
case 3: sTag="NW_MAARCL016"; break;
|
|
case 4: sTag="NW_MAARCL078"; break;
|
|
case 5: sTag="NW_MAARCL037"; break;
|
|
case 6: sTag="NW_MAARCL082"; break;
|
|
case 7: sTag="NW_MAARCL085"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 4)
|
|
{
|
|
iRandom = Random(8)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X0_MAARCL015"; break;
|
|
case 2: sTag="X0_MAARCL013"; break;
|
|
case 3: sTag="NW_MAARCL039"; break;
|
|
case 4: sTag="NW_MAARCL061"; break;
|
|
case 5: sTag="X0_MAARCL007"; break;
|
|
case 6: sTag="NW_MAARCL010"; break;
|
|
case 7: sTag="X0_MAARCL011"; break;
|
|
case 8: sTag="x2_armor_001"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 5)
|
|
{
|
|
iRandom = Random(6)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X0_MAARCL016"; break;
|
|
case 2: sTag="X0_MAARCL014"; break;
|
|
case 3: sTag="NW_MAARCL015"; break;
|
|
case 4: sTag="X0_MAARCL008"; break;
|
|
case 5: sTag="X0_MAARCL012"; break;
|
|
case 6: sTag="en5_medium5_1"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 6)
|
|
{
|
|
iRandom = Random(6)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X2_MAARCL039"; break;
|
|
case 2: sTag="X2_MAARCL037"; break;
|
|
case 3: sTag="X2_MAARCL031"; break;
|
|
case 4: sTag="X2_MAARCL050"; break;
|
|
case 5: sTag="X2_MAARCL035"; break;
|
|
case 6: sTag="X2_MAARCL049"; break;
|
|
}
|
|
}
|
|
return sTag;
|
|
}
|
|
|
|
string GetHeavyArmor(object oPC,int iItemLevel=1)
|
|
{
|
|
int iRandom;
|
|
string sTag;
|
|
|
|
if (iItemLevel == 1)
|
|
{
|
|
iRandom = Random(7)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MAARCL051"; break;
|
|
case 2: sTag="NW_MAARCL022"; break;
|
|
case 3: sTag="NW_MAARCL029"; break;
|
|
case 4: sTag="NW_MAARCL053"; break;
|
|
case 5: sTag="NW_MAARCL052"; break;
|
|
case 6: sTag="NW_MAARCL059"; break;
|
|
case 7: sTag="NW_MAARCL050"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 2)
|
|
{
|
|
iRandom = Random(12)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MAARCL064"; break;
|
|
case 2: sTag="x2_it_adaplate"; break;
|
|
case 3: sTag="NW_MAARCL021"; break;
|
|
case 4: sTag="NW_MAARCL025"; break;
|
|
case 5: sTag="NW_MAARCL024"; break;
|
|
case 6: sTag="NW_MAARCL068"; break;
|
|
case 7: sTag="NW_MAARCL026"; break;
|
|
case 8: sTag="NW_MAARCL069"; break;
|
|
case 9: sTag="NW_MAARCL020"; break;
|
|
case 10: sTag="NW_MAARCL074"; break;
|
|
case 11: sTag="X0_MAARCL037"; break;
|
|
case 12: sTag="NW_MAARCL060"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 3)
|
|
{
|
|
iRandom = Random(7)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MAARCL076"; break;
|
|
case 2: sTag="NW_MAARCL080"; break;
|
|
case 3: sTag="NW_MAARCL081"; break;
|
|
case 4: sTag="X0_MAARCL036"; break;
|
|
case 5: sTag="NW_MAARCL062"; break;
|
|
case 6: sTag="NW_MAARCL063"; break;
|
|
case 7: sTag="NW_MAARCL086"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 4)
|
|
{
|
|
iRandom = Random(9)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X0_MAARCL019"; break;
|
|
case 2: sTag="NW_MAARCL054"; break;
|
|
case 3: sTag="NW_MAARCL028"; break;
|
|
case 4: sTag="NW_MAARCL042"; break;
|
|
case 5: sTag="X0_MAARCL023"; break;
|
|
case 6: sTag="X0_MAARCL021"; break;
|
|
case 7: sTag="NW_MAARCL041"; break;
|
|
case 8: sTag="X0_MAARCL017"; break;
|
|
case 9: sTag="NW_MAARCL018"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 5)
|
|
{
|
|
iRandom = Random(6)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X0_MAARCL020"; break;
|
|
case 2: sTag="X0_MAARCL024"; break;
|
|
case 3: sTag="X0_MAARCL022"; break;
|
|
case 4: sTag="NW_MAARCL027"; break;
|
|
case 5: sTag="X0_MAARCL018"; break;
|
|
case 6: sTag="en5_fullplate1"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 6)
|
|
{
|
|
iRandom = Random(8)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X2_MAARCL043"; break;
|
|
case 2: sTag="x2_cus_armoroffaith"; break;
|
|
case 3: sTag="x2_cus_casielssoul"; break;
|
|
case 4: sTag="x2_armor_004"; break;
|
|
case 5: sTag="X2_MAARCL045"; break;
|
|
case 6: sTag="X2_MAARCL041"; break;
|
|
case 7: sTag="x2_cus_thegildeddefender"; break;
|
|
case 8: sTag="x2_cus_theironskeleton"; break;
|
|
}
|
|
}
|
|
return sTag;
|
|
}
|
|
|
|
string GetMonkArmor(object oPC,int iItemLevel=1)
|
|
{
|
|
int iRandom;
|
|
string sTag;
|
|
|
|
if (iItemLevel == 1)
|
|
{
|
|
iRandom = Random(2)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MCLOTH018"; break;
|
|
case 2: sTag="NW_MCLOTH015"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 2)
|
|
{
|
|
iRandom = Random(5)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MCLOTH019"; break;
|
|
case 2: sTag="NW_MCLOTH016"; break;
|
|
case 3: sTag="X0_CLOTH002"; break;
|
|
case 4: sTag="NW_MCLOTH013"; break;
|
|
case 5: sTag="X0_CLOTH001"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 3)
|
|
{
|
|
iRandom = Random(2)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MCLOTH020"; break;
|
|
case 2: sTag="X0_CLOTH004"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 4)
|
|
{
|
|
iRandom = Random(3)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MCLOTH021"; break;
|
|
case 2: sTag="x2_cus_robe1"; break;
|
|
case 3: sTag="NW_MCLOTH017"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 5)
|
|
{
|
|
iRandom = Random(3)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MCLOTH022"; break;
|
|
case 2: sTag="x2_cus_lastwords"; break;
|
|
case 3: sTag="en5_monkrobe5_1"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 6)
|
|
{
|
|
iRandom = Random(1)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X2_MCLOTH001"; break;
|
|
}
|
|
}
|
|
return sTag;
|
|
}
|
|
|
|
string GetRobes(object oPC,int iItemLevel=1)
|
|
{
|
|
int iRandom;
|
|
string sTag;
|
|
|
|
if (iItemLevel == 1)
|
|
{
|
|
iRandom = Random(7)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MCLOTH007"; break;
|
|
case 2: sTag="NW_MCLOTH008"; break;
|
|
case 3: sTag="NW_MCLOTH010"; break;
|
|
case 4: sTag="X1_MCLOTH001"; break;
|
|
case 5: sTag="NW_MCLOTH009"; break;
|
|
case 6: sTag="NW_MCLOTH006"; break;
|
|
case 7: sTag="en5_magerobe1"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 2)
|
|
{
|
|
iRandom = Random(5)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X2_MDUERAR010"; break;
|
|
case 2: sTag="NW_MCLOTH014"; break;
|
|
case 3: sTag="X0_CLOTH005"; break;
|
|
case 4: sTag="X0_CLOTH003"; break;
|
|
case 5: sTag="NW_MCLOTH001"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 3)
|
|
{
|
|
iRandom = Random(2)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="x2_sequencer1"; break;
|
|
case 2: sTag="X0_CLOTH004"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 4)
|
|
{
|
|
iRandom = Random(2)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MCLOTH012"; break;
|
|
case 2: sTag="x2_cus_robe1"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 5)
|
|
{
|
|
iRandom = Random(4)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_MCLOTH004"; break;
|
|
case 2: sTag="x2_sequencer2"; break;
|
|
case 3: sTag="NW_MCLOTH003"; break;
|
|
case 4: sTag="NW_MCLOTH002"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 6)
|
|
{
|
|
iRandom = Random(3)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="x2_sequencer3"; break;
|
|
case 2: sTag="X2_MCLOTH005"; break;
|
|
case 3: sTag="x2_cus_shiftertunic"; break;
|
|
}
|
|
}
|
|
return sTag;
|
|
}
|
|
|
|
string GetShield(object oPC,int iItemLevel=1)
|
|
{
|
|
int iRandom;
|
|
string sTag;
|
|
|
|
if (iItemLevel == 1)
|
|
{
|
|
iRandom = Random(12)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_ASHMLW002"; break;
|
|
case 2: sTag="X2_ASHMLW006"; break;
|
|
case 3: sTag="X2_IT_IWOODSHLDL"; break;
|
|
case 4: sTag="NW_ASHMSW005"; break;
|
|
case 5: sTag="x2_it_ironwshlds"; break;
|
|
case 6: sTag="nw_ashmsw010"; break;
|
|
case 7: sTag="nw_ashmsw011"; break;
|
|
case 8: sTag="x2_smchaosshield"; break;
|
|
case 9: sTag="NW_ASHMSW002"; break;
|
|
case 10: sTag="NW_ASHMTO005"; break;
|
|
case 11: sTag="x2_it_ironwshldt"; break;
|
|
case 12: sTag="NW_ASHMTO002"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 2)
|
|
{
|
|
iRandom = Random(8)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_ASHMLW008"; break;
|
|
case 2: sTag="X0_ASHMLW003"; break;
|
|
case 3: sTag="NW_ASHMSW003"; break;
|
|
case 4: sTag="NW_ASHMSW006"; break;
|
|
case 5: sTag="NW_ASHMSW008"; break;
|
|
case 6: sTag="NW_ASHMTO007"; break;
|
|
case 7: sTag="nw_ashmto010"; break;
|
|
case 8: sTag="NW_ASHMTO008"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 3)
|
|
{
|
|
iRandom = Random(10)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_ASHMLW009"; break;
|
|
case 2: sTag="NW_ASHMLW006"; break;
|
|
case 3: sTag="NW_ASHMLW004"; break;
|
|
case 4: sTag="NW_ASHMLW007"; break;
|
|
case 5: sTag="NW_ASHMSW007"; break;
|
|
case 6: sTag="NW_ASHMSW009"; break;
|
|
case 7: sTag="nw_ashmto011"; break;
|
|
case 8: sTag="NW_ASHMTO003"; break;
|
|
case 9: sTag="NW_ASHMTO004"; break;
|
|
case 10: sTag="NW_ASHMTO009"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 4)
|
|
{
|
|
iRandom = Random(7)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X0_ASHMLW001"; break;
|
|
case 2: sTag="NW_ASHMLW005"; break;
|
|
case 3: sTag="NW_ASHMLW003"; break;
|
|
case 4: sTag="NW_ASHMSW004"; break;
|
|
case 5: sTag="X0_ASHMSW001"; break;
|
|
case 6: sTag="NW_ASHMTO006"; break;
|
|
case 7: sTag="X0_ASHMTO001"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 5)
|
|
{
|
|
iRandom = Random(3)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X0_ASHMLW002"; break;
|
|
case 2: sTag="X0_ASHMSW002"; break;
|
|
case 3: sTag="X0_ASHMTO002"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 6)
|
|
{
|
|
iRandom = Random(5)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="X2_ASHMLW003"; break;
|
|
case 2: sTag="X2_ASHMLW005"; break;
|
|
case 3: sTag="X2_ASHMSW003"; break;
|
|
case 4: sTag="X2_ASHMTO005"; break;
|
|
case 5: sTag="X2_ASHMTO003"; break;
|
|
}
|
|
}
|
|
return sTag;
|
|
}
|
|
|
|
|
|
string GetMiscMagic(object oPC,int iItemLevel=1)
|
|
{
|
|
int iRandom;
|
|
string sTag;
|
|
|
|
if (iItemLevel == 1)
|
|
{
|
|
iRandom = Random(14)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="nw_wmgmrd006"; break;
|
|
case 2: sTag="NW_WMGST006"; break;
|
|
case 3: sTag="NW_IT_MSMLMISC23"; break;
|
|
case 4: sTag="X0_IT_MTHNMISC04"; break;
|
|
case 5: sTag="X0_IT_MTHNMISC05"; break;
|
|
case 6: sTag="X0_IT_MTHNMISC06"; break;
|
|
case 7: sTag="X0_IT_MTHNMISC15"; break;
|
|
case 8: sTag="NW_IT_CONTAIN005"; break;
|
|
case 9: sTag="NW_IT_MMIDMISC03"; break;
|
|
case 10: sTag="X0_IT_MSMLMISC06"; break;
|
|
case 11: sTag="NW_IT_CONTAIN003"; break;
|
|
case 12: sTag="nw_wmgwn013"; break;
|
|
case 13: sTag="nw_wmgwn006"; break;
|
|
case 14: sTag="en6_hcard"; break;
|
|
}
|
|
}
|
|
|
|
if (iItemLevel == 2)
|
|
{
|
|
iRandom = Random(20)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_WMGMRD005"; break;
|
|
case 2: sTag="NW_WMGMRD003"; break;
|
|
case 3: sTag="NW_WMGRD002"; break;
|
|
case 4: sTag="X0_WMGMRD007"; break;
|
|
case 5: sTag="NW_WMGST004"; break;
|
|
case 6: sTag="NW_IT_CONTAIN006"; break;
|
|
case 7: sTag="X0_IT_MSMLMISC01"; break;
|
|
case 8: sTag="X0_IT_MSMLMISC02"; break;
|
|
case 9: sTag="X0_IT_MMEDMISC01"; break;
|
|
case 10: sTag="X0_IT_MTHNMISC21"; break;
|
|
case 11: sTag="X0_IT_MTHNMISC17"; break;
|
|
case 12: sTag="X0_IT_MTHNMISC08"; break;
|
|
case 13: sTag="X0_IT_MTHNMISC09"; break;
|
|
case 14: sTag="X0_IT_MTHNMISC16"; break;
|
|
case 15: sTag="X0_IT_MSMLMISC05"; break;
|
|
case 16: sTag="nw_wmgwn004"; break;
|
|
case 17: sTag="nw_wmgrd002"; break;
|
|
case 18: sTag="nw_wmgwn012"; break;
|
|
case 19: sTag="en5_misc1"; break;
|
|
case 20: sTag="en6_hcard"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 3)
|
|
{
|
|
iRandom = Random(21)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_WMGMRD004"; break;
|
|
case 2: sTag="NW_WMGRD002"; break;
|
|
case 3: sTag="NW_WMGST005"; break;
|
|
case 4: sTag="NW_WMGST003"; break;
|
|
case 5: sTag="X0_IT_MTHNMISC18"; break;
|
|
case 6: sTag="X0_IT_MTHNMISC19"; break;
|
|
case 7: sTag="X0_IT_MTHNMISC13"; break;
|
|
case 8: sTag="X0_IT_MSMLMISC03"; break;
|
|
case 9: sTag="X0_IT_MSMLMISC04"; break;
|
|
case 10: sTag="X0_IT_MTHNMISC14"; break;
|
|
case 11: sTag="NW_IT_MMIDMISC04"; break;
|
|
case 12: sTag="X0_IT_MMEDMISC06"; break;
|
|
case 13: sTag="nw_wmgwn007"; break;
|
|
case 14: sTag="nw_wmgwn003"; break;
|
|
case 15: sTag="nw_wmgwn010"; break;
|
|
case 16: sTag="nw_wmgwn011"; break;
|
|
case 17: sTag="nw_wmgwn005"; break;
|
|
case 18: sTag="nw_wmgwn008"; break;
|
|
case 19: sTag="nw_wmgwn009"; break;
|
|
case 20: sTag="nw_wmgrd002"; break;
|
|
case 21: sTag="nw_wmgwn012"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 4)
|
|
{
|
|
iRandom = Random(10)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_WMGMRD002"; break;
|
|
case 2: sTag="NW_WMGST002"; break;
|
|
case 3: sTag="X0_IT_MMEDMISC02"; break;
|
|
case 4: sTag="X0_IT_MMEDMISC03"; break;
|
|
case 5: sTag="NW_IT_MMIDMISC01"; break;
|
|
case 6: sTag="NW_IT_MMIDMISC02"; break;
|
|
case 7: sTag="X0_IT_MMEDMISC05"; break;
|
|
case 8: sTag="X0_IT_MTHNMISC11"; break;
|
|
case 9: sTag="NW_IT_MSMLMISC05"; break;
|
|
case 10: sTag="nw_wmgwn002"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 5)
|
|
{
|
|
iRandom = Random(10)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_IT_NOVEL008"; break;
|
|
case 2: sTag="X2_WMGST001"; break;
|
|
case 3: sTag="nw_wblmcl012"; break;
|
|
case 4: sTag="nw_wmgmrd003"; break;
|
|
case 5: sTag="nw_wmgst004"; break;
|
|
case 6: sTag="nw_wmgst005"; break;
|
|
case 7: sTag="nw_wblmcl012"; break;
|
|
case 8: sTag="nw_wmgmrd004"; break;
|
|
case 9: sTag="nw_wmgst002"; break;
|
|
case 10: sTag="nw_wmgmrd005"; break;
|
|
}
|
|
}
|
|
if (iItemLevel == 6)
|
|
{
|
|
iRandom = Random(8)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: sTag="NW_IT_NOVEL002"; break;
|
|
case 2: sTag="X0_IT_MTHNMISC10"; break;
|
|
case 3: sTag="nw_wmgmrd004"; break;
|
|
case 4: sTag="nw_wmgst002"; break;
|
|
case 5: sTag="nw_wmgmrd005"; break;
|
|
case 6: sTag="nw_wmgmrd002"; break;
|
|
case 7: sTag="nw_wmgst003"; break;
|
|
case 8: sTag="nw_wblmcl012"; break;
|
|
}
|
|
}
|
|
|
|
return sTag;
|
|
}
|
|
|
|
void GetRandomMagic(object oCreature,int iItemLevel=1, int iType=0,object oPC=OBJECT_SELF)
|
|
{
|
|
int iEnchantments;
|
|
int iRandom;
|
|
itemproperty iProperty;
|
|
object oItem;
|
|
string sTag;
|
|
string sPlus;
|
|
string sName;
|
|
int iPosition;
|
|
int iRandom2;
|
|
int iArmor;
|
|
int iProperties;
|
|
int iIndex;
|
|
int iPreCount;
|
|
int iPostCount;
|
|
int iTest;
|
|
int iTwoHanded;
|
|
|
|
int iArcane = GetLevelByClass(CLASS_TYPE_WIZARD, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_SORCERER, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_DRAGONFIRE_ADEPT, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_DRAGON_SHAMAN, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_BEGUILER, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_SHADOWCASTER, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_WARMAGE, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_BINDER, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_TRUENAMER, oPC)
|
|
+ GetLevelByClass(CLASS_TYPE_WARLOCK, oPC);
|
|
|
|
if (!GetObjectType(oPC) == OBJECT_TYPE_CREATURE)
|
|
oPC = GetRandomPC();
|
|
|
|
if (!(GetObjectType(oPC) == OBJECT_TYPE_CREATURE))
|
|
if (GetObjectType(oCreature) == OBJECT_TYPE_CREATURE)
|
|
oPC=oCreature;
|
|
else
|
|
oPC = GetRandomPC();
|
|
|
|
iRandom = Random(12)+1;
|
|
|
|
if (iType>0)
|
|
iRandom=iType;
|
|
|
|
switch (iRandom)
|
|
{
|
|
case 1: case 2:
|
|
if (iArcane > 0)
|
|
{
|
|
if (Random(4)==0)
|
|
{
|
|
iRandom2=Random(5)+1;
|
|
switch (iRandom2)
|
|
{
|
|
case 1: case 2: sTag = "en3_magestaff";
|
|
sTag = sTag + IntToString(Random(4)+1);
|
|
iPosition = -1;
|
|
break;
|
|
case 3: sTag = "en3_wand";
|
|
iPosition = -2;
|
|
break;
|
|
case 4: sTag = "en3_rod";
|
|
iPosition = -2;
|
|
break;
|
|
case 5: sTag = "en3_misc";
|
|
sTag = sTag + IntToString(Random(6)+1);
|
|
iPosition = -3;
|
|
break;
|
|
}
|
|
} else {
|
|
GetWeaponType(oPC);
|
|
sTag = "en3_" + GetWeaponTag(oPC);
|
|
iPosition = INVENTORY_SLOT_RIGHTHAND;
|
|
}
|
|
}
|
|
else if (GetLevelByClass(CLASS_TYPE_BARD,oPC)>0)
|
|
{
|
|
if (Random(6)==0)
|
|
{
|
|
sTag = "en3_instrument";
|
|
sTag = sTag + IntToString(Random(3)+1);
|
|
iPosition = -4;
|
|
} else {
|
|
GetWeaponType(oPC);
|
|
sTag = "en3_" + GetWeaponTag(oPC);
|
|
iPosition = INVENTORY_SLOT_RIGHTHAND;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
GetWeaponType(oPC);
|
|
sTag = "en3_" + GetWeaponTag(oPC);
|
|
iPosition = INVENTORY_SLOT_RIGHTHAND;
|
|
}
|
|
break;
|
|
case 3: case 4: if (GetHasFeat(FEAT_SHIELD_PROFICIENCY, oPC) && Random(2) == 0)
|
|
{
|
|
iRandom2=Random(3)+1;
|
|
switch(iRandom2)
|
|
{
|
|
case 1: sTag = "en3_sshield"; break;
|
|
case 2: sTag = "en3_lshield"; break;
|
|
case 3: sTag = "en3_tshield"; break;
|
|
}
|
|
iPosition = INVENTORY_SLOT_LEFTHAND;
|
|
} else {
|
|
iArmor = ENGetArmorType(oPC);
|
|
sTag = GetArmorTag(iArmor);
|
|
iPosition = INVENTORY_SLOT_CHEST;
|
|
}
|
|
break;
|
|
case 5: sTag = SetTagName("en3_gloves"); iPosition = INVENTORY_SLOT_ARMS; break;
|
|
case 6: sTag = SetTagName("en3_belt"); iPosition = INVENTORY_SLOT_BELT; break;
|
|
case 7: sTag = SetTagName("en3_boots"); iPosition = INVENTORY_SLOT_BOOTS; break;
|
|
case 8: sTag = SetTagName("en3_cloak"); iPosition = INVENTORY_SLOT_CLOAK; break;
|
|
case 9: sTag = SetTagName("en3_amulet"); iPosition = INVENTORY_SLOT_NECK; break;
|
|
case 10: sTag = SetTagName("en3_ring"); iPosition = INVENTORY_SLOT_LEFTRING; break;
|
|
case 11: sTag = "en3_helm" + IntToString(Random(8)+1); iPosition = INVENTORY_SLOT_HEAD;break;
|
|
case 12: iRandom2 = Random(5)+1;
|
|
switch (iRandom2)
|
|
{
|
|
case 1: if (iArcane > 0)
|
|
{
|
|
sTag = "en3_magestaff";
|
|
sTag = sTag + IntToString(Random(4)+1);
|
|
iPosition = -1;
|
|
} else {
|
|
sTag = "en3_misc";
|
|
sTag = sTag + IntToString(Random(6)+1);
|
|
iPosition = -3;
|
|
}
|
|
break;
|
|
case 2: sTag = "en3_wand";
|
|
iPosition = -2;
|
|
break;
|
|
case 3: sTag = "en3_rod";
|
|
iPosition = -2;
|
|
break;
|
|
case 4: sTag = "en3_misc";
|
|
sTag = sTag + IntToString(Random(6)+1);
|
|
iPosition = -3;
|
|
break;
|
|
case 5: sTag = "en3_instrument";
|
|
sTag = sTag + IntToString(Random(3)+1);
|
|
iPosition = -4;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
|
|
iTwoHanded = GetTwoHanded(sTag);
|
|
|
|
if (iPosition == INVENTORY_SLOT_RIGHTHAND)
|
|
sTag = sTag + "2";
|
|
if (iPosition == INVENTORY_SLOT_CHEST)
|
|
sTag = sTag + IntToString(Random(3)+2);
|
|
if (iPosition == INVENTORY_SLOT_LEFTHAND)
|
|
sTag = sTag + IntToString(Random(4)+2);
|
|
|
|
oItem = CreateItemOnObject(sTag,oCreature);
|
|
if (iTwoHanded==TRUE)
|
|
SetLocalInt(oItem,"TwoHanded",1);
|
|
|
|
iEnchantments = 2;
|
|
|
|
sName=GetName(oItem);
|
|
sPlus="";
|
|
|
|
if (iPosition == INVENTORY_SLOT_RIGHTHAND)
|
|
{
|
|
if (IPGetIsRangedWeapon(oItem))
|
|
{
|
|
iProperty=ItemPropertyAttackBonus(iItemLevel);
|
|
IPSafeAddItemProperty(oItem,iProperty);
|
|
if (Random(4)==0)
|
|
{
|
|
iProperty=ItemPropertyMaxRangeStrengthMod(iItemLevel);
|
|
IPSafeAddItemProperty(oItem,iProperty);
|
|
iEnchantments++;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (sTag == "en3_monkgloves2")
|
|
{
|
|
iProperty=ItemPropertyAttackBonus(iItemLevel);
|
|
IPSafeAddItemProperty(oItem,iProperty);
|
|
iProperty=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_SONIC,GetEnchantBonus(iItemLevel));
|
|
IPSafeAddItemProperty(oItem,iProperty);
|
|
iEnchantments++;
|
|
} else {
|
|
iProperty=ItemPropertyEnhancementBonus(iItemLevel);
|
|
IPSafeAddItemProperty(oItem,iProperty);
|
|
}
|
|
}
|
|
sPlus="+" + IntToString(iItemLevel);
|
|
}
|
|
if (iPosition == INVENTORY_SLOT_LEFTHAND || iPosition == INVENTORY_SLOT_CHEST)
|
|
{
|
|
iProperty=ItemPropertyACBonus(iItemLevel);
|
|
IPSafeAddItemProperty(oItem,iProperty);
|
|
sPlus="+" + IntToString(iItemLevel);
|
|
}
|
|
|
|
|
|
iProperties = 0;
|
|
|
|
if (iPosition < -1)
|
|
{
|
|
iProperty=GetCastSpell(iItemLevel);
|
|
IPSafeAddItemProperty(oItem,iProperty);
|
|
if (Random(2)==0)
|
|
{
|
|
iProperty=GetCastSpell(iItemLevel);
|
|
IPSafeAddItemProperty(oItem,iProperty);
|
|
}
|
|
if (Random(3)==0)
|
|
{
|
|
iProperty=GetCastSpell(iItemLevel);
|
|
IPSafeAddItemProperty(oItem,iProperty);
|
|
}
|
|
iProperties=99;
|
|
iEnchantments=0;
|
|
}
|
|
|
|
if (iPosition == -1)
|
|
{
|
|
iProperty=ItemPropertyEnhancementBonus(iItemLevel);
|
|
IPSafeAddItemProperty(oItem,iProperty);
|
|
iProperty=GetCastSpell(iItemLevel);
|
|
IPSafeAddItemProperty(oItem,iProperty);
|
|
if (Random(2)==0)
|
|
{
|
|
iProperty=GetCastSpell(iItemLevel);
|
|
IPSafeAddItemProperty(oItem,iProperty);
|
|
}
|
|
if (Random(3)==0)
|
|
{
|
|
iProperty=GetCastSpell(iItemLevel);
|
|
IPSafeAddItemProperty(oItem,iProperty);
|
|
}
|
|
if (Random(3)==0)
|
|
{
|
|
iEnchantments = IPGetNumberOfItemProperties(oItem)+1;
|
|
} else {
|
|
iProperties=99;
|
|
iEnchantments=0;
|
|
}
|
|
}
|
|
|
|
iIndex=0;
|
|
while (iProperties < iEnchantments)
|
|
{
|
|
iIndex++;
|
|
if (iPosition==INVENTORY_SLOT_RIGHTHAND && !IPGetIsRangedWeapon(oItem))
|
|
iProperty=WeaponProperty(iItemLevel,oItem);
|
|
else if (iPosition==INVENTORY_SLOT_LEFTHAND || iPosition==INVENTORY_SLOT_CHEST)
|
|
iProperty=ArmorProperty(iItemLevel,oItem);
|
|
else
|
|
iProperty=MiscProperty(iItemLevel,oItem);
|
|
|
|
IPSafeAddItemProperty(oItem,iProperty);
|
|
|
|
iProperties = IPGetNumberOfItemProperties(oItem);
|
|
if (iIndex > 50)
|
|
iProperties=99;
|
|
}
|
|
|
|
sName=GetName(oItem);
|
|
sName=Trim(sName);
|
|
iPreCount = GetLocalInt(oItem,"ItemPreNameCount");
|
|
iPostCount = GetLocalInt(oItem,"ItemPostNameCount");
|
|
|
|
if (iPreCount>0 || iPostCount>0 || sPlus !="")
|
|
{
|
|
if (GetStringLeft(sName,9) == "Enchanted")
|
|
sName=GetStringRight(sName,GetStringLength(sName)-10);
|
|
if (GetStringLeft(sName,7) == "Magical")
|
|
sName=GetStringRight(sName,GetStringLength(sName)-8);
|
|
}
|
|
|
|
if (iPreCount>0)
|
|
sName = GetLocalString(oItem,"ItemPreName") + " " + sName;
|
|
if (iPostCount>0)
|
|
sName = sName + GetLocalString(oItem,"ItemPostName");
|
|
if (sPlus != "")
|
|
sName = sPlus + " " + sName;
|
|
|
|
iTest=0;
|
|
|
|
if (GetStringLeft(sName,10) == "en3_gloves" && Random(20)==0)
|
|
iTest=1;
|
|
if (GetStringLeft(sName,8) == "en3_belt" && Random(20)==0)
|
|
iTest=1;
|
|
if (GetStringLeft(sName,9) == "en3_boots" && Random(20)==0)
|
|
iTest=1;
|
|
if (GetStringLeft(sName,9) == "en3_cloak" && Random(20)==0)
|
|
iTest=1;
|
|
if (GetStringLeft(sName,10) == "en3_amulet" && Random(20)==0)
|
|
iTest=1;
|
|
if (GetStringLeft(sName,8) == "en3_ring" && Random(20)==0)
|
|
iTest=1;
|
|
if (GetStringLeft(sName,8) == "en3_helm" && Random(20)==0)
|
|
iTest=1;
|
|
|
|
if (iTest==1)
|
|
{
|
|
iRandom=Random(6)+1;
|
|
if (iRandom==1)
|
|
sName="Talbert's " + sName;
|
|
if (iRandom==2)
|
|
sName="Elrondel's " + sName;
|
|
if (iRandom==3)
|
|
sName="Gargash's " + sName;
|
|
if (iRandom==4)
|
|
sName="Zod's " + sName;
|
|
if (iRandom==5)
|
|
sName="Taendel's " + sName;
|
|
if (iRandom==6)
|
|
sName="Phaelen's " + sName;
|
|
}
|
|
SetName(oItem,sName);
|
|
|
|
}
|
|
|
|
string SetTagName(string sItemName)
|
|
{
|
|
if (Random(5)>0)
|
|
sItemName = sItemName + ItS(Random(4)+1);
|
|
|
|
return sItemName;
|
|
}
|
|
|
|
string Trim(string sString)
|
|
{
|
|
int iFlag;
|
|
|
|
iFlag=TRUE;
|
|
while (iFlag)
|
|
{
|
|
if (GetStringLeft(sString,1) == " ")
|
|
sString=GetStringRight(sString,GetStringLength(sString)-1);
|
|
else
|
|
iFlag=FALSE;
|
|
}
|
|
|
|
iFlag=TRUE;
|
|
while (iFlag)
|
|
{
|
|
if (GetStringRight(sString,1) == " ")
|
|
sString=GetStringLeft(sString,GetStringLength(sString)-1);
|
|
else
|
|
iFlag=FALSE;
|
|
}
|
|
return sString;
|
|
}
|
|
|
|
void SetPostName(object oItem,string sName)
|
|
{
|
|
int iCount;
|
|
|
|
iCount = GetLocalInt(oItem,"ItemPostNameCount");
|
|
iCount++;
|
|
SetLocalInt(oItem,"ItemPostNameCount",iCount);
|
|
|
|
if (iCount == 1)
|
|
SetLocalString(oItem,"ItemPostName"," of " + sName);
|
|
else if (iCount == 2)
|
|
SetLocalString(oItem,"ItemPostName",GetLocalString(oItem,"ItemPostName") + " and " + sName);
|
|
else
|
|
SetLocalString(oItem,"ItemPostName"," of Power");
|
|
|
|
}
|
|
|
|
void SetPreName(object oItem,string sName,string sAltName)
|
|
{
|
|
int iCount;
|
|
|
|
iCount = GetLocalInt(oItem,"ItemPreNameCount");
|
|
iCount++;
|
|
SetLocalInt(oItem,"ItemPreNameCount",iCount);
|
|
|
|
if (iCount == 1)
|
|
SetLocalString(oItem,"ItemPreName",sName);
|
|
else
|
|
SetPostName(oItem,sAltName);
|
|
}
|
|
|
|
|
|
int GetEnchantBonus(int iEnchant)
|
|
{
|
|
int iBonus;
|
|
|
|
iBonus = IP_CONST_DAMAGEBONUS_1;
|
|
|
|
if (iEnchant > 10)
|
|
iBonus = IP_CONST_DAMAGEBONUS_2d10;
|
|
|
|
switch (iEnchant)
|
|
{
|
|
case 1: iBonus = IP_CONST_DAMAGEBONUS_1; break;
|
|
case 2: iBonus = IP_CONST_DAMAGEBONUS_2; break;
|
|
case 3: iBonus = IP_CONST_DAMAGEBONUS_3; break;
|
|
case 4: iBonus = IP_CONST_DAMAGEBONUS_4; break;
|
|
case 5: iBonus = IP_CONST_DAMAGEBONUS_5; break;
|
|
case 6: iBonus = IP_CONST_DAMAGEBONUS_6; break;
|
|
case 7: iBonus = IP_CONST_DAMAGEBONUS_7; break;
|
|
case 8: iBonus = IP_CONST_DAMAGEBONUS_8; break;
|
|
case 9: iBonus = IP_CONST_DAMAGEBONUS_9; break;
|
|
case 10: iBonus = IP_CONST_DAMAGEBONUS_10; break;
|
|
}
|
|
|
|
return iBonus;
|
|
}
|
|
|
|
int GetUnlimitedEnchantBonus(int iEnchant)
|
|
{
|
|
int iBonus;
|
|
|
|
iBonus = IP_CONST_UNLIMITEDAMMO_PLUS1;
|
|
|
|
if (iEnchant > 5)
|
|
iBonus = IP_CONST_UNLIMITEDAMMO_PLUS5;
|
|
|
|
switch (iEnchant)
|
|
{
|
|
case 1: iBonus = IP_CONST_UNLIMITEDAMMO_PLUS1; break;
|
|
case 2: iBonus = IP_CONST_UNLIMITEDAMMO_PLUS2; break;
|
|
case 3: iBonus = IP_CONST_UNLIMITEDAMMO_PLUS3; break;
|
|
case 4: iBonus = IP_CONST_UNLIMITEDAMMO_PLUS4; break;
|
|
case 5: iBonus = IP_CONST_UNLIMITEDAMMO_PLUS5; break;
|
|
}
|
|
|
|
return iBonus;
|
|
}
|
|
|
|
void SetABName(object oItem,int iX)
|
|
{
|
|
if (iX==IP_CONST_ABILITY_CHA)
|
|
SetPostName(oItem,"Charisma");
|
|
if (iX==IP_CONST_ABILITY_CON)
|
|
SetPostName(oItem,"Constitution");
|
|
if (iX==IP_CONST_ABILITY_DEX)
|
|
SetPostName(oItem,"Dexterity");
|
|
if (iX==IP_CONST_ABILITY_INT)
|
|
SetPostName(oItem,"Intelligence");
|
|
if (iX==IP_CONST_ABILITY_STR)
|
|
SetPostName(oItem,"Strength");
|
|
if (iX==IP_CONST_ABILITY_WIS)
|
|
SetPostName(oItem,"Wisdom");
|
|
}
|
|
|
|
itemproperty WeaponProperty(int iEnchant, object oItem)
|
|
{
|
|
int iX;
|
|
int iY;
|
|
int iZ;
|
|
int iRandom;
|
|
int iRandom2;
|
|
int iRandom3;
|
|
int iEnchant2;
|
|
itemproperty iProperty;
|
|
string sX;
|
|
|
|
iRandom=Random(100)+1;
|
|
if (iRandom<5)
|
|
{
|
|
if (GetTag(oItem) == "en3_monkgloves2")
|
|
iProperty=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_1d4);
|
|
else
|
|
iProperty=ItemPropertyAttackBonus(iEnchant + Random(2)+1);
|
|
SetPostName(oItem,"Accuracy");
|
|
}
|
|
else if (iRandom<7)
|
|
{
|
|
iRandom2 = Random(5);
|
|
iProperty=ItemPropertyAttackBonusVsAlign(iRandom2,iEnchant + Random(3)+2);
|
|
SetPostName(oItem,"Vengence");
|
|
}
|
|
else if (iRandom<9)
|
|
{
|
|
if (iEnchant>3 && !(GetTag(oItem) == "en3_monkgloves2"))
|
|
iProperty=ItemPropertyHolyAvenger();
|
|
else
|
|
iProperty=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d6);
|
|
SetPreName(oItem,"Holy","Divine Might");
|
|
}
|
|
else if (iRandom<12)
|
|
{
|
|
iX = Random(20);
|
|
iProperty=ItemPropertyMassiveCritical(iX);
|
|
SetPreName(oItem,"Punishing","Punishment");
|
|
}
|
|
else if (iRandom<15)
|
|
{
|
|
//vamp 1
|
|
iX = Random(iEnchant) + 1 + (iEnchant-1)/2;
|
|
iProperty=ItemPropertyVampiricRegeneration(iX);
|
|
SetPreName(oItem,"Vampiric","Life Stealing");
|
|
}
|
|
else if (iRandom<18)
|
|
{
|
|
//keen
|
|
iProperty=ItemPropertyKeen();
|
|
SetPreName(oItem,"Sharp","Sharpness");
|
|
}
|
|
else if (iRandom<20)
|
|
{
|
|
//enchant vs Align
|
|
if (GetTag(oItem) == "en3_monkgloves2")
|
|
iProperty=ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_1d6);
|
|
else
|
|
{
|
|
iEnchant2 = iEnchant+1+Random(3);
|
|
iZ = Random(6);
|
|
iProperty=ItemPropertyEnhancementBonusVsAlign(iZ,iEnchant2);
|
|
}
|
|
SetPostName(oItem,"Vengence");
|
|
}
|
|
else if (iRandom<21)
|
|
{
|
|
iProperty=ItemPropertyHaste();
|
|
if (Random(2)==0)
|
|
SetPostName(oItem,"Speed");
|
|
else
|
|
SetPreName(oItem,"Quick","Quickness");
|
|
}
|
|
else if (iRandom<23)
|
|
{
|
|
//dmg bonus (any)
|
|
iX = DamageType();
|
|
iY = DamageBonus();
|
|
iProperty=ItemPropertyDamageBonus(iX,iY);
|
|
SetDBName(oItem,iX);
|
|
}
|
|
else if (iRandom<25)
|
|
{
|
|
//dmg bonus vs Align
|
|
iX = DamageType();
|
|
iY = DamageBonus();
|
|
iZ = Random(6);
|
|
iProperty=ItemPropertyDamageBonusVsAlign(iZ,iX,iY);
|
|
SetPostName(oItem,"Vengence");
|
|
}
|
|
else if (iRandom<26)
|
|
{
|
|
//dmg bonus vs Race
|
|
iX = DamageType();
|
|
iY = DamageBonus();
|
|
iZ = Random(24);
|
|
iProperty=ItemPropertyDamageBonusVsRace(iZ,iX,iY);
|
|
SetPostName(oItem,"Vengence");
|
|
}
|
|
else if (iRandom<50)
|
|
{
|
|
//dmg bonus based on iEnchant
|
|
iX = DamageType();
|
|
iRandom2 = Random(5)+ iEnchant;
|
|
iY = IP_CONST_DAMAGEBONUS_1;
|
|
switch (iRandom2)
|
|
{
|
|
case 1: iY=IP_CONST_DAMAGEBONUS_2; break;
|
|
case 2: iY=IP_CONST_DAMAGEBONUS_1d4; break;
|
|
case 3: iY=IP_CONST_DAMAGEBONUS_1d6; break;
|
|
case 4: iY=IP_CONST_DAMAGEBONUS_1d8; break;
|
|
case 5: iY=IP_CONST_DAMAGEBONUS_1d10; break;
|
|
case 6: iY=IP_CONST_DAMAGEBONUS_1d12; break;
|
|
}
|
|
iProperty=ItemPropertyDamageBonus(iX,iY);
|
|
SetDBName(oItem,iX);
|
|
}
|
|
else if (iRandom<51)
|
|
{
|
|
iRandom2=Random(6);
|
|
if (iRandom2==0) { iX=IP_CONST_ONHIT_BLINDNESS; }
|
|
if (iRandom2==1) { iX=IP_CONST_ONHIT_CONFUSION; }
|
|
if (iRandom2==2) { iX=IP_CONST_ONHIT_SLEEP; }
|
|
if (iRandom2==3) { iX=IP_CONST_ONHIT_DAZE; }
|
|
if (iRandom2==4) { iX=IP_CONST_ONHIT_DEAFNESS; }
|
|
if (iRandom2==5) { iX=IP_CONST_ONHIT_FEAR; }
|
|
iRandom2=Random(4);
|
|
if (iRandom2<2) { iY=IP_CONST_ONHIT_SAVEDC_16; }
|
|
if (iRandom2==2) { iY=IP_CONST_ONHIT_SAVEDC_18; }
|
|
if (iRandom2==3) { iY=IP_CONST_ONHIT_SAVEDC_20; }
|
|
iRandom2=Random(3);
|
|
if (iRandom2==1) { iZ=IP_CONST_ONHIT_DURATION_10_PERCENT_4_ROUNDS; }
|
|
if (iRandom2==2) { iZ=IP_CONST_ONHIT_DURATION_25_PERCENT_3_ROUNDS; }
|
|
if (iRandom2==3) { iZ=IP_CONST_ONHIT_DURATION_50_PERCENT_2_ROUNDS; }
|
|
|
|
iProperty=ItemPropertyOnHitProps(iX,iY,iZ);
|
|
SetPostName(oItem,"Enchantment");
|
|
}
|
|
else if (iRandom<52)
|
|
{
|
|
iRandom2=Random(3);
|
|
if (iRandom2==0) { iX=IP_CONST_ONHIT_DISPELMAGIC; }
|
|
if (iRandom2==1) { iX=IP_CONST_ONHIT_GREATERDISPEL; }
|
|
if (iRandom2==2) { iX=IP_CONST_ONHIT_SILENCE; }
|
|
iRandom2=Random(4);
|
|
if (iRandom2<2) { iY=IP_CONST_ONHIT_SAVEDC_16; }
|
|
if (iRandom2==2) { iY=IP_CONST_ONHIT_SAVEDC_18; }
|
|
if (iRandom2==3) { iY=IP_CONST_ONHIT_SAVEDC_20; }
|
|
iRandom2=Random(3);
|
|
if (iRandom2==1) { iZ=IP_CONST_ONHIT_DURATION_10_PERCENT_4_ROUNDS; }
|
|
if (iRandom2==2) { iZ=IP_CONST_ONHIT_DURATION_25_PERCENT_3_ROUNDS; }
|
|
if (iRandom2==3) { iZ=IP_CONST_ONHIT_DURATION_50_PERCENT_2_ROUNDS; }
|
|
|
|
iProperty=ItemPropertyOnHitProps(iX,iY,iZ);
|
|
if (iX==IP_CONST_ONHIT_SILENCE)
|
|
SetPostName(oItem,"Silencing");
|
|
else
|
|
SetPostName(oItem,"Dispelling");
|
|
}
|
|
else if (iRandom<53)
|
|
{
|
|
iRandom2=Random(3);
|
|
if (iRandom2<3) { iX=IP_CONST_ONHIT_SLOW; sX="Slowing"; }
|
|
if (iRandom2<5) { iX=IP_CONST_ONHIT_HOLD; sX="Holding"; }
|
|
if (iRandom2<7) { iX=IP_CONST_ONHIT_STUN; sX="Stunning"; }
|
|
if (iRandom2<9) { iX=IP_CONST_ONHIT_WOUNDING; sX="Wounding"; }
|
|
if (iRandom2==9) { iX=IP_CONST_ONHIT_VORPAL; sX="Death"; }
|
|
if (iRandom2==10) { iX=IP_CONST_ONHIT_SLAYALIGNMENTGROUP; sX="Slaying"; }
|
|
iRandom2=Random(4);
|
|
if (iRandom2<2) { iY=IP_CONST_ONHIT_SAVEDC_16; }
|
|
if (iRandom2==2) { iY=IP_CONST_ONHIT_SAVEDC_18; }
|
|
if (iRandom2==3) { iY=IP_CONST_ONHIT_SAVEDC_20; }
|
|
iRandom2=Random(3);
|
|
if (iRandom2==1) { iZ=IP_CONST_ONHIT_DURATION_10_PERCENT_4_ROUNDS; }
|
|
if (iRandom2==2) { iZ=IP_CONST_ONHIT_DURATION_25_PERCENT_3_ROUNDS; }
|
|
if (iRandom2==3) { iZ=IP_CONST_ONHIT_DURATION_50_PERCENT_2_ROUNDS; }
|
|
|
|
if (iX==IP_CONST_ONHIT_SLAYALIGNMENTGROUP)
|
|
{
|
|
iRandom2=Random(5);
|
|
if (iRandom2==1) { iZ=IP_CONST_ALIGNMENTGROUP_ALL; }
|
|
if (iRandom2==2) { iZ=IP_CONST_ALIGNMENTGROUP_CHAOTIC; }
|
|
if (iRandom2==3) { iZ=IP_CONST_ALIGNMENTGROUP_LAWFUL; }
|
|
if (iRandom2==4) { iZ=IP_CONST_ALIGNMENTGROUP_EVIL; }
|
|
if (iRandom2==5) { iZ=IP_CONST_ALIGNMENTGROUP_NEUTRAL; }
|
|
}
|
|
iProperty=ItemPropertyOnHitProps(iX,iY,iZ);
|
|
SetPostName(oItem,sX);
|
|
}
|
|
else if (iRandom<54)
|
|
{
|
|
iRandom2=Random(2);
|
|
if (iRandom2==0) { iX=IP_CONST_ONHIT_DISEASE; sX="Disease"; }
|
|
if (iRandom2==1) { iX=IP_CONST_ONHIT_ITEMPOISON; sX="Poisoning"; }
|
|
iRandom2=Random(4);
|
|
if (iRandom2<2) { iY=IP_CONST_ONHIT_SAVEDC_16; }
|
|
if (iRandom2==2) { iY=IP_CONST_ONHIT_SAVEDC_18; }
|
|
if (iRandom2==3) { iY=IP_CONST_ONHIT_SAVEDC_20; }
|
|
if (iX==IP_CONST_ONHIT_DISEASE)
|
|
{
|
|
iZ=Random(18);
|
|
} else {
|
|
iZ=Random(46);
|
|
}
|
|
iProperty=ItemPropertyOnHitProps(iX,iY,iZ);
|
|
SetPostName(oItem,sX);
|
|
}
|
|
else if (iRandom<55)
|
|
{
|
|
iRandom2=Random(17);
|
|
if (iRandom2<2) { iX=IP_CONST_ONHIT_CASTSPELL_MAGIC_MISSILE; sX="Magic Missles"; }
|
|
if (iRandom2<4) { iX=IP_CONST_ONHIT_CASTSPELL_FLARE; sX="the Flare"; }
|
|
if (iRandom2<6) { iX=IP_CONST_ONHIT_CASTSPELL_ELECTRIC_JOLT; sX="Sparks"; }
|
|
if (iRandom2<8) { iX=IP_CONST_ONHIT_CASTSPELL_ACID_SPLASH; sX="Acid"; }
|
|
if (iRandom2<10) { iX=IP_CONST_ONHIT_CASTSPELL_CONTAGION; sX="Contagion"; }
|
|
if (iRandom2<12) { iX=IP_CONST_ONHIT_CASTSPELL_DISMISSAL; sX="Dismissal"; }
|
|
if (iRandom2<14) { iX=IP_CONST_ONHIT_CASTSPELL_BESTOW_CURSE; sX="Cursing"; }
|
|
if (iRandom2<16) { iX=IP_CONST_ONHIT_CASTSPELL_VAMPIRIC_TOUCH; sX="Vampires"; }
|
|
if (iRandom2==16) { iX=IP_CONST_ONHIT_CASTSPELL_LIGHTNING_BOLT; sX="Lightning Bolts"; }
|
|
if (iRandom2==17) { iX=IP_CONST_ONHIT_CASTSPELL_FIREBALL; sX="Fireballs"; }
|
|
iY=1;
|
|
if (Random(6)==0)
|
|
if (Random(10)==0)
|
|
iY=3;
|
|
else
|
|
iY=2;
|
|
iProperty=ItemPropertyOnHitCastSpell(iX,iY);
|
|
SetPostName(oItem,sX);
|
|
}
|
|
else if (iRandom<70)
|
|
{
|
|
iProperty=ItemPropertyACBonus(Random(iEnchant)+1);
|
|
SetPostName(oItem,"Defending");
|
|
}
|
|
else if (iRandom<75)
|
|
{
|
|
iProperty=ItemPropertyAbilityBonus(IP_CONST_ABILITY_STR,Random(iEnchant)+1);
|
|
SetPostName(oItem,"Strength");
|
|
}
|
|
else if (iRandom<76)
|
|
{
|
|
iX = DamageType();
|
|
iProperty=ItemPropertyDamageBonus(iX,IP_CONST_DAMAGEBONUS_1);
|
|
SetDBName(oItem,iX);
|
|
}
|
|
else if (iRandom<77)
|
|
{
|
|
iX = DamageType();
|
|
iProperty=ItemPropertyDamageBonus(iX,IP_CONST_DAMAGEBONUS_2);
|
|
SetDBName(oItem,iX);
|
|
}
|
|
else if (iRandom<78)
|
|
{
|
|
iX = DamageType();
|
|
iProperty=ItemPropertyDamageBonus(iX,IP_CONST_DAMAGEBONUS_3);
|
|
SetDBName(oItem,iX);
|
|
}
|
|
else if (iRandom<79)
|
|
{
|
|
iX = DamageType();
|
|
if (Random(3)==0)
|
|
iProperty=ItemPropertyDamageBonus(iX,IP_CONST_DAMAGEBONUS_4);
|
|
else
|
|
iProperty=ItemPropertyDamageBonus(iX,IP_CONST_DAMAGEBONUS_5);
|
|
SetDBName(oItem,iX);
|
|
}
|
|
else if (iRandom<80)
|
|
{
|
|
iX = DamageType();
|
|
iProperty=ItemPropertyDamageBonus(iX,IP_CONST_DAMAGEBONUS_1d4);
|
|
SetDBName(oItem,iX);
|
|
}
|
|
else if (iRandom<81)
|
|
{
|
|
iX = DamageType();
|
|
iProperty=ItemPropertyDamageBonus(iX,IP_CONST_DAMAGEBONUS_2d4);
|
|
SetDBName(oItem,iX);
|
|
}
|
|
else if (iRandom<82)
|
|
{
|
|
iX = DamageType();
|
|
iProperty=ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_POSITIVE,IP_CONST_DAMAGEBONUS_2d4);
|
|
SetPostName(oItem,"the Heavens");
|
|
}
|
|
else if (iRandom<83)
|
|
{
|
|
iX = DamageType();
|
|
iProperty=ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_2d4);
|
|
SetPostName(oItem,"Undead Smiting");
|
|
}
|
|
else if (iRandom<84)
|
|
{
|
|
iX = DamageType();
|
|
iProperty=ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGETYPE_POSITIVE,IP_CONST_DAMAGEBONUS_2d4);
|
|
SetPostName(oItem,"Demonic Smiting");
|
|
}
|
|
else if (iRandom<85)
|
|
{
|
|
iX = DamageType();
|
|
iProperty=ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_DRAGON,IP_CONST_DAMAGETYPE_MAGICAL,IP_CONST_DAMAGEBONUS_2d6);
|
|
SetPreName(oItem,"Dragonbane","Dragonslaying");
|
|
}
|
|
else if (iRandom<86)
|
|
{
|
|
if (Random(2)==0)
|
|
{
|
|
iProperty=ItemPropertyFreeAction();
|
|
SetPostName(oItem,"Freedom");
|
|
} else {
|
|
iProperty=ItemPropertyImprovedEvasion();
|
|
SetPostName(oItem,"Evasion");
|
|
}
|
|
}
|
|
else if (iRandom<87)
|
|
{
|
|
if (GetLocalInt(oItem,"TwoHanded") == 0)
|
|
{
|
|
iProperty=ItemPropertyBonusFeat(IP_CONST_FEAT_AMBIDEXTROUS);
|
|
IPSafeAddItemProperty(oItem,iProperty);
|
|
iProperty=ItemPropertyBonusFeat(IP_CONST_FEAT_TWO_WEAPON_FIGHTING);
|
|
SetPreName(oItem,"Offhand","Dueling");
|
|
} else {
|
|
iX=IP_CONST_FEAT_CLEAVE;
|
|
iProperty=ItemPropertyBonusFeat(iX);
|
|
SetPostName(oItem,"Cleaving");
|
|
}
|
|
}
|
|
else if (iRandom<88)
|
|
{
|
|
iRandom2=Random(3);
|
|
if (iRandom2==0) { iX=IP_CONST_FEAT_SNEAK_ATTACK_1D6; }
|
|
if (iRandom2==1) { iX=IP_CONST_FEAT_SNEAK_ATTACK_2D6; }
|
|
if (iRandom2==2) { iX=IP_CONST_FEAT_SNEAK_ATTACK_3D6; }
|
|
iProperty=ItemPropertyBonusFeat(iX);
|
|
if (Random(2)==0)
|
|
SetPostName(oItem,"the Assassin");
|
|
else
|
|
SetPostName(oItem,"the Night");
|
|
}
|
|
else if (iRandom<89)
|
|
{
|
|
iX=IP_CONST_FEAT_CLEAVE;
|
|
iProperty=ItemPropertyBonusFeat(iX);
|
|
SetPostName(oItem,"Cleaving");
|
|
}
|
|
else if (iRandom<90)
|
|
{
|
|
iRandom=(6)+iEnchant;
|
|
iX=IP_CONST_CASTSPELL_HEAL_11;
|
|
if (iRandom==1) { iX=IP_CONST_CASTSPELL_BLESS_2; }
|
|
if (iRandom==2) { iX=IP_CONST_CASTSPELL_LESSER_RESTORATION_3; }
|
|
if (iRandom==3) { iX=IP_CONST_CASTSPELL_MAGIC_MISSILE_5; }
|
|
if (iRandom==4) { iX=IP_CONST_CASTSPELL_BARKSKIN_3; }
|
|
if (iRandom==5) { iX=IP_CONST_CASTSPELL_BULLS_STRENGTH_3; }
|
|
if (iRandom==6) { iX=IP_CONST_CASTSPELL_DIVINE_MIGHT_5; }
|
|
if (iRandom==7) { iX=IP_CONST_CASTSPELL_CURE_SERIOUS_WOUNDS_10; }
|
|
if (iRandom==8) { iX=IP_CONST_CASTSPELL_FIREBALL_10; }
|
|
if (iRandom==9) { iX=IP_CONST_CASTSPELL_STONESKIN_7; }
|
|
if (iRandom==10) { iX=IP_CONST_CASTSPELL_HEAL_11; }
|
|
if (iRandom==11) { iX=IP_CONST_CASTSPELL_METEOR_SWARM_17; }
|
|
|
|
iProperty=ItemPropertyCastSpell(iX,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY);
|
|
SetPostName(oItem,"Magic");
|
|
}
|
|
else if (iRandom<99)
|
|
{
|
|
iX = DamageType();
|
|
iProperty=ItemPropertyDamageBonus(iX,IP_CONST_DAMAGEBONUS_1d6);
|
|
SetDBName(oItem,iX);
|
|
}
|
|
else if (iRandom<100)
|
|
{
|
|
iRandom2=Random(50);
|
|
if (iRandom2>0)
|
|
{
|
|
iX = DamageType();
|
|
iProperty=ItemPropertyDamageBonus(iX,IP_CONST_DAMAGEBONUS_2d6);
|
|
SetDBName(oItem,iX);
|
|
} else {
|
|
//on hit cast spell
|
|
iX = Random(130);
|
|
iY = Random(26)+5;
|
|
if (iX == IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER)
|
|
iX = IP_CONST_ONHIT_CASTSPELL_VAMPIRIC_TOUCH;
|
|
iProperty=ItemPropertyOnHitCastSpell(iX,iY);
|
|
SetPreName(oItem,"Legendary","Legends");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
iX = DamageType();
|
|
iProperty=ItemPropertyDamageBonus(iX,IP_CONST_DAMAGEBONUS_1d6);
|
|
SetDBName(oItem,iX);
|
|
}
|
|
|
|
return iProperty;
|
|
}
|
|
|
|
itemproperty ArmorProperty(int iEnchant, object oItem)
|
|
{
|
|
int iRandom;
|
|
int iRandom2;
|
|
int iX;
|
|
int iY;
|
|
itemproperty iProperty;
|
|
|
|
iRandom=Random(100)+1;
|
|
|
|
if (iRandom<10)
|
|
{
|
|
iRandom2 = Random(5);
|
|
iProperty=ItemPropertyACBonusVsAlign(iRandom2,iEnchant + Random(3)+2);
|
|
SetPostName(oItem,"Protection");
|
|
}
|
|
if (iRandom<15)
|
|
{
|
|
//AbilityBonus
|
|
iX = Random(6);
|
|
iRandom2 = Random(6) + 1;
|
|
iY = Random(3)+1;
|
|
iProperty = ItemPropertyAbilityBonus(iX,Random(iEnchant)+1);
|
|
SetABName(oItem,iX);
|
|
}
|
|
else if (iRandom<17)
|
|
{
|
|
iRandom2=Random(28);
|
|
iProperty=ItemPropertySkillBonus(iRandom2,iEnchant * 3);
|
|
SetPostName(oItem,"Skill");
|
|
}
|
|
else if (iRandom<22)
|
|
{
|
|
//SavingthrowBonus
|
|
iRandom2 = Random(3);
|
|
iProperty=ItemPropertyBonusSavingThrow(iRandom2,iEnchant);
|
|
SetPostName(oItem,"Protection");
|
|
}
|
|
else if (iRandom<27)
|
|
{
|
|
//SavingthrowBonus vs X
|
|
iRandom2 = Random(14);
|
|
iProperty=ItemPropertyBonusSavingThrowVsX(iRandom2,iEnchant);
|
|
SetPostName(oItem,"Protection");
|
|
}
|
|
else if (iRandom<32)
|
|
{
|
|
iProperty=ItemPropertyBonusSpellResistance(iEnchant-1);
|
|
SetPostName(oItem,"Resistance");
|
|
}
|
|
else if (iRandom<35)
|
|
{
|
|
//Bonus Feat
|
|
iRandom2 = Random(27);
|
|
iProperty=ItemPropertyBonusFeat(iRandom2);
|
|
SetPostName(oItem,"Ability");
|
|
}
|
|
else if (iRandom<40)
|
|
{
|
|
//Cast Spell
|
|
iProperty=GetCastSpell(iEnchant);
|
|
SetPostName(oItem,"Magic");
|
|
}
|
|
else if (iRandom<50)
|
|
{
|
|
//Damage Resistance
|
|
iX=Random(13);
|
|
if (iX == 3)
|
|
iX = 1;
|
|
iY=Random(10);
|
|
iProperty=ItemPropertyDamageResistance(iX,iEnchant);
|
|
SetPostName(oItem,"Resistance");
|
|
}
|
|
else if (iRandom<53)
|
|
{
|
|
//Damage Reduction
|
|
iX=Random(2);
|
|
iY=Random((iEnchant+1)/2);
|
|
if (Random(10)==0)
|
|
iY++;
|
|
if (iEnchant>4 && iY ==0)
|
|
iY=1;
|
|
iProperty=ItemPropertyDamageReduction(Random(iEnchant),iY);
|
|
SetPostName(oItem,"Shielding");
|
|
}
|
|
else if (iRandom<57)
|
|
{
|
|
//FreedomOfMovement
|
|
iProperty=ItemPropertyFreeAction();
|
|
SetPostName(oItem,"Freedom");
|
|
}
|
|
else if (iRandom<58)
|
|
{
|
|
//Haste
|
|
iProperty=ItemPropertyHaste();
|
|
SetPostName(oItem,"Speed");
|
|
}
|
|
else if (iRandom<60)
|
|
{
|
|
//TrueSeeing
|
|
iProperty=ItemPropertyTrueSeeing();
|
|
SetPostName(oItem,"True Seeing");
|
|
}
|
|
else if (iRandom<66)
|
|
{
|
|
//Regeneration
|
|
iProperty=ItemPropertyRegeneration(Random(iEnchant)+1);
|
|
SetPostName(oItem,"Regeneration");
|
|
}
|
|
else if (iRandom<68)
|
|
{
|
|
//immune Misc
|
|
iRandom2=Random(10);
|
|
iProperty=ItemPropertyImmunityMisc(iRandom2);
|
|
SetPostName(oItem,"Immunity");
|
|
}
|
|
else if (iRandom<70)
|
|
{
|
|
//immune Damage
|
|
iX=Random(13);
|
|
if (iX == 3)
|
|
iX = 1;
|
|
iY=Random(7);
|
|
iProperty=ItemPropertyDamageImmunity(iX,iY);
|
|
SetPostName(oItem,"Immunity");
|
|
}
|
|
else if (iRandom<72)
|
|
{
|
|
iProperty=ItemPropertyImprovedEvasion();
|
|
SetPostName(oItem,"Evasion");
|
|
}
|
|
else if (iRandom<73)
|
|
{
|
|
iProperty=ItemPropertyDarkvision();
|
|
SetPostName(oItem,"Vision");
|
|
}
|
|
else if (iRandom<74)
|
|
{
|
|
iProperty=ItemPropertyLight(Random(4),Random(7));
|
|
SetPostName(oItem,"Light");
|
|
}
|
|
else if (iRandom<80)
|
|
{
|
|
iProperty=ItemPropertyBonusSavingThrowVsX(IP_CONST_SAVEVS_UNIVERSAL,iEnchant);
|
|
SetPostName(oItem,"Universal Protection");
|
|
}
|
|
|
|
else if (iRandom<85)
|
|
{
|
|
//Damage Reduction
|
|
iX=Random(2);
|
|
iY=Random((iEnchant+1)/2);
|
|
iProperty=ItemPropertyDamageReduction(0,0);
|
|
SetPostName(oItem,"Minor Physical Shielding");
|
|
}
|
|
else if (iRandom<87)
|
|
{
|
|
//Damage Reduction
|
|
iX=Random(2);
|
|
iY=Random((iEnchant+1)/2);
|
|
iProperty=ItemPropertyDamageReduction(0,1);
|
|
SetPostName(oItem,"Physical Shielding");
|
|
}
|
|
else if (iRandom<88)
|
|
{
|
|
//Damage Reduction
|
|
iX=0;
|
|
if (Random(10)==0)
|
|
iX=1;
|
|
iProperty=ItemPropertyDamageReduction(Random(5),iX);
|
|
SetPostName(oItem,"Physical Shielding");
|
|
}
|
|
else if (iRandom<92)
|
|
{
|
|
//Damage Reduction
|
|
iRandom2=Random(3);
|
|
if (iRandom2==0)
|
|
iX = IP_CONST_DAMAGETYPE_BLUDGEONING;
|
|
else if (iRandom2==1)
|
|
iX = IP_CONST_DAMAGETYPE_SLASHING;
|
|
else
|
|
iX = IP_CONST_DAMAGETYPE_PIERCING;
|
|
|
|
if (iEnchant<5)
|
|
iY=Random(iEnchant);
|
|
else
|
|
iY=Random(3)+3;
|
|
|
|
iProperty=ItemPropertyDamageResistance(iX,iY);
|
|
SetPostName(oItem,"Shielding");
|
|
}
|
|
else if (iRandom<99)
|
|
{
|
|
//AbilityBonus
|
|
iRandom2=Random(4);
|
|
if (iRandom2==0)
|
|
iX = IP_CONST_ABILITY_DEX;
|
|
else if (iRandom2==1)
|
|
iX = IP_CONST_ABILITY_CON;
|
|
else
|
|
iX = IP_CONST_ABILITY_STR;
|
|
iProperty = ItemPropertyAbilityBonus(iX,Random(iEnchant-1)+2);
|
|
SetABName(oItem,iX);
|
|
}
|
|
else if (iRandom<100)
|
|
{
|
|
iRandom2 = Random(50)+1;
|
|
if (iRandom2<11)
|
|
{
|
|
iX = Random(6);
|
|
iY = Random(4)+5;
|
|
iProperty = ItemPropertyAbilityBonus(iX,iY);
|
|
SetABName(oItem,iX);
|
|
}
|
|
else if (iRandom2<21)
|
|
{
|
|
iRandom2 = Random(6)+6;
|
|
iProperty=ItemPropertyBonusSpellResistance(iRandom2);
|
|
SetPostName(oItem,"Exceptional Resistance");
|
|
}
|
|
else if (iRandom2<31)
|
|
{
|
|
//Damage Reduction
|
|
iX=Random(3)+2;
|
|
iY=Random(2)+2;
|
|
iProperty=ItemPropertyDamageReduction(iX,iY);
|
|
SetPostName(oItem,"Exceptional Shielding");
|
|
}
|
|
else if (iRandom2<40)
|
|
{
|
|
//Regeneration
|
|
iX=Random(5)+6;
|
|
iProperty=ItemPropertyRegeneration(iX);
|
|
SetPostName(oItem,"the Troll");
|
|
}
|
|
else if (iRandom2<50)
|
|
{
|
|
//immune spell by level
|
|
iRandom2 = Random(9)+1;
|
|
iProperty=ItemPropertyImmunityToSpellLevel(iRandom2);
|
|
SetPostName(oItem,"Magical Defense");
|
|
}
|
|
else if (iRandom<51)
|
|
{
|
|
//immune spell school
|
|
iRandom2=Random(8);
|
|
iProperty=ItemPropertySpellImmunitySchool(iRandom2);
|
|
SetPostName(oItem,"Legendary Immunity");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
iRandom2=Random(50);
|
|
if (iRandom2>0)
|
|
{
|
|
iProperty=ItemPropertyHaste();
|
|
} else {
|
|
//on hit cast spell
|
|
iX = Random(130);
|
|
iY = Random(26)+5;
|
|
if (iX == IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER)
|
|
iX = IP_CONST_ONHIT_CASTSPELL_VAMPIRIC_TOUCH;
|
|
iProperty=ItemPropertyOnHitCastSpell(iX,iY);
|
|
}
|
|
}
|
|
return iProperty;
|
|
}
|
|
|
|
itemproperty MiscProperty(int iEnchant, object oItem)
|
|
{
|
|
int iX;
|
|
int iY;
|
|
int iZ;
|
|
int iRandom;
|
|
int iRandom2;
|
|
int iRandom3;
|
|
int iEnchant2;
|
|
itemproperty iProperty;
|
|
|
|
iRandom=Random(100)+1;
|
|
|
|
if (iRandom<15)
|
|
{
|
|
//AbilityBonus
|
|
iX = Random(6);
|
|
iRandom2 = Random(6) + 1;
|
|
iY = Random(3)+1;
|
|
iProperty = ItemPropertyAbilityBonus(iX,Random(iEnchant)+1);
|
|
SetABName(oItem,iX);
|
|
}
|
|
else if (iRandom<30)
|
|
{
|
|
iProperty=ItemPropertyACBonus(iEnchant);
|
|
SetPostName(oItem,"+" + IntToString(iEnchant) + " Defense");
|
|
}
|
|
else if (iRandom<32)
|
|
{
|
|
iRandom2=Random(28);
|
|
iProperty=ItemPropertySkillBonus(iRandom2,iEnchant * 3);
|
|
SetPostName(oItem,"Skill");
|
|
}
|
|
else if (iRandom<35)
|
|
{
|
|
iRandom2 = Random(5);
|
|
iProperty=ItemPropertyACBonusVsAlign(iRandom2,iEnchant + Random(3)+2);
|
|
SetPostName(oItem,"Protection");
|
|
}
|
|
else if (iRandom<40)
|
|
{
|
|
//SavingthrowBonus
|
|
iRandom3 = Random(3);
|
|
iProperty=ItemPropertyBonusSavingThrow(iRandom3,iEnchant);
|
|
SetPostName(oItem,"Protection");
|
|
}
|
|
else if (iRandom<45)
|
|
{
|
|
//SavingthrowBonus vs X
|
|
iRandom3 = Random(14);
|
|
iProperty=ItemPropertyBonusSavingThrowVsX(iRandom3,iEnchant);
|
|
SetPostName(oItem,"Protection");
|
|
}
|
|
else if (iRandom<50)
|
|
{
|
|
iProperty=ItemPropertyBonusSpellResistance(iEnchant-1);
|
|
SetPostName(oItem,"Spell Resistance");
|
|
}
|
|
else if (iRandom<52)
|
|
{
|
|
//Bonus Feat
|
|
iRandom3 = Random(27);
|
|
iProperty=ItemPropertyBonusFeat(iRandom3);
|
|
SetPostName(oItem,"Ability");
|
|
}
|
|
else if (iRandom<55)
|
|
{
|
|
//Cast Spell
|
|
iProperty=GetCastSpell(iEnchant);
|
|
SetPostName(oItem,"Magic");
|
|
}
|
|
else if (iRandom<60)
|
|
{
|
|
iX = IP_CONST_DAMAGETYPE_MAGICAL;
|
|
iY=Random(8);
|
|
if (iY==0) { iX=IP_CONST_DAMAGETYPE_ACID; }
|
|
if (iY==1) { iX=IP_CONST_DAMAGETYPE_COLD; }
|
|
if (iY==2) { iX=IP_CONST_DAMAGETYPE_DIVINE; }
|
|
if (iY==3) { iX=IP_CONST_DAMAGETYPE_ELECTRICAL; }
|
|
if (iY==4) { iX=IP_CONST_DAMAGETYPE_FIRE; }
|
|
if (iY==5) { iX=IP_CONST_DAMAGETYPE_MAGICAL; }
|
|
if (iY==6) { iX=IP_CONST_DAMAGETYPE_SONIC; }
|
|
if (iY==7) { iX=IP_CONST_DAMAGETYPE_NEGATIVE; }
|
|
iProperty=ItemPropertyDamageResistance(iX,iEnchant);
|
|
|
|
SetPostName(oItem,"Magical Shielding");
|
|
}
|
|
else if (iRandom<62)
|
|
{
|
|
//Damage Reduction
|
|
iX=Random(2);
|
|
iY=Random((iEnchant+1)/2);
|
|
if (Random(10)==0)
|
|
iY++;
|
|
if (iEnchant>4 && iY ==0)
|
|
iY=1;
|
|
iProperty=ItemPropertyDamageReduction(Random(iEnchant),iY);
|
|
SetPostName(oItem,"Shielding");
|
|
}
|
|
else if (iRandom<65)
|
|
{
|
|
//FreedomOfMovement
|
|
iProperty=ItemPropertyFreeAction();
|
|
SetPostName(oItem,"Freedom");
|
|
}
|
|
else if (iRandom<66)
|
|
{
|
|
//Haste
|
|
iProperty=ItemPropertyHaste();
|
|
SetPostName(oItem,"Speed");
|
|
}
|
|
else if (iRandom<68)
|
|
{
|
|
//TrueSeeing
|
|
iProperty=ItemPropertyTrueSeeing();
|
|
SetPostName(oItem,"True Seeing");
|
|
}
|
|
else if (iRandom<72)
|
|
{
|
|
//Regeneration
|
|
iProperty=ItemPropertyRegeneration(Random(iEnchant)+1);
|
|
SetPostName(oItem,"Regeneration");
|
|
}
|
|
else if (iRandom<74)
|
|
{
|
|
iRandom3=Random(10);
|
|
iProperty=ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_FEAR);
|
|
SetPostName(oItem,"Courage");
|
|
}
|
|
else if (iRandom<75)
|
|
{
|
|
iRandom3=Random(10);
|
|
iProperty=ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_DEATH_MAGIC);
|
|
SetPostName(oItem,"Life");
|
|
}
|
|
else if (iRandom<76)
|
|
{
|
|
//immune Damage
|
|
iX=Random(13);
|
|
if (iX == 3)
|
|
iX = 1;
|
|
iY=Random(7);
|
|
iProperty=ItemPropertyDamageImmunity(iX,iY);
|
|
SetPostName(oItem,"Immunity");
|
|
}
|
|
else if (iRandom<77)
|
|
{
|
|
iProperty=ItemPropertyImprovedEvasion();
|
|
SetPostName(oItem,"Evasion");
|
|
}
|
|
else if (iRandom<79)
|
|
{
|
|
iProperty=ItemPropertyDarkvision();
|
|
SetPostName(oItem,"Vision");
|
|
}
|
|
else if (iRandom<80)
|
|
{
|
|
iProperty=ItemPropertyLight(Random(4),Random(7));
|
|
SetPostName(oItem,"Light");
|
|
}
|
|
else if (iRandom<82)
|
|
{
|
|
iProperty=ItemPropertyBonusSavingThrowVsX(IP_CONST_SAVEVS_UNIVERSAL,iEnchant);
|
|
SetPostName(oItem,"Universal Protection");
|
|
}
|
|
else if (iRandom<83)
|
|
{
|
|
//AbilityBonus
|
|
iX = Random(6);
|
|
iRandom2 = Random(6) + 1;
|
|
iY = Random(3)+1;
|
|
iProperty = ItemPropertyAbilityBonus(iX,Random(iEnchant)+1);
|
|
SetABName(oItem,iX);
|
|
}
|
|
else if (iRandom<84)
|
|
{
|
|
if (Random(10)>0)
|
|
iProperty=ItemPropertyImmunityToSpellLevel(1);
|
|
else
|
|
if (Random(10)>0)
|
|
iProperty=ItemPropertyImmunityToSpellLevel(2);
|
|
else
|
|
iProperty=ItemPropertyImmunityToSpellLevel(3);
|
|
|
|
SetPostName(oItem,"Spell Immunity");
|
|
}
|
|
else if (iRandom<85)
|
|
{
|
|
if (Random(50)>0)
|
|
{
|
|
iProperty=ItemPropertySpellImmunitySpecific(Random(364));
|
|
SetPostName(oItem,"Spell Protection");
|
|
}
|
|
else
|
|
{
|
|
iProperty=ItemPropertySpellImmunitySchool(Random(8));
|
|
SetPostName(oItem,"Magic Protection");
|
|
}
|
|
}
|
|
else if (iRandom<86)
|
|
{
|
|
if (Random(3)==0)
|
|
{
|
|
iProperty=ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_BLUDGEONING,Random(4));
|
|
SetPostName(oItem,"Physical Shielding");
|
|
}
|
|
else if (Random(2)==0)
|
|
{
|
|
iProperty=ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SLASHING,Random(4));
|
|
SetPostName(oItem,"Physical Shielding");
|
|
}
|
|
else
|
|
{
|
|
iProperty=ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_PIERCING,Random(4));
|
|
SetPostName(oItem,"Physical Shielding");
|
|
}
|
|
}
|
|
else if (iRandom<91)
|
|
{
|
|
iProperty=ItemPropertyACBonus(iEnchant);
|
|
SetPostName(oItem,"+" + IntToString(iEnchant) + " Defense");
|
|
}
|
|
else if (iRandom<92)
|
|
{
|
|
//immune Misc
|
|
iRandom3=Random(10);
|
|
iProperty=ItemPropertyImmunityMisc(iRandom3);
|
|
SetPostName(oItem,"Immunity");
|
|
}
|
|
else if (iRandom<93)
|
|
{
|
|
if (Random(2)==0)
|
|
{
|
|
iProperty=ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_MINDSPELLS);
|
|
SetPostName(oItem,"the Mind's Guard");
|
|
} else {
|
|
iProperty=ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS);
|
|
SetPostName(oItem,"the Guardian Angel");
|
|
}
|
|
}
|
|
else if (iRandom<94)
|
|
{
|
|
iProperty=ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_PARALYSIS);
|
|
SetPostName(oItem,"Movement");
|
|
}
|
|
else if (iRandom<95)
|
|
{
|
|
iProperty=ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_DISEASE);
|
|
SetPostName(oItem,"Health");
|
|
}
|
|
else if (iRandom<96)
|
|
{
|
|
iProperty=ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_POISON);
|
|
SetPostName(oItem,"Health");
|
|
}
|
|
else if (iRandom<97)
|
|
{
|
|
iProperty=ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN);
|
|
SetPostName(oItem,"Life");
|
|
}
|
|
else if (iRandom<98)
|
|
{
|
|
if (Random(2)==0)
|
|
{
|
|
iProperty=ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_KNOCKDOWN);
|
|
SetPostName(oItem,"the Oak");
|
|
} else {
|
|
iProperty=ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_BACKSTAB);
|
|
SetPostName(oItem,"the Assassin's guard");
|
|
}
|
|
}
|
|
else if (iRandom<100)
|
|
{
|
|
iProperty=ItemPropertyACBonus(iEnchant);
|
|
SetPostName(oItem,"+" + IntToString(iEnchant) + " Defense");
|
|
}
|
|
else if (iRandom<101)
|
|
{
|
|
iRandom2 = Random(50)+1;
|
|
if (iRandom2<11)
|
|
{
|
|
iX = Random(6);
|
|
iY = Random(4)+5;
|
|
iProperty = ItemPropertyAbilityBonus(iX,iY);
|
|
SetABName(oItem,iX);
|
|
}
|
|
else if (iRandom2<21)
|
|
{
|
|
iRandom3 = Random(6)+6;
|
|
iProperty=ItemPropertyBonusSpellResistance(iRandom3);
|
|
SetPostName(oItem,"Exceptional Resistance");
|
|
}
|
|
else if (iRandom2<31)
|
|
{
|
|
//Damage Reduction
|
|
iX=Random(3)+2;
|
|
iY=Random(2)+2;
|
|
iProperty=ItemPropertyDamageReduction(iX,iY);
|
|
SetPostName(oItem,"Exceptional Shielding");
|
|
}
|
|
else if (iRandom2<40)
|
|
{
|
|
//Regeneration
|
|
iX=Random(5)+6;
|
|
iProperty=ItemPropertyRegeneration(iX);
|
|
SetPostName(oItem,"the Troll");
|
|
}
|
|
else if (iRandom2<50)
|
|
{
|
|
//immune spell by level
|
|
iRandom3 = Random(9)+1;
|
|
iProperty=ItemPropertyImmunityToSpellLevel(iRandom3);
|
|
SetPostName(oItem,"Magical Defense");
|
|
}
|
|
else if (iRandom<51)
|
|
{
|
|
//immune spell school
|
|
iRandom3=Random(8);
|
|
iProperty=ItemPropertySpellImmunitySchool(iRandom3);
|
|
SetPostName(oItem,"Legendary Immunity");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
iProperty=ItemPropertyACBonus(iEnchant);
|
|
SetPostName(oItem,"+" + IntToString(iEnchant) + " Defense");
|
|
}
|
|
|
|
return iProperty;
|
|
}
|
|
|
|
void SetDBName(object oItem,int iX)
|
|
{
|
|
switch (iX)
|
|
{
|
|
case IP_CONST_DAMAGETYPE_ACID: SetPreName(oItem,"Acidic","Acid"); break;
|
|
case IP_CONST_DAMAGETYPE_BLUDGEONING: SetPreName(oItem,"Bludgeoning","Bludgeoning"); break;
|
|
case IP_CONST_DAMAGETYPE_COLD: SetPreName(oItem,"Freezing","Winter"); break;
|
|
case IP_CONST_DAMAGETYPE_ELECTRICAL: SetPreName(oItem,"Lightning","Storms"); break;
|
|
case IP_CONST_DAMAGETYPE_FIRE: SetPreName(oItem,"Flaming","Flames"); break;
|
|
case IP_CONST_DAMAGETYPE_PIERCING: SetPreName(oItem,"Piercing","Wounds"); break;
|
|
case IP_CONST_DAMAGETYPE_SLASHING: SetPreName(oItem,"Wounding","Wounds"); break;
|
|
case IP_CONST_DAMAGETYPE_SONIC: SetPreName(oItem,"Thunderous","Thunder"); break;
|
|
case IP_CONST_DAMAGETYPE_DIVINE: SetPreName(oItem,"Divine","Holy Might"); break;
|
|
case IP_CONST_DAMAGETYPE_MAGICAL: SetPreName(oItem,"Magical","Magic"); break;
|
|
case IP_CONST_DAMAGETYPE_NEGATIVE: SetPreName(oItem,"Demonic","Death"); break;
|
|
case IP_CONST_DAMAGETYPE_POSITIVE: SetPreName(oItem,"Righteous","Righteous Might"); break;
|
|
}
|
|
}
|
|
|
|
int DamageType()
|
|
{
|
|
int iRandom;
|
|
int iType;
|
|
|
|
iRandom = Random(12)+1;
|
|
iType = IP_CONST_DAMAGETYPE_SONIC;
|
|
|
|
switch (iRandom)
|
|
{
|
|
case 1: iType = IP_CONST_DAMAGETYPE_ACID; break;
|
|
case 2: iType = IP_CONST_DAMAGETYPE_BLUDGEONING; break;
|
|
case 3: iType = IP_CONST_DAMAGETYPE_COLD; break;
|
|
case 4: iType = IP_CONST_DAMAGETYPE_ELECTRICAL; break;
|
|
case 5: iType = IP_CONST_DAMAGETYPE_FIRE; break;
|
|
case 6: iType = IP_CONST_DAMAGETYPE_PIERCING; break;
|
|
case 7: iType = IP_CONST_DAMAGETYPE_SLASHING; break;
|
|
case 8: iType = IP_CONST_DAMAGETYPE_SONIC; break;
|
|
case 9: iType = IP_CONST_DAMAGETYPE_DIVINE; break;
|
|
case 10: iType = IP_CONST_DAMAGETYPE_MAGICAL; break;
|
|
case 11: iType = IP_CONST_DAMAGETYPE_NEGATIVE; break;
|
|
case 12: iType = IP_CONST_DAMAGETYPE_POSITIVE; break;
|
|
}
|
|
|
|
return iType;
|
|
}
|
|
|
|
int DamageBonus()
|
|
{
|
|
int iRandom;
|
|
int iBonus;
|
|
|
|
iRandom = Random(27)+1;
|
|
iBonus = IP_CONST_DAMAGEBONUS_1;
|
|
|
|
switch (iRandom)
|
|
{
|
|
case 1: iBonus = IP_CONST_DAMAGEBONUS_1; break;
|
|
case 2: iBonus = IP_CONST_DAMAGEBONUS_2; break;
|
|
case 3: iBonus = IP_CONST_DAMAGEBONUS_3; break;
|
|
case 4: iBonus = IP_CONST_DAMAGEBONUS_4; break;
|
|
case 5: iBonus = IP_CONST_DAMAGEBONUS_5; break;
|
|
case 6: iBonus = IP_CONST_DAMAGEBONUS_6; break;
|
|
case 7: iBonus = IP_CONST_DAMAGEBONUS_7; break;
|
|
case 8: iBonus = IP_CONST_DAMAGEBONUS_8; break;
|
|
case 9: iBonus = IP_CONST_DAMAGEBONUS_9; break;
|
|
case 10: iBonus = IP_CONST_DAMAGEBONUS_10; break;
|
|
case 11: iBonus = IP_CONST_DAMAGEBONUS_1d10; break;
|
|
case 12: iBonus = IP_CONST_DAMAGEBONUS_1d12; break;
|
|
case 13: iBonus = IP_CONST_DAMAGEBONUS_1d4; break;
|
|
case 14: iBonus = IP_CONST_DAMAGEBONUS_1d6; break;
|
|
case 15: iBonus = IP_CONST_DAMAGEBONUS_1d8; break;
|
|
case 16: iBonus = IP_CONST_DAMAGEBONUS_2d10; break;
|
|
case 17: iBonus = IP_CONST_DAMAGEBONUS_2d12; break;
|
|
case 18: iBonus = IP_CONST_DAMAGEBONUS_2d4; break;
|
|
case 19: iBonus = IP_CONST_DAMAGEBONUS_2d6; break;
|
|
case 20: iBonus = IP_CONST_DAMAGEBONUS_2d8; break;
|
|
case 21: iBonus = IP_CONST_DAMAGEBONUS_1d10; break;
|
|
case 22: iBonus = IP_CONST_DAMAGEBONUS_1d12; break;
|
|
case 23: iBonus = IP_CONST_DAMAGEBONUS_1d4; break;
|
|
case 24: iBonus = IP_CONST_DAMAGEBONUS_1d6; break;
|
|
case 25: iBonus = IP_CONST_DAMAGEBONUS_1d8; break;
|
|
case 26: iBonus = IP_CONST_DAMAGEBONUS_2d4; break;
|
|
case 27: iBonus = IP_CONST_DAMAGEBONUS_2d6; break;
|
|
}
|
|
|
|
return iBonus;
|
|
}
|
|
|
|
int CastSpellUses()
|
|
{
|
|
int iRandom;
|
|
int iSpellUse;
|
|
|
|
iRandom = Random(14)+1;
|
|
switch (iRandom)
|
|
{
|
|
case 1: case 2:
|
|
iSpellUse=IP_CONST_CASTSPELL_NUMUSES_1_CHARGE_PER_USE;
|
|
break;
|
|
case 3: case 4:
|
|
iSpellUse=IP_CONST_CASTSPELL_NUMUSES_2_CHARGES_PER_USE;
|
|
break;
|
|
case 5: case 6:
|
|
iSpellUse=IP_CONST_CASTSPELL_NUMUSES_3_CHARGES_PER_USE;
|
|
break;
|
|
case 7:
|
|
iSpellUse=IP_CONST_CASTSPELL_NUMUSES_4_CHARGES_PER_USE;
|
|
break;
|
|
case 8: case 9:
|
|
iSpellUse=IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY;
|
|
break;
|
|
case 10: case 11:
|
|
iSpellUse=IP_CONST_CASTSPELL_NUMUSES_2_USES_PER_DAY;
|
|
break;
|
|
case 12: case 13:
|
|
iSpellUse=IP_CONST_CASTSPELL_NUMUSES_3_USES_PER_DAY;
|
|
break;
|
|
case 14:
|
|
iSpellUse=IP_CONST_CASTSPELL_NUMUSES_4_USES_PER_DAY;
|
|
break;
|
|
}
|
|
|
|
return iSpellUse;
|
|
}
|
|
|
|
itemproperty GetCastSpell(int iItemLevel)
|
|
{
|
|
int iX;
|
|
int iY;
|
|
int iSpell;
|
|
int iRandom;
|
|
itemproperty iProperty;
|
|
|
|
if (iItemLevel == 1)
|
|
iRandom=Random(18)+1;
|
|
if (iItemLevel == 2)
|
|
iRandom=Random(48)+1;
|
|
if (iItemLevel == 3)
|
|
iRandom=Random(64)+19; //82
|
|
if (iItemLevel == 4)
|
|
iRandom=Random(48)+49; //96
|
|
if (iItemLevel >4)
|
|
iRandom=Random(50)+49; //99
|
|
|
|
iSpell = IP_CONST_CASTSPELL_BARKSKIN_6;
|
|
switch (iRandom)
|
|
{
|
|
//ItemLevel 1
|
|
case 1: iSpell =IP_CONST_CASTSPELL_BARKSKIN_6; break;
|
|
case 2: iSpell =IP_CONST_CASTSPELL_BLESS_2; break;
|
|
case 3: iSpell =IP_CONST_CASTSPELL_BULLS_STRENGTH_3; break;
|
|
case 4: iSpell =IP_CONST_CASTSPELL_BURNING_HANDS_5; break;
|
|
case 5: iSpell =IP_CONST_CASTSPELL_COLOR_SPRAY_2; break;
|
|
case 6: iSpell =IP_CONST_CASTSPELL_GHOSTLY_VISAGE_3; break;
|
|
case 7: iSpell =IP_CONST_CASTSPELL_FLAME_LASH_3; break;
|
|
case 8: iSpell =IP_CONST_CASTSPELL_INVISIBILITY_3; break;
|
|
case 9: iSpell =IP_CONST_CASTSPELL_INVISIBILITY_PURGE_5; break;
|
|
case 10: iSpell =IP_CONST_CASTSPELL_MAGIC_MISSILE_5; break;
|
|
case 11: iSpell =IP_CONST_CASTSPELL_SEE_INVISIBILITY_3; break;
|
|
case 12: iSpell =IP_CONST_CASTSPELL_SEARING_LIGHT_5; break;
|
|
case 13: iSpell = IP_CONST_CASTSPELL_SLEEP_5; break;
|
|
case 14: iSpell = IP_CONST_CASTSPELL_SOUND_BURST_3; break;
|
|
case 15: iSpell = IP_CONST_CASTSPELL_STINKING_CLOUD_5; break;
|
|
case 16: iSpell = IP_CONST_CASTSPELL_NEGATIVE_ENERGY_RAY_5; break;
|
|
case 17: iSpell = IP_CONST_CASTSPELL_PROTECTION_FROM_ALIGNMENT_5; break;
|
|
case 18: iSpell = IP_CONST_CASTSPELL_SUMMON_CREATURE_II_3; break;
|
|
|
|
//ItemLevel 2
|
|
case 19: iSpell = IP_CONST_CASTSPELL_CALL_LIGHTNING_5; break;
|
|
case 20: iSpell = IP_CONST_CASTSPELL_ANIMATE_DEAD_5; break;
|
|
case 21: iSpell = IP_CONST_CASTSPELL_AURAOFGLORY_7; break;
|
|
case 22: iSpell = IP_CONST_CASTSPELL_CIRCLE_OF_DOOM_9; break;
|
|
case 23: iSpell = IP_CONST_CASTSPELL_CONTINUAL_FLAME_7; break;
|
|
case 24: iSpell = IP_CONST_CASTSPELL_CONFUSION_10; break;
|
|
case 25: iSpell = IP_CONST_CASTSPELL_CONE_OF_COLD_9; break;
|
|
case 26: iSpell = IP_CONST_CASTSPELL_CURE_SERIOUS_WOUNDS_5; break;
|
|
case 27: iSpell = IP_CONST_CASTSPELL_DISPEL_MAGIC_10; break;
|
|
case 28: iSpell = IP_CONST_CASTSPELL_DISPLACEMENT_9; break;
|
|
case 29: iSpell = IP_CONST_CASTSPELL_DOMINATE_PERSON_7; break;
|
|
case 30: iSpell = IP_CONST_CASTSPELL_ETHEREAL_VISAGE_9; break;
|
|
case 31: iSpell = IP_CONST_CASTSPELL_EVARDS_BLACK_TENTACLES_7; break;
|
|
case 32: iSpell = IP_CONST_CASTSPELL_FIREBALL_5; break;
|
|
case 33: iSpell = IP_CONST_CASTSPELL_FLAME_STRIKE_7; break;
|
|
case 34: iSpell = IP_CONST_CASTSPELL_HAMMER_OF_THE_GODS_7; break;
|
|
case 35: iSpell = IP_CONST_CASTSPELL_HASTE_10; break;
|
|
case 36: iSpell = IP_CONST_CASTSPELL_HOLD_MONSTER_7; break;
|
|
case 37: iSpell = IP_CONST_CASTSPELL_ICE_STORM_9; break;
|
|
case 38: iSpell = IP_CONST_CASTSPELL_IMPROVED_INVISIBILITY_7; break;
|
|
case 39: iSpell = IP_CONST_CASTSPELL_LESSER_PLANAR_BINDING_9; break;
|
|
case 40: iSpell = IP_CONST_CASTSPELL_MELFS_ACID_ARROW_9; break;
|
|
case 41: iSpell = IP_CONST_CASTSPELL_MINOR_GLOBE_OF_INVULNERABILITY_7; break;
|
|
case 42: iSpell = IP_CONST_CASTSPELL_POLYMORPH_SELF_7; break;
|
|
case 43: iSpell = IP_CONST_CASTSPELL_PROTECTION_FROM_ELEMENTS_10; break;
|
|
case 44: iSpell = IP_CONST_CASTSPELL_RESTORATION_7; break;
|
|
case 45: iSpell = IP_CONST_CASTSPELL_STONESKIN_7; break;
|
|
case 46: iSpell = IP_CONST_CASTSPELL_SUMMON_CREATURE_V_9; break;
|
|
case 47: iSpell = IP_CONST_CASTSPELL_VAMPIRIC_TOUCH_5; break;
|
|
case 48: iSpell = IP_CONST_CASTSPELL_WOUNDING_WHISPERS_9; break;
|
|
|
|
//ItemLevel 3
|
|
case 49: iSpell = IP_CONST_CASTSPELL_ACID_FOG_11; break;
|
|
case 50: iSpell = IP_CONST_CASTSPELL_ANIMATE_DEAD_10; break;
|
|
case 51: iSpell = IP_CONST_CASTSPELL_BIGBYS_FORCEFUL_HAND_15; break;
|
|
case 52: iSpell = IP_CONST_CASTSPELL_BLADE_BARRIER_11; break;
|
|
case 53: iSpell = IP_CONST_CASTSPELL_CALL_LIGHTNING_10; break;
|
|
case 54: iSpell = IP_CONST_CASTSPELL_CATS_GRACE_10; break;
|
|
case 55: iSpell = IP_CONST_CASTSPELL_CHAIN_LIGHTNING_11; break;
|
|
case 56: iSpell = IP_CONST_CASTSPELL_CLOUDKILL_9; break;
|
|
case 57: iSpell = IP_CONST_CASTSPELL_CREATE_UNDEAD_11; break;
|
|
case 58: iSpell = IP_CONST_CASTSPELL_CREEPING_DOOM_13; break;
|
|
case 59: iSpell = IP_CONST_CASTSPELL_CURE_CRITICAL_WOUNDS_15; break;
|
|
case 60: iSpell = IP_CONST_CASTSPELL_ELEMENTAL_SHIELD_12; break;
|
|
case 61: iSpell = IP_CONST_CASTSPELL_ENERGY_BUFFER_11; break;
|
|
case 62: iSpell = IP_CONST_CASTSPELL_FINGER_OF_DEATH_13; break;
|
|
case 63: iSpell = IP_CONST_CASTSPELL_FIRE_STORM_13; break;
|
|
case 64: iSpell = IP_CONST_CASTSPELL_FLAME_ARROW_12; break;
|
|
case 65: iSpell = IP_CONST_CASTSPELL_GLOBE_OF_INVULNERABILITY_11; break;
|
|
case 66: iSpell = IP_CONST_CASTSPELL_GREATER_BULLS_STRENGTH_11; break;
|
|
case 67: iSpell = IP_CONST_CASTSPELL_GREATER_PLANAR_BINDING_15; break;
|
|
case 68: iSpell = IP_CONST_CASTSPELL_GREATER_SHADOW_CONJURATION_9; break;
|
|
case 69: iSpell = IP_CONST_CASTSPELL_GREATER_STONESKIN_11; break;
|
|
case 70: iSpell = IP_CONST_CASTSPELL_HEAL_11; break;
|
|
case 71: iSpell = IP_CONST_CASTSPELL_HORRID_WILTING_15; break;
|
|
case 72: iSpell = IP_CONST_CASTSPELL_INCENDIARY_CLOUD_15; break;
|
|
case 73: iSpell = IP_CONST_CASTSPELL_INFERNO_15; break;
|
|
case 74: iSpell = IP_CONST_CASTSPELL_INFLICT_CRITICAL_WOUNDS_12; break;
|
|
case 75: iSpell = IP_CONST_CASTSPELL_ISAACS_LESSER_MISSILE_STORM_13; break;
|
|
case 76: iSpell = IP_CONST_CASTSPELL_MASS_CHARM_15; break;
|
|
case 77: iSpell = IP_CONST_CASTSPELL_PLANAR_ALLY_15; break;
|
|
case 78: iSpell = IP_CONST_CASTSPELL_POWER_WORD_STUN_13; break;
|
|
case 79: iSpell = IP_CONST_CASTSPELL_RAISE_DEAD_9; break;
|
|
case 80: iSpell = IP_CONST_CASTSPELL_SUMMON_CREATURE_VII_13; break;
|
|
case 81: iSpell = IP_CONST_CASTSPELL_SUNBEAM_13; break;
|
|
case 82: iSpell = Random(365); break;
|
|
//ItemLevel 4
|
|
case 83: iSpell = IP_CONST_CASTSPELL_CONTROL_UNDEAD_20; break;
|
|
case 84: iSpell = IP_CONST_CASTSPELL_CREATE_GREATER_UNDEAD_18; break;
|
|
case 85: iSpell = IP_CONST_CASTSPELL_DISMISSAL_18; break;
|
|
case 86: iSpell = IP_CONST_CASTSPELL_DELAYED_BLAST_FIREBALL_15; break;
|
|
case 87: iSpell = IP_CONST_CASTSPELL_DOMINATE_MONSTER_17; break;
|
|
case 88: iSpell = IP_CONST_CASTSPELL_FLAME_STRIKE_18; break;
|
|
case 89: iSpell = IP_CONST_CASTSPELL_ISAACS_GREATER_MISSILE_STORM_15; break;
|
|
case 90: iSpell = IP_CONST_CASTSPELL_PREMONITION_15; break;
|
|
case 91: iSpell = IP_CONST_CASTSPELL_PRISMATIC_SPRAY_13; break;
|
|
case 92: iSpell = IP_CONST_CASTSPELL_PROTECTION_FROM_SPELLS_20; break;
|
|
case 93: iSpell = IP_CONST_CASTSPELL_RESURRECTION_13; break;
|
|
case 94: iSpell = IP_CONST_CASTSPELL_SHAPECHANGE_17; break;
|
|
case 95: iSpell = IP_CONST_CASTSPELL_STORM_OF_VENGEANCE_17; break;
|
|
case 96: iSpell = IP_CONST_CASTSPELL_SUMMON_CREATURE_IX_17; break;
|
|
|
|
//ItemLevel 5
|
|
case 97: iSpell = IP_CONST_CASTSPELL_BIGBYS_CRUSHING_HAND_20; break;
|
|
case 98: iSpell = IP_CONST_CASTSPELL_CHAIN_LIGHTNING_20; break;
|
|
case 99: iSpell = IP_CONST_CASTSPELL_SUNBURST_20; break;
|
|
}
|
|
|
|
iY=CastSpellUses();
|
|
iProperty=ItemPropertyCastSpell(iSpell,iY);
|
|
|
|
return iProperty;
|
|
}
|
|
|
|
void GetArtifact(object oCreature)
|
|
{
|
|
int iRandom;
|
|
int iCount;
|
|
int iSlot;
|
|
string sTag;
|
|
itemproperty iProperty;
|
|
object oItem;
|
|
|
|
iRandom=Random(6)+1;
|
|
sTag = "en3_artifact" + IntToString(iRandom);
|
|
if (GetLocalInt(GetModule(),sTag) == 0)
|
|
{
|
|
SetLocalInt(GetModule(),sTag,1);
|
|
} else {
|
|
iRandom = 0;
|
|
sTag = "en3_artifact0";
|
|
}
|
|
|
|
switch (iRandom)
|
|
{
|
|
case 0: iSlot = INVENTORY_SLOT_RIGHTRING; break;
|
|
case 1: iSlot = INVENTORY_SLOT_CLOAK; break;
|
|
case 2: iSlot = INVENTORY_SLOT_NECK; break;
|
|
case 3: iSlot = INVENTORY_SLOT_BOOTS; break;
|
|
case 4: iSlot = INVENTORY_SLOT_BELT; break;
|
|
case 5: iSlot = INVENTORY_SLOT_RIGHTRING; break;
|
|
case 6: iSlot = INVENTORY_SLOT_HEAD; break;
|
|
}
|
|
oItem=CreateItemOnObject(sTag,oCreature);
|
|
|
|
iCount=0;
|
|
while (iCount < 2)
|
|
{
|
|
iCount++;
|
|
iProperty = ArtifactProperty();
|
|
IPSafeAddItemProperty(oItem,iProperty);
|
|
}
|
|
|
|
iProperty = MiscProperty(6,oItem);
|
|
IPSafeAddItemProperty(oItem,iProperty);
|
|
|
|
EquipItem(iSlot, oItem, oCreature);
|
|
}
|
|
|
|
itemproperty ArtifactProperty()
|
|
{
|
|
int iX;
|
|
int iY;
|
|
int iZ;
|
|
int iRandom;
|
|
int iRandom2;
|
|
int iRandom3;
|
|
int iEnchant2;
|
|
itemproperty iProperty;
|
|
|
|
|
|
iRandom = Random(100)+1;
|
|
|
|
if (iRandom<8)
|
|
{
|
|
//Enhanced Strength
|
|
iY = Random(15)+6;
|
|
iProperty = ItemPropertyAbilityBonus(IP_CONST_ABILITY_STR,iY);
|
|
}
|
|
else if (iRandom<15)
|
|
{
|
|
//Enhanced Constitution
|
|
iY = Random(15)+6;
|
|
iProperty = ItemPropertyAbilityBonus(IP_CONST_ABILITY_STR,iY);
|
|
}
|
|
else if (iRandom<29)
|
|
{
|
|
//Dmg Resist
|
|
iX = Random(15)+5;
|
|
iY = Random(5)+3;
|
|
iProperty=ItemPropertyDamageReduction(iX,iY);
|
|
}
|
|
else if (iRandom<33)
|
|
{
|
|
iRandom3 = Random(7)+1;
|
|
switch (iRandom3)
|
|
{
|
|
case 1: iX = IP_CONST_CASTSPELL_METEOR_SWARM_17; break;
|
|
case 2: iX = IP_CONST_CASTSPELL_STORM_OF_VENGEANCE_17; break;
|
|
case 3: iX = IP_CONST_CASTSPELL_SUNBURST_20; break;
|
|
case 4: iX = IP_CONST_CASTSPELL_SHAPECHANGE_17; break;
|
|
case 5: iX = IP_CONST_CASTSPELL_ISAACS_GREATER_MISSILE_STORM_15; break;
|
|
case 6: iX = IP_CONST_CASTSPELL_INCENDIARY_CLOUD_15; break;
|
|
case 7: iX = IP_CONST_CASTSPELL_EARTHQUAKE_20; break;
|
|
}
|
|
iProperty=ItemPropertyCastSpell(iX,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY);
|
|
}
|
|
else if (iRandom<43)
|
|
{
|
|
//Spell Resist
|
|
iRandom3 = Random(4);
|
|
switch (iRandom3)
|
|
{
|
|
case 0: iY = IP_CONST_SPELLRESISTANCEBONUS_26; break;
|
|
case 1: iY = IP_CONST_SPELLRESISTANCEBONUS_28; break;
|
|
case 2: iY = IP_CONST_SPELLRESISTANCEBONUS_30; break;
|
|
case 3: iY = IP_CONST_SPELLRESISTANCEBONUS_32; break;
|
|
}
|
|
iProperty=ItemPropertyBonusSpellResistance(iY);
|
|
}
|
|
else if (iRandom<57)
|
|
{
|
|
//Regeneration
|
|
iX=Random(15)+6;
|
|
iProperty=ItemPropertyRegeneration(iX);
|
|
}
|
|
else if (iRandom<71)
|
|
{
|
|
//immune Misc
|
|
iRandom3 = Random(6)+3;
|
|
iProperty = ItemPropertyImmunityToSpellLevel(iRandom3);
|
|
}
|
|
else if (iRandom<85)
|
|
{
|
|
//immune Physical Damage
|
|
iRandom2 = Random(3);
|
|
switch (iRandom2)
|
|
{
|
|
case 0: iX =IP_CONST_DAMAGETYPE_BLUDGEONING; break;
|
|
case 1: iX =IP_CONST_DAMAGETYPE_PIERCING; break;
|
|
case 2: iX =IP_CONST_DAMAGETYPE_SLASHING; break;
|
|
}
|
|
|
|
iRandom2 = Random(2);
|
|
if (iRandom2 == 0)
|
|
{
|
|
iY = IP_CONST_DAMAGEIMMUNITY_50_PERCENT;
|
|
}
|
|
else
|
|
{
|
|
iY = IP_CONST_DAMAGEIMMUNITY_100_PERCENT;
|
|
}
|
|
|
|
iProperty=ItemPropertyDamageImmunity(iX,iY);
|
|
}
|
|
else
|
|
{
|
|
//immune Magical Damage
|
|
//immune Physical Damage
|
|
|
|
iRandom2 = Random(5);
|
|
switch (iRandom2)
|
|
{
|
|
case 0: iX =IP_CONST_DAMAGETYPE_ACID; break;
|
|
case 1: iX =IP_CONST_DAMAGETYPE_COLD; break;
|
|
case 2: iX =IP_CONST_DAMAGETYPE_ELECTRICAL; break;
|
|
case 3: iX =IP_CONST_DAMAGETYPE_FIRE; break;
|
|
case 4: iX =IP_CONST_DAMAGETYPE_SONIC; break;
|
|
}
|
|
|
|
iRandom2 = Random(3);
|
|
if (iRandom2 == 0)
|
|
{
|
|
iY = IP_CONST_DAMAGEIMMUNITY_50_PERCENT;
|
|
}
|
|
else if (iRandom2 == 1)
|
|
{
|
|
iY = IP_CONST_DAMAGEIMMUNITY_75_PERCENT;
|
|
}
|
|
else
|
|
{
|
|
iY = IP_CONST_DAMAGEIMMUNITY_100_PERCENT;
|
|
}
|
|
|
|
iProperty=ItemPropertyDamageImmunity(iX,iY);
|
|
}
|
|
|
|
return iProperty;
|
|
}
|
|
|
|
//:: void main (){}
|