PoA_PRC8/_module/nss/sd_lootsystem.nss
Jaysyn904 1c5cbbe7ea Removed Skullkeep Forge
Removed Skullkeep Forge system (originally by Winterknight and Asbury)  Full compile.  Updated release archive.
2024-11-12 15:25:30 -05:00

7227 lines
215 KiB
Plaintext
Raw Blame History

//////////////////////////////////////////////////////////
//::use: #include"sd_lootsystem"
//::
//::
//:: Slayers of Darkmoon loot generation system
//::
//::
//::
//:: Commche 2006
//::
#include "prc_x2_itemprop"
#include "prc_inc_newip"
//#include "nw_i0_generic"
#include "inc_itm_appear"
#include "inc_epicspells"
//////////////////////////////////////////////////////////
//: Constants
//:
//:note* See line 4408(?) for specific item droprate configuration
const int LUCK_CHANCE = 5000; // 1 in x chance getting a much better item (0 for off)
const int DROP_RATE = 1; // % modifyer for loot drop (see line 4619 for specifics)
const int CHANCE_WORN = 0; // % chance of worn item (0 for off)
const int CHANCE_BROKEN = 0; // % chance of broken item (0 for off)
int iRandomShoulder = Random(24),
iRandomBicep = Random(15),
iRandomForearm = Random(23),
iRandomHand = Random(9),
iRandomThigh = Random(16),
iRandomShins = Random(21),
iRandomFeet = Random(16),
iRandomRobe = Random(11),
iRandomPelvis = Random(37),
iRandomBelt = Random(16),
iRandomNeck = Random(6),
iRandomChest = Random(61);
int iRandomArmor1 = Random(175),
iRandomArmor2 = Random(175),
iRandomArmor3 = Random(175),
iRandomArmor4 = Random(175),
iRandomArmor5 = Random(175),
iRandomArmor6 = Random(175);
int iRandomWeapon1 = d4(),
iRandomWeapon2 = d4(),
iRandomWeapon3 = d4();
int iRandomCloak = Random(16),
iRandomHelmet = Random(124);
int iRandRing = Random(238),
iRandBelt = Random(255),
iRandAmulet = Random(255),
iRandBracer = Random(178),
iRandGauntlet = Random(199);
//------------------------------------------------------------------------------
// Returns TRUE if oItem is a bludgeoning weapon
//------------------------------------------------------------------------------
int PRCGetBludgeoningWeapon(object oItem)
{
int nItem = GetBaseItemType(oItem);
//exclude creature weapons
if(nItem == BASE_ITEM_CBLUDGWEAPON)
return FALSE;
int nWeapon = (StringToInt(Get2DACache("baseitems", "WeaponType", nItem)));
// 2 = bludgeoning, 5 = bludgeoning/piercing
return (nWeapon == 2 || nWeapon == 5);
}
// Generates a random weapon
// =======================================
// oMob = the creature that just died
// oSack = the object into which you will spawn the weapon
// iRange = the quality of the weapon: 1=lowest 5=highest
// SockChance = a % chance for the generated weapon to be socketed
// DamBroke = a switch to disable chance of damaged/broken weapon: 0=on 1=off
void DropWeapon(object oMob, object oSack, int iRange, int SockChance, int DamBroke);
// Generates random chest armor
// =======================================
// oMob = the creature that just died
// oSack = the object into which you will spawn the armor
// iRange = the quality of the armor: 1=lowest 5=highest
// SockChance = a % chance for the generated armor to be socketed
// DamBroke = a switch to disable chance of damaged/broken armor: 0=on 1=off
void DropArmor(object oMob, object oSack, int iRange, int SockChance, int DamBroke);
// Generates a random shield
// =======================================
// oMob = the creature that just died
// oSack = the object into which you will spawn the shield
// iRange = the quality of the shield: 1=lowest 5=highest
// SockChance = a % chance for the generated shield to be socketed
// DamBroke = a switch to disable chance of damaged/broken shield: 0=on 1=off
void DropShield(object oMob, object oSack, int iRange, int SockChance, int DamBroke);
// Generates random monk gloves
// =======================================
// oMob = the creature that just died
// oSack = the object into which you will spawn the gloves
// iRange = the quality of the gloves: 1=lowest 5=highest
// SockChance = a % chance for the generated gloves to be socketed
// DamBroke = a switch to disable chance of damaged/broken gloves: 0=on 1=off
void DropMonkGloves(object oMob, object oSack, int iRange, int SockChance, int DamBroke);
// Generates a random magic item (i.e. boots, helm, amulet, ring, belt, bracer)
// ============================================================================
// oMob = the creature that just died
// oSack = the object into which you will spawn the item
// iRange = the quality of the item: 1=lowest 5=highest
// SockChance = a % chance for the generated item to be socketed
// DamBroke = a switch to disable chance of damaged/broken item: 0=on 1=off
void DropMagicItem(object oMob, object oSack, int iRange, int SockChance, int DamBroke);
// Generates a random socket gem
// =======================================
// oMob = the creature that just died
// oSack = the object into which you will spawn the gem
// iRange = the quality of the gem: 1=lowest 5=highest
void DropGem (object oMob, object oSack, int iRange);
// Generates random ranged ammo (only arrows & bolts)
// ==================================================
// oMob = the creature that just died
// oSack = the object into which you will spawn the ammo
// iRange = the quality of the ammo: 1=lowest 5=highest
void DropAmmo(object oMob, object oSack, int iRange);
// Generates a random scroll
// =======================================
// oMob = the creature that just died
// oSack = the object into which you will spawn the scroll
// iRange = the quality of the scroll: 1=lowest 5=highest
// note* this is based on the gold-value of the scroll
void DropScroll(object oMob, object oSack, int iRange);
// Generates a random potion
// =======================================
// oMob = the creature that just died
// oSack = the object into which you will spawn the potion
void DropPotion(object oMob, object oSack);
// Generates a random misc item (i.e. bag)
// =======================================
// oMob = the creature that just died
// oSack = the object into which you will spawn the misc
void DropMisc(object oMob, object oSack);
// Generates a random rod or wand
// =======================================
// oMob = the creature that just died
// oSack = the object into which you will spawn the rod or wand
void DropRodWand(object oMob, object oSack);
// Generates random gold
// ==================================================
// oMob = the creature that just died
// note* the gold amount will be based on the creature's level using the below formula
// Gold = (d20()*Creature LVL)+(15*Creature LVL)+iBonus
// oSack = the object into which you will spawn the ammo
// iBonus = additional gold to be added to the tally
void DropGold(object oMob, object oSack, int iBonus);
// Drop randomly chosen and generated loot & some gold
// ===================================================
// *This is the main call function of the sd lootsystem
// oMob = the creature that just died (the loot dropped is based on their class & level)
// oSack = the object into which you will spawn the loot
void sd_droploot (object oMob, object oSack);
// Drop randomly chosen class set item piece
// ===================================================
// *you can control what class type of set item will drop
// oMob = the creature that just died (the loot dropped is based on their class & level)
// oSack = the object into which you will spawn the loot
// iClass = the pereferred class of the drop
// eg:
// (1 - Fighter (2 - wiz (3 - sorc (4 - rogue/dex fighter (5 -cleric (6 - bard
// (7 - pally (8 - druid (9 - ranger (10 - monk (11 - barb (12 - weapon sets
// Default is 0: this will instead choose randomly from every item regardless
// of class
void DropSetItem(object oMob, object oSack, int iClass = 0);
// CHEST CLEARER
void ClearChest (object oMob)
{
//:: Clears all inventory items from the mob, then destroys the mob object itself.
object oItem = GetFirstItemInInventory(oMob);
while (GetIsObjectValid(oItem))
{
DestroyObject(oItem);
oItem = GetNextItemInInventory(oMob);
}
}
const string COLORTOKEN =" ##################$%&'()*+,-./0123456789:;;==?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[[]^_`abcdefghijklmnopqrstuvwxyz{|}~~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
string ColorString(string sText, int nRed=255, int nGreen=255, int nBlue=255)
{
return "<c" + GetSubString(COLORTOKEN, nRed, 1) + GetSubString(COLORTOKEN, nGreen, 1) + GetSubString(COLORTOKEN, nBlue, 1) + ">" + sText + "</c>";
}
void SetThreatLevel(object oMob)
{
int iHD = GetHitDice(OBJECT_SELF);
int iRange;
string sName;
string cName = GetName(oMob);
//:: Define new ranges for each threat level
if (iHD > 0 && iHD <= 10) iRange = 1; // lvl 1-10
if (iHD > 10 && iHD <= 20) iRange = 2; // lvl 11-20
if (iHD > 20 && iHD <= 30) iRange = 3; // lvl 21-30
if (iHD > 30 && iHD <= 40) iRange = 4; // lvl 31-40
if (iHD > 40 && iHD <= 50) iRange = 5; // lvl 41-50
if (iHD > 50 && iHD <= 60) iRange = 6; // lvl 51-60
if (iHD > 60 && iHD <= 70) iRange = 7; // lvl 61-70
if (iHD > 70 /* && iHD <= 80 */) iRange = 8; // lvl 71-80+
//:: Assign colors for each tier
switch(iRange)
{
case 1: sName = ColorString(cName, 255, 255, 255); break; // White - Low threat
case 2: sName = ColorString(cName, 255, 255, 0); break; // Yellow - Slightly higher threat
case 3: sName = ColorString(cName, 255, 165, 0); break; // Orange - Moderate threat
case 4: sName = ColorString(cName, 255, 100, 0); break; // Deep Orange - Medium threat
case 5: sName = ColorString(cName, 255, 69, 69); break; // Light Red - Higher medium threat
case 6: sName = ColorString(cName, 255, 0, 255); break; // Magenta - High threat
case 7: sName = ColorString(cName, 180, 0, 255); break; // Purple - Very high threat
case 8: sName = ColorString(cName, 153, 0, 153); break; // Bright Purple - Highest regular threat
}
//:: Boss enemies use red regardless of HD
if (GetLocalInt(OBJECT_SELF, "BOSS") == 1)
sName = ColorString(cName, 255, 0, 0); // Red - Boss
SetName(oMob, sName);
}
void SetEyes(int iType, object oMob)
{
effect eVis = EffectVisualEffect(iType);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eVis, oMob);
}
void NameSack(object oSack)
{
string sName = GetName(OBJECT_SELF);
sName+= " Corpse";
SetName(oSack, sName);
}
void InvClear (object oMob)
{
object oItem = GetFirstItemInInventory(oMob);
while (GetIsObjectValid(oItem))
{
if (GetPlotFlag(oItem) == FALSE)
{
DestroyObject(oItem);
}
oItem = GetNextItemInInventory(oMob);
}
}
void LootClear (object oMob)
{
object oItem = GetFirstItemInInventory(oMob);
while (GetIsObjectValid(oItem))
{
DestroyObject(oItem);
oItem = GetNextItemInInventory(oMob);
}
DestroyObject(oMob);
}
void DropAlchemy(object oMob, object oSack, int iRange)
{
string sAlchemical;
int nRandom = Random(16) + 1;
int iRoll;
if (iRange==1)
{//:: Alchemical items
iRoll = Random(21);
switch (iRoll)
{
case 0: sAlchemical = "prc_brittlebn"; break;
case 1: sAlchemical = "x1_wmgrenade001"; break;
case 2: sAlchemical = "x1_wmgrenade002"; break;
case 3: sAlchemical = "x1_wmgrenade003"; break;
case 4: sAlchemical = "x1_wmgrenade004"; break;
case 5: sAlchemical = "x1_wmgrenade005"; break;
case 6: sAlchemical = "x1_wmgrenade006"; break;
case 7: sAlchemical = "x1_wmgrenade007"; break;
case 8: sAlchemical = "prc_it_antitox"; break;
case 9: sAlchemical = "prc_it_blendcrm"; break;
case 10: sAlchemical = "prc_it_crcklpdr"; break;
case 11: sAlchemical = "prc_it_emblmfr"; break;
case 12: sAlchemical = "prc_it_fareyeoil"; break;
case 13: sAlchemical = "prc_it_healblm"; break;
case 14: sAlchemical = "prc_it_keenear"; break;
case 15: sAlchemical = "prc_it_lockslip"; break;
case 16: sAlchemical = "prc_it_nerv"; break;
case 17: sAlchemical = "prc_it_scrmflsk"; break;
case 18: sAlchemical = "prc_it_shedden"; break;
case 19: sAlchemical = "prc_it_shedden2"; break;
case 20: sAlchemical = "prc_it_softfoot"; break;
}
}
if (iRange >= 2)
{//:: Alchemical Items
iRoll = Random(27);
switch (iRoll)
{
case 0: sAlchemical = "x1_wmgrenade006"; break;
case 1: sAlchemical = "x2_it_acidbomb"; break;
case 2: sAlchemical = "x2_it_firebomb"; break;
case 3: sAlchemical = "prc_it_shedden3"; break;
case 4: sAlchemical = "prc_it_shedden4"; break;
case 5: sAlchemical = "prc_it_shedden5"; break;
case 6: sAlchemical = "nw_it_medkit004"; break;
case 7: sAlchemical = "x1_wmgrenade007"; break;
case 8: sAlchemical = "prc_it_antitox"; break;
case 9: sAlchemical = "prc_it_blendcrm"; break;
case 10: sAlchemical = "prc_it_crcklpdr"; break;
case 11: sAlchemical = "prc_it_emblmfr"; break;
case 12: sAlchemical = "prc_it_fareyeoil"; break;
case 13: sAlchemical = "prc_it_healblm"; break;
case 14: sAlchemical = "prc_it_keenear"; break;
case 15: sAlchemical = "prc_it_lockslip"; break;
case 16: sAlchemical = "prc_it_nerv"; break;
case 17: sAlchemical = "prc_it_scrmflsk"; break;
case 18: sAlchemical = "prc_it_shedden"; break;
case 19: sAlchemical = "prc_it_shedden2"; break;
case 20: sAlchemical = "prc_it_softfoot"; break;
case 21: sAlchemical = "prc_brittlebn"; break;
case 22: sAlchemical = "x1_wmgrenade001"; break;
case 23: sAlchemical = "x1_wmgrenade002"; break;
case 24: sAlchemical = "x1_wmgrenade003"; break;
case 25: sAlchemical = "x1_wmgrenade004"; break;
case 26: sAlchemical = "x1_wmgrenade005"; break;
}
}
object oAlchemy = CreateItemOnObject(sAlchemical, oSack, 1);
SetIdentified(oAlchemy, FALSE);
}
void DropScroll(object oMob, object oSack, int iRange)
{
string sType;
int nRandom = Random(16) + 1;
int iRoll;
if (iRange==1) //:: scrolls up to max value of 300
{
iRoll = d100();
switch (iRoll)
{
case 1: sType = "x1_it_sparscr002"; break;
case 2: sType = "nw_it_sparscr107"; break;
case 3: sType = "x1_it_sparscr102"; break;
case 4: sType = "x1_it_spdvscr101"; break;
case 5: sType = "x2_it_spdvscr202"; break;
case 6: sType = "x2_it_spdvscr103"; break;
case 7: sType = "x2_it_spdvscr102"; break;
case 8: sType = "nw_it_sparscr211"; break;
case 9: sType = "x1_it_spdvscr202"; break;
case 10: sType = "nw_it_sparscr212"; break;
case 11: sType = "nw_it_sparscr112"; break;
case 12: sType = "x1_it_spdvscr107"; break;
case 13: sType = "nw_it_sparscr213"; break;
case 14: sType = "x2_it_sparscr207"; break;
case 15: sType = "nw_it_sparscr107"; break;
case 16: sType = "nw_it_spdvscr202"; break;
case 17: sType = "nw_it_sparscr217"; break;
case 18: sType = "x2_it_sparscr206"; break;
case 19: sType = "nw_it_sparscr110"; break;
case 20: sType = "x2_it_sparscr201"; break;
case 21: sType = "x1_it_spdvscr301"; break;
case 22: sType = "x2_it_spdvscr104"; break;
case 23: sType = "x2_it_spdvscr001"; break;
case 24: sType = "x2_it_spdvscr203"; break;
case 25: sType = "x2_it_spdvscr308"; break;
case 26: sType = "nw_it_sparscr206"; break;
case 27: sType = "nw_it_sparscr003"; break;
case 28: sType = "x2_it_spdvscr101"; break;
case 29: sType = "x2_it_sparscr202"; break;
case 30: sType = "x1_it_spdvscr102"; break;
case 31: sType = "x2_it_spdvscr105"; break;
case 32: sType = "nw_it_sparscr219"; break;
case 33: sType = "x1_it_sparscr003"; break;
case 34: sType = "nw_it_sparscr215"; break;
case 35: sType = "nw_it_sparscr101"; break;
case 36: sType = "x2_it_spdvscr106"; break;
case 37: sType = "x1_it_spdvscr103"; break;
case 38: sType = "x1_it_sparscr101"; break;
case 39: sType = "x1_it_sparscr101"; break;
case 40: sType = "x2_it_sparscr305"; break;
case 41: sType = "x1_it_spdvscr205"; break;
case 42: sType = "x2_it_sparscr205"; break;
case 43: sType = "x1_it_sparscr001"; break;
case 44: sType = "nw_it_sparscr220"; break;
case 45: sType = "x2_it_sparscr203"; break;
case 46: sType = "nw_it_sparscr208"; break;
case 47: sType = "nw_it_sparscr209"; break;
case 48: sType = "nw_it_sparscr103"; break;
case 49: sType = "x2_it_spdvscr204"; break;
case 50: sType = "nw_it_sparscr308"; break;
case 51: sType = "x2_it_sparscr101"; break;
case 52: sType = "x2_it_sparscr104"; break;
case 53: sType = "nw_it_sparscr106"; break;
case 54: sType = "x1_it_spdvscr104"; break;
case 55: sType = "x1_it_spdvscr001"; break;
case 56: sType = "x1_it_spdvscr201"; break;
case 57: sType = "nw_it_sparscr207"; break;
case 58: sType = "x2_it_sparscr102"; break;
case 59: sType = "nw_it_sparscr216"; break;
case 60: sType = "nw_it_sparscr218"; break;
case 61: sType = "nw_it_spdvscr201"; break;
case 62: sType = "nw_it_sparscr004"; break;
case 63: sType = "nw_it_sparscr104"; break;
case 64: sType = "x1_it_spdvscr106"; break;
case 65: sType = "nw_it_sparscr109"; break;
case 66: sType = "x2_it_sparscr105"; break;
case 67: sType = "nw_it_sparscr202"; break;
case 68: sType = "nw_it_sparscr113"; break;
case 69: sType = "x1_it_spdvscr203"; break;
case 70: sType = "nw_it_sparscr221"; break;
case 71: sType = "nw_it_sparscr102"; break;
case 72: sType = "x2_it_sparscral"; break;
case 73: sType = "nw_it_sparscr111"; break;
case 74: sType = "nw_it_sparscr002"; break;
case 75: sType = "x2_it_spdvscr107"; break;
case 76: sType = "x2_it_spdvscr205"; break;
case 77: sType = "nw_it_sparscr201"; break;
case 78: sType = "nw_it_sparscr001"; break;
case 79: sType = "x2_it_spdvscr108"; break;
case 80: sType = "nw_it_sparscr210"; break;
case 81: sType = "x2_it_sparscr103"; break;
case 82: sType = "x1_it_sparscr103"; break;
case 83: sType = "x1_it_spdvscr105"; break;
case 84: sType = "nw_it_spdvscr203"; break;
case 85: sType = "nw_it_sparscr108"; break;
case 86: sType = "nw_it_spdvscr204"; break;
case 87: sType = "x2_it_sparscr204"; break;
case 88: sType = "nw_it_sparscr105"; break;
case 89: sType = "nw_it_sparscr203"; break;
case 90: sType = "x1_it_sparscr202"; break;
case 91: sType = "x1_it_sparscr104"; break;
case 92: sType = "nw_it_sparscr214"; break;
case 93: sType = "x2_it_spdvscr002"; break;
case 94: sType = "nw_it_sparscr204"; break;
}
}
if (iRange==2)
{
iRoll = d100(); //:: scrolls valued 540-1621
switch (iRoll)
{
case 1: sType = "nw_it_sparscr509"; break;
case 2: sType = "x2_it_spdvscr508"; break;
case 3: sType = "x2_it_sparscr501"; break;
case 4: sType = "x2_it_spdvscr501"; break;
case 5: sType = "nw_it_sparscr414"; break;
case 6: sType = "x1_it_sparscr502"; break;
case 7: sType = "x2_it_spdvscr307"; break;
case 8: sType = "nw_it_sparscr405"; break;
case 9: sType = "x2_it_spdvscr504"; break;
case 10: sType = "nw_it_sparscr307"; break;
case 11: sType = "nw_it_sparscr502"; break;
case 12: sType = "nw_it_sparscr507"; break;
case 13: sType = "nw_it_sparscr406"; break;
case 14: sType = "nw_it_sparscr411"; break;
case 15: sType = "x2_it_spdvscr402"; break;
case 16: sType = "x2_it_spdvscr305"; break;
case 17: sType = "x2_it_spdvscr403"; break;
case 18: sType = "nw_it_sparscr501"; break;
case 19: sType = "nw_it_sparscr301"; break;
case 20: sType = "x1_it_sparscr301"; break;
case 21: sType = "x2_it_spdvscr404"; break;
case 22: sType = "x2_it_spdvscr309"; break;
case 23: sType = "nw_it_sparscr416"; break;
case 24: sType = "nw_it_sparscr503"; break;
case 25: sType = "nw_it_sparscr608"; break;
case 26: sType = "nw_it_sparscr418"; break;
case 27: sType = "x2_it_spdvscr509"; break;
case 28: sType = "nw_it_sparscr413"; break;
case 29: sType = "nw_it_sparscr504"; break;
case 30: sType = "nw_it_sparscr309"; break;
case 31: sType = "x1_it_sparscr501"; break;
case 32: sType = "nw_it_sparscr304"; break;
case 33: sType = "x1_it_spdvscr403"; break;
case 34: sType = "x2_it_spdvscr405"; break;
case 35: sType = "x2_it_spdvscr306"; break;
case 36: sType = "x2_it_sparscr701"; break;
case 37: sType = "nw_it_sparscr602"; break;
case 38: sType = "x1_it_spdvscr303"; break;
case 39: sType = "x2_it_sparscr304"; break;
case 40: sType = "nw_it_sparscr508"; break;
case 41: sType = "x1_it_sparscr303"; break;
case 42: sType = "x2_it_spdvscr406"; break;
case 43: sType = "nw_it_sparscr312"; break;
case 44: sType = "x2_it_spdvscr505"; break;
case 45: sType = "x2_it_spdvscr302"; break;
case 46: sType = "nw_it_sparscr505"; break;
case 47: sType = "x2_it_spdvscr401"; break;
case 48: sType = "nw_it_sparscr408"; break;
case 49: sType = "x1_it_spdvscr501"; break;
case 50: sType = "x2_it_spdvscr301"; break;
case 51: sType = "x1_it_spdvscr401"; break;
case 52: sType = "x1_it_spdvscr302"; break;
case 53: sType = "x2_it_spdvscr310"; break;
case 54: sType = "nw_it_sparscr314"; break;
case 55: sType = "x1_it_sparscr401"; break;
case 56: sType = "x2_it_sparscr303"; break;
case 57: sType = "x2_it_sparscr602"; break;
case 58: sType = "nw_it_sparscr511"; break;
case 59: sType = "nw_it_sparscr512"; break;
case 60: sType = "nw_it_sparscr417"; break;
case 61: sType = "nw_it_sparscr513"; break;
case 62: sType = "nw_it_sparscr310"; break;
case 63: sType = "nw_it_sparscr302"; break;
case 64: sType = "x2_it_sparscrmc"; break;
case 65: sType = "x2_it_spdvscr304"; break;
case 66: sType = "x1_it_spdvscr402"; break;
case 67: sType = "x2_it_sparscr301"; break;
case 68: sType = "x2_it_sparscr502"; break;
case 69: sType = "nw_it_sparscr506"; break;
case 70: sType = "nw_it_sparscr401"; break;
case 71: sType = "x2_it_spdvscr502"; break;
case 72: sType = "nw_it_sparscr315"; break;
case 73: sType = "x2_it_spdvscr311"; break;
case 74: sType = "nw_it_spdvscr402"; break;
case 75: sType = "x1_it_spdvscr502"; break;
case 76: sType = "nw_it_sparscr409"; break;
case 77: sType = "x2_it_spdvscr407"; break;
case 78: sType = "nw_it_sparscr415"; break;
case 79: sType = "x2_it_spdvscr312"; break;
case 80: sType = "x1_it_spdvscr305"; break;
case 81: sType = "nw_it_spdvscr501"; break;
case 82: sType = "nw_it_spdvscr301"; break;
case 83: sType = "nw_it_sparscr402"; break;
case 84: sType = "nw_it_spdvscr401"; break;
case 85: sType = "x2_it_sparscr302"; break;
case 86: sType = "nw_it_sparscr410"; break;
case 87: sType = "x2_it_spdvscr506"; break;
case 88: sType = "nw_it_sparscr313"; break;
case 89: sType = "x2_it_spdvscr507"; break;
case 90: sType = "x1_it_spdvscr304"; break;
case 91: sType = "nw_it_sparscr305"; break;
case 92: sType = "nw_it_sparscr403"; break;
case 93: sType = "nw_it_sparscr306"; break;
case 94: sType = "nw_it_sparscr404"; break;
case 95: sType = "nw_it_sparscr510"; break;
case 96: sType = "x2_it_sparscr902"; break;
case 97: sType = "nw_it_sparscr606"; break;
case 98: sType = "x2_it_spdvscr503"; break;
case 99: sType = "nw_it_sparscr407"; break;
case 100: sType = "x1_it_sparscr302"; break;
}
}
if (iRange==3)
{
iRoll = d100(); //:: scrolls valued 2400-3200
switch (iRoll)
{
case 1: sType = "nw_it_sparscr603"; break;
case 2: sType = "x1_it_spdvscr701"; break;
case 3: sType = "x1_it_spdvscr601"; break;
case 4: sType = "x1_it_sparscr602"; break;
case 5: sType = "x1_it_sparscr701"; break;
case 6: sType = "x2_it_spdvscr603"; break;
case 7: sType = "nw_it_sparscr607"; break;
case 8: sType = "nw_it_sparscr610"; break;
case 9: sType = "nw_it_sparscr707"; break;
case 10: sType = "x1_it_spdvscr605"; break;
case 11: sType = "x1_it_spdvscr702"; break;
case 12: sType = "x2_it_spdvscr601"; break;
case 13: sType = "nw_it_sparscr704"; break;
case 14: sType = "x1_it_spdvscr703"; break;
case 15: sType = "x1_it_sparscr601"; break;
case 16: sType = "x1_it_spdvscr604"; break;
case 17: sType = "x2_it_sparscr503"; break;
case 18: sType = "nw_it_sparscr708"; break;
case 19: sType = "x1_it_spdvscr704"; break;
case 20: sType = "x1_it_sparscr605"; break;
case 21: sType = "nw_it_sparscr601"; break;
case 22: sType = "nw_it_spdvscr701"; break;
case 23: sType = "x1_it_spdvscr602"; break;
case 24: sType = "x2_it_spdvscr606"; break;
case 25: sType = "nw_it_sparscr612"; break;
case 26: sType = "nw_it_sparscr613"; break;
case 27: sType = "x2_it_spdvscr604"; break;
case 28: sType = "x2_it_spdvscr605"; break;
case 29: sType = "x1_it_sparscr603"; break;
case 30: sType = "nw_it_sparscr611"; break;
case 31: sType = "x1_it_spdvscr603"; break;
case 32: sType = "nw_it_sparscr604"; break;
case 33: sType = "nw_it_sparscr702"; break;
case 34: sType = "nw_it_sparscr706"; break;
case 35: sType = "nw_it_sparscr802"; break;
case 36: sType = "x2_it_spdvscr702"; break;
case 37: sType = "nw_it_spdvscr702"; break;
case 38: sType = "nw_it_sparscr609"; break;
case 39: sType = "x2_it_sparscr703"; break;
case 40: sType = "nw_it_sparscr701"; break;
case 41: sType = "x1_it_sparscr604"; break;
case 42: sType = "x2_it_spdvscr602"; break;
case 43: sType = "nw_it_sparscr605"; break;
case 44: sType = "nw_it_sparscr703"; break;
case 45: sType = "x2_it_spdvscr803"; break;
case 46: sType = "nw_it_sparscr614"; break;
case 47: sType = "nw_it_sparscr614"; break;
case 48: sType = "x2_it_sparscr601"; break;
case 49: sType = "x2_it_spdvscr701"; break;
case 50: sType = "nw_it_sparscr603"; break;
case 51: sType = "x1_it_spdvscr701"; break;
case 52: sType = "x1_it_spdvscr601"; break;
case 53: sType = "x1_it_sparscr602"; break;
case 54: sType = "x1_it_sparscr701"; break;
case 55: sType = "x2_it_spdvscr603"; break;
case 56: sType = "nw_it_sparscr607"; break;
case 57: sType = "nw_it_sparscr610"; break;
case 58: sType = "nw_it_sparscr707"; break;
case 59: sType = "x1_it_spdvscr605"; break;
case 60: sType = "x1_it_spdvscr702"; break;
case 61: sType = "x2_it_spdvscr601"; break;
case 62: sType = "nw_it_sparscr704"; break;
case 63: sType = "x1_it_spdvscr703"; break;
case 64: sType = "x1_it_sparscr601"; break;
case 65: sType = "x1_it_spdvscr604"; break;
case 66: sType = "x2_it_sparscr503"; break;
case 67: sType = "nw_it_sparscr708"; break;
case 68: sType = "x1_it_spdvscr704"; break;
case 69: sType = "x1_it_sparscr605"; break;
case 70: sType = "nw_it_sparscr601"; break;
case 71: sType = "nw_it_spdvscr701"; break;
case 72: sType = "x1_it_spdvscr602"; break;
case 73: sType = "x2_it_spdvscr606"; break;
case 74: sType = "nw_it_sparscr612"; break;
case 75: sType = "nw_it_sparscr613"; break;
case 76: sType = "x2_it_spdvscr604"; break;
case 77: sType = "x2_it_spdvscr605"; break;
case 78: sType = "x1_it_sparscr603"; break;
case 79: sType = "nw_it_sparscr611"; break;
case 80: sType = "x1_it_spdvscr603"; break;
case 81: sType = "nw_it_sparscr604"; break;
case 82: sType = "nw_it_sparscr702"; break;
case 83: sType = "nw_it_sparscr706"; break;
case 84: sType = "nw_it_sparscr802"; break;
case 85: sType = "x2_it_spdvscr702"; break;
case 86: sType = "nw_it_spdvscr702"; break;
case 87: sType = "nw_it_sparscr609"; break;
case 88: sType = "x2_it_sparscr703"; break;
case 89: sType = "nw_it_sparscr701"; break;
case 90: sType = "x1_it_sparscr604"; break;
case 91: sType = "x2_it_spdvscr602"; break;
case 92: sType = "nw_it_sparscr605"; break;
case 93: sType = "nw_it_sparscr703"; break;
case 94: sType = "x2_it_spdvscr803"; break;
case 95: sType = "nw_it_sparscr614"; break;
case 96: sType = "nw_it_sparscr614"; break;
case 97: sType = "x2_it_sparscr601"; break;
case 98: sType = "x2_it_spdvscr701"; break;
case 99: sType = "x2_it_sparscr703"; break;
case 100: sType = "nw_it_sparscr701"; break;
}
}
if (iRange==4||iRange==5)
{
iRoll = Random(40)+1; //:: scrolls valued above 3200
switch (iRoll)
{
case 1: sType = "nw_it_sparscr806"; break;
case 2: sType = "x2_it_spdvscr804"; break;
case 3: sType = "x1_it_sparscr801"; break;
case 4: sType = "x1_it_sparscr901"; break;
case 5: sType = "x2_it_sparscr901"; break;
case 6: sType = "x2_it_sparscr801"; break;
case 7: sType = "x1_it_spdvscr803"; break;
case 8: sType = "x1_it_spdvscr804"; break;
case 9: sType = "nw_it_sparscr905"; break;
case 10: sType = "x2_it_spdvscr901"; break;
case 11: sType = "nw_it_sparscr908"; break;
case 12: sType = "nw_it_sparscr902"; break;
case 13: sType = "nw_it_sparscr803"; break;
case 14: sType = "nw_it_sparscr912"; break;
case 15: sType = "nw_it_sparscr809"; break;
case 16: sType = "x2_it_spdvscr902"; break;
case 17: sType = "nw_it_sparscr804"; break;
case 18: sType = "nw_it_sparscr807"; break;
case 19: sType = "nw_it_sparscr806"; break;
case 20: sType = "x2_it_spdvscr801"; break;
case 21: sType = "nw_it_sparscr906"; break;
case 22: sType = "nw_it_sparscr801"; break;
case 23: sType = "nw_it_sparscr901"; break;
case 24: sType = "x2_it_spdvscr802"; break;
case 25: sType = "nw_it_sparscr903"; break;
case 26: sType = "nw_it_sparscr808"; break;
case 27: sType = "nw_it_sparscr910"; break;
case 28: sType = "x2_it_spdvscr903"; break;
case 29: sType = "nw_it_sparscr904"; break;
case 30: sType = "nw_it_sparscr805"; break;
case 31: sType = "x1_it_spdvscr802"; break;
case 32: sType = "nw_it_sparscr911"; break;
case 33: sType = "x1_it_spdvscr901"; break;
case 34: sType = "nw_it_sparscr909"; break;
case 35: sType = "nw_it_sparscr907"; break;
case 36: sType = "x1_it_spdvscr801"; break;
case 37: sType = "nw_it_sparscr906"; break;
case 38: sType = "nw_it_sparscr808"; break;
case 39: sType = "x2_it_sparscr801"; break;
case 40: sType = "x2_it_spdvscr804"; break;
}
}
object oScroll = CreateItemOnObject(sType, oSack, 1);
SetIdentified(oScroll, FALSE);
}
void DropPotion(object oMod, object oSack)
{
string sPotion;
int nRandom = Random(41) + 1;
switch (nRandom)
{
case 1: sPotion = "hy_mpotion001"; break;
case 2: sPotion = "hy_mpotion002"; break;
case 3: sPotion = "hy_mpotion003"; break;
case 4: sPotion = "hy_mpotion005"; break;
case 5: sPotion = "hy_mpotion006"; break;
case 6: sPotion = "hy_mpotion008"; break;
case 7: sPotion = "hy_mpotion009"; break;
case 8: sPotion = "x2_it_mpotion001"; break;
case 9: sPotion = "nw_it_mpotion001" ; break;
case 10: sPotion = "nw_it_mpotion002" ; break;
case 11: sPotion = "nw_it_mpotion003" ; break;
case 12: sPotion = "nw_it_mpotion004" ; break;
case 13: sPotion = "nw_it_mpotion005" ; break;
case 14: sPotion = "nw_it_mpotion006"; break;
case 15: sPotion = "nw_it_mpotion007"; break;
case 16: sPotion = "nw_it_mpotion008"; break;
case 17: sPotion = "nw_it_mpotion009"; break;
case 18: sPotion = "nw_it_mpotion010"; break;
case 19: sPotion = "nw_it_mpotion011"; break;
case 20: sPotion = "nw_it_mpotion012"; break;
case 21: sPotion = "nw_it_mpotion013"; break;
case 22: sPotion = "nw_it_mpotion014"; break;
case 23: sPotion = "nw_it_mpotion015"; break;
case 24: sPotion = "nw_it_mpotion016"; break;
case 25: sPotion = "nw_it_mpotion017"; break;
case 26: sPotion = "nw_it_mpotion018"; break;
case 27: sPotion = "nw_it_mpotion019"; break;
case 28: sPotion = "nw_it_mpotion020"; break;
case 29: sPotion = "x2_it_mpotion001"; break;
case 30: sPotion = "hy_mpotion001"; break;
case 31: sPotion = "hy_mpotion002"; break;
case 32: sPotion = "hy_mpotion003"; break;
case 33: sPotion = "hy_mpotion004"; break;
case 34: sPotion = "hy_mpotion005"; break;
case 35: sPotion = "hy_mpotion006"; break;
case 36: sPotion = "hy_mpotion007"; break;
case 37: sPotion = "hy_mpotion008"; break;
case 38: sPotion = "hy_mpotion009"; break;
case 39: sPotion = "hy_mpotion010"; break;
case 40: sPotion = "hy_mpotion011"; break;
case 41: sPotion = "hy_mpotion012"; break;
}
CreateItemOnObject(sPotion, oSack, 1);
}
void DropRodWand(object oMod, object oSack)
{
string sType;
int nRandom = Random(16) + 1;
switch (nRandom)
{//::: Rods
case 1: sType = "nw_wmgmrd002"; break; //res
case 2: sType = "nw_wmgmrd005"; break; //rev
case 3: sType = "nw_wmgrd002"; break; // ghost
case 4: sType = "nw_wmgmrd006"; break; // frost
//:: Wands
case 5: sType = "nw_wmgwn011"; break;
case 6: sType = "nw_wmgwn002"; break;
case 7: sType = "nw_wmgwn007"; break;
case 8: sType = "nw_wmgwn004"; break;
case 9: sType = "nw_wmgwn006"; break;
case 10: sType = "nw_wmgwn005"; break;
case 11: sType = "nw_wmgwn012"; break;
case 12: sType = "nw_wmgwn010"; break;
case 13: sType = "nw_wmgwn008"; break;
case 14: sType = "nw_wmgwn009"; break;
case 15: sType = "nw_wmgwn003"; break;
case 16: sType = "nw_wmgwn013"; break;
}
CreateItemOnObject(sType, oSack, 1);
}
void DropMisc(object oMod, object oSack)
{
string sName;
int nDice = Random(22)+1;
switch (nDice)
{
case 1: sName = "nw_it_contain002"; break; //mpouch
case 2: sName = "nw_it_msmlmisc05"; break; //healpearl
case 3: sName = "nw_it_mmidmisc04"; break; //scab bless
case 4: sName = "x0_it_msmlmisc05"; break; //earth elem
case 5: sName = "x0_it_mmedmisc03"; break; //harp
case 6: sName = "x0_it_msmlmisc01"; break; //water elem
case 7: sName = "x0_it_msmlmisc02"; break; //fire elem
case 8: sName = "x0_it_mmedmisc01"; break; //shielding
case 9: sName = "x0_it_mthnmisc21"; break; //air elem
case 10: sName = "x0_it_mthnmisc19"; break; //bard lire
case 11: sName = "x0_it_mthnmisc17"; break; // bard spls
case 12: sName = "x0_it_mmedmisc02"; break; // bard spls
case 13: sName = "x0_it_mthnmisc05"; break; // dust app
case 14: sName = "x0_it_mthnmisc06"; break; // dust dissapp
case 15: sName = "x0_it_mthnmisc13"; break; // sunbeam
case 16: sName = "x0_it_mthnmisc15"; break; //
case 17: sName = "x0_it_mthnmisc14"; break; // lath chal
case 18: sName = "nw_it_mmidmisc01"; break; // harp charm
case 19: sName = "nw_it_mmidmisc02"; break; // harp haunt
case 20: sName = "nw_it_mmidmisc03"; break; // harp pand
case 21: sName = "x0_it_msmlmisc06"; break; // horn good/evil
case 22: sName = "x0_it_mthnmisc09"; break; //
}
CreateItemOnObject(sName, oSack, 1);
}
void DropSetItem(object oMod, object oSack, int iClass)
{
string sName;
int iDice;
if (iClass==0)iClass = d12();
switch (iClass)
{
case 1:
{ //:: STR Fighter Set
iDice = d6();
switch(iDice)
{
case 1: sName = "sd_fighter_s1_1"; break;
case 2: sName = "sd_fighter_s1_2"; break;
case 3: sName = "sd_fighter_s1_3"; break;
case 4: sName = "sd_fighter_s1_4"; break;
case 5: sName = "sd_fighter_s1_5"; break;
case 6: sName = "sd_fighter_s1_6"; break;
}
}
break;
case 2:
{//:: Wizard Set
iDice = d6();
switch(iDice)
{
case 1: sName = "sd_wizard_s1_1"; break;
case 2: sName = "sd_wizard_s1_2"; break;
case 3: sName = "sd_wizard_s1_3"; break;
case 4: sName = "sd_wizard_s1_4"; break;
case 5: sName = "sd_wizard_s1_5"; break;
case 6: sName = "sd_wizard_s1_6"; break;
}
}
break;
case 3:
{//:: Sorcerer Set
iDice = d6();
switch(iDice)
{
case 1: sName = "sd_sorc_s1_1"; break;
case 2: sName = "sd_sorc_s1_2"; break;
case 3: sName = "sd_sorc_s1_3"; break;
case 4: sName = "sd_sorc_s1_4"; break;
case 5: sName = "sd_sorc_s1_5"; break;
case 6: sName = "sd_sorc_s1_6"; break;
}
}
break;
case 4:
{//:: DEX Fighter/Rogue Set
iDice = d6();
switch(iDice)
{
case 1: sName = "sd_fighter_s2_1"; break;
case 2: sName = "sd_fighter_s2_2"; break;
case 3: sName = "sd_fighter_s2_3"; break;
case 4: sName = "sd_fighter_s2_4"; break;
case 5: sName = "sd_fighter_s2_5"; break;
case 6: sName = "sd_fighter_s2_6"; break;
}
}
break;
case 5:
{//:: Cleric Set
iDice = d6();
switch(iDice)
{
case 1: sName = "sd_cleric_s1_1"; break;
case 2: sName = "sd_cleric_s1_2"; break;
case 3: sName = "sd_cleric_s1_3"; break;
case 4: sName = "sd_cleric_s1_4"; break;
case 5: sName = "sd_cleric_s1_5"; break;
case 6: sName = "sd_cleric_s1_6"; break;
}
}
break;
case 6:
{//:: Bard Set
iDice = d6();
switch(iDice)
{
case 1: sName = "sd_bard_s1_1"; break;
case 2: sName = "sd_bard_s1_2"; break;
case 3: sName = "sd_bard_s1_3"; break;
case 4: sName = "sd_bard_s1_4"; break;
case 5: sName = "sd_bard_s1_5"; break;
case 6: sName = "sd_bard_s1_6"; break;
}
}
break;
case 7:
{//:: Paladin Set
iDice = d6();
switch(iDice)
{
case 1: sName = "sd_paladin_s1_1"; break;
case 2: sName = "sd_paladin_s1_2"; break;
case 3: sName = "sd_paladin_s1_3"; break;
case 4: sName = "sd_paladin_s1_4"; break;
case 5: sName = "sd_paladin_s1_5"; break;
case 6: sName = "sd_paladin_s1_6"; break;
}
}
break;
case 8:
{//:: Druid Set
iDice = d6();
switch(iDice)
{
case 1: sName = "sd_druid_s1_1"; break;
case 2: sName = "sd_druid_s1_2"; break;
case 3: sName = "sd_druid_s1_3"; break;
case 4: sName = "sd_druid_s1_4"; break;
case 5: sName = "sd_druid_s1_5"; break;
case 6: sName = "sd_druid_s1_6"; break;
}
}
break;
case 9:
{//:: Ranger Set
iDice = d6();
switch(iDice)
{
case 1: sName = "sd_ranger_s1_1"; break;
case 2: sName = "sd_ranger_s1_2"; break;
case 3: sName = "sd_ranger_s1_3"; break;
case 4: sName = "sd_ranger_s1_4"; break;
case 5: sName = "sd_ranger_s1_5"; break;
case 6: sName = "sd_ranger_s1_6"; break;
}
}
break;
case 10:
{//:: Monk Set
iDice = d6();
switch(iDice)
{
case 1: sName = "sd_monk_s1_1"; break;
case 2: sName = "sd_monk_s1_2"; break;
case 3: sName = "sd_monk_s1_3"; break;
case 4: sName = "sd_monk_s1_4"; break;
case 5: sName = "sd_monk_s1_5"; break;
case 6: sName = "sd_monk_s1_6"; break;
}
}
break;
case 11:
{//:: Barbarian Set
iDice = d6();
switch(iDice)
{
case 1: sName = "sd_barb_s1_6"; break;
case 2: sName = "sd_barb_s1_1"; break;
case 3: sName = "sd_barb_s1_2"; break;
case 4: sName = "sd_barb_s1_3"; break;
case 5: sName = "sd_barb_s1_4"; break;
case 6: sName = "sd_barb_s1_5"; break;
}
}
break;
case 12:
{//:: Dual Weapon / Weapon & Shield Sets
iDice = d6();
switch(iDice)
{
case 1: sName = "sd_weap_s1_1"; break;
case 2: sName = "sd_weap_s1_2"; break;
case 3: sName = "sd_weap_s2_1"; break;
case 4: sName = "sd_weap_s2_2"; break;
case 5: sName = "sd_weap_s3_1"; break;
case 6: sName = "sd_weap_s3_2"; break;
}
}
break;
}
// coming soon: Ring Sets, Ammy/Ring Sets
//////////////////////////////////////
//:Debugging
FloatingTextStringOnCreature("Class: "+IntToString(iClass), oMod);
FloatingTextStringOnCreature("Roll: "+IntToString(iDice), oMod);
FloatingTextStringOnCreature(sName, oMod);
CreateItemOnObject(sName, oSack, 1);
}
void DropGold (object oMob, object oSack, int iBonus)
{
string sGold, sLvl;
int iHD = GetHitDice(oMob);
int iGold = 0;
iGold = (d20()*iHD)+(10*iHD)+iBonus;
CreateItemOnObject("nw_it_gold001", oSack, iGold);
/////////////////////////////////////////////////////////////////////////
//Gold Debugging
//object oKiller = GetFirstPC();
//sGold = IntToString(iGold);
//sLvl = IntToString(iHD);
//FloatingTextStringOnCreature(sGold+" Gold Spawned by lvl "+sLvl+" mob", oKiller);
//
//
//
}
void CastImbue(object oItem, int iRange)
{
itemproperty ipAdd;
int iSpell;
int iUses;
int iRoll;
switch (iRange)
{
case 1:
{
iRoll = d20();
if (iRoll==1)iSpell = IP_CONST_CASTSPELL_BURNING_HANDS_2;
if (iRoll==2)iSpell = IP_CONST_CASTSPELL_BARKSKIN_3;
if (iRoll==3)iSpell = IP_CONST_CASTSPELL_MAGE_ARMOR_2;
if (iRoll==4)iSpell = IP_CONST_CASTSPELL_MAGIC_MISSILE_5;
if (iRoll==5)iSpell = IP_CONST_CASTSPELL_COLOR_SPRAY_2;
if (iRoll==6)iSpell = IP_CONST_CASTSPELL_DOOM_5;
if (iRoll==7)iSpell = IP_CONST_CASTSPELL_ENTANGLE_5;
if (iRoll==8)iSpell = IP_CONST_CASTSPELL_GHOSTLY_VISAGE_3;
if (iRoll==9)iSpell = IP_CONST_CASTSPELL_BLESS_2;
if (iRoll==10)iSpell = IP_CONST_CASTSPELL_BULLS_STRENGTH_3;
if (iRoll==11)iSpell = IP_CONST_CASTSPELL_CATS_GRACE_3;
if (iRoll==12)iSpell = IP_CONST_CASTSPELL_CLARITY_3;
if (iRoll==13)iSpell = IP_CONST_CASTSPELL_GREASE_2;
if (iRoll==14)iSpell = IP_CONST_CASTSPELL_HOLD_PERSON_3;
if (iRoll==15)iSpell = IP_CONST_CASTSPELL_HOLD_MONSTER_7;
if (iRoll==16)iSpell = IP_CONST_CASTSPELL_INVISIBILITY_3;
if (iRoll==17)iSpell = IP_CONST_CASTSPELL_INVISIBILITY_PURGE_5;
if (iRoll==18)iSpell = IP_CONST_CASTSPELL_LIGHTNING_BOLT_5;
if (iRoll==19)iSpell = IP_CONST_CASTSPELL_SHIELD_5;
if (iRoll==20)iSpell = IP_CONST_CASTSPELL_SILENCE_3;
}
break;
case 2:
{
iRoll = d20();
if (iRoll==1)iSpell = IP_CONST_CASTSPELL_DISPLACEMENT_9;
if (iRoll==2)iSpell = IP_CONST_CASTSPELL_FIREBALL_10;
if (iRoll==3)iSpell = IP_CONST_CASTSPELL_MAGIC_CIRCLE_AGAINST_ALIGNMENT_5;
if (iRoll==4)iSpell = IP_CONST_CASTSPELL_SLAY_LIVING_9;
if (iRoll==5)iSpell = IP_CONST_CASTSPELL_STONESKIN_7;
if (iRoll==6)iSpell = IP_CONST_CASTSPELL_ICE_STORM_9;
if (iRoll==7)iSpell = IP_CONST_CASTSPELL_CALL_LIGHTNING_10;
if (iRoll==8)iSpell = IP_CONST_CASTSPELL_ISAACS_LESSER_MISSILE_STORM_13;
if (iRoll==9)iSpell = IP_CONST_CASTSPELL_FLAME_ARROW_12;
if (iRoll==10)iSpell = IP_CONST_CASTSPELL_FLAME_STRIKE_7;
if (iRoll==11)iSpell = IP_CONST_CASTSPELL_HOLD_PERSON_3;
if (iRoll==12)iSpell = IP_CONST_CASTSPELL_HOLD_MONSTER_7;
if (iRoll==13)iSpell = IP_CONST_CASTSPELL_INVISIBILITY_PURGE_5;
if (iRoll==14)iSpell = IP_CONST_CASTSPELL_INVISIBILITY_SPHERE_5;
if (iRoll==15)iSpell = IP_CONST_CASTSPELL_LIGHTNING_BOLT_10;
if (iRoll==16)iSpell = IP_CONST_CASTSPELL_MINOR_GLOBE_OF_INVULNERABILITY_7;
if (iRoll==17)iSpell = IP_CONST_CASTSPELL_STINKING_CLOUD_5;
if (iRoll==18)iSpell = IP_CONST_CASTSPELL_SUMMON_CREATURE_IV_7;
if (iRoll==19)iSpell = IP_CONST_CASTSPELL_SUMMON_CREATURE_V_9;
if (iRoll==20)iSpell = IP_CONST_CASTSPELL_SUMMON_CREATURE_VI_11;
}
break;
case 3:
{
iRoll = d12();
if (iRoll==1)iSpell = IP_CONST_CASTSPELL_SUNBEAM_13;
if (iRoll==2)iSpell = IP_CONST_CASTSPELL_CONE_OF_COLD_15;
if (iRoll==3)iSpell = IP_CONST_CASTSPELL_MASS_HEAL_15;
if (iRoll==4)iSpell = IP_CONST_CASTSPELL_ETHEREAL_VISAGE_15;
if (iRoll==5)iSpell = IP_CONST_CASTSPELL_GREATER_DISPELLING_15;
if (iRoll==6)iSpell = IP_CONST_CASTSPELL_ISAACS_GREATER_MISSILE_STORM_15;
if (iRoll==7)iSpell = IP_CONST_CASTSPELL_CHAIN_LIGHTNING_20;
if (iRoll==8)iSpell = IP_CONST_CASTSPELL_GREATER_STONESKIN_11;
if (iRoll==9)iSpell = IP_CONST_CASTSPELL_FIREBRAND_15;
if (iRoll==10)iSpell = IP_CONST_CASTSPELL_FLAME_ARROW_12;
if (iRoll==11)iSpell = IP_CONST_CASTSPELL_FLAME_STRIKE_12;
if (iRoll==12)iSpell = IP_CONST_CASTSPELL_INVISIBILITY_SPHERE_5;
}
break;
case 4:
{
iRoll = Random(16);
if (iRoll==1)iSpell = IP_CONST_CASTSPELL_BIGBYS_FORCEFUL_HAND_15;
if (iRoll==2)iSpell = IP_CONST_CASTSPELL_HORRID_WILTING_20;
if (iRoll==3)iSpell = IP_CONST_CASTSPELL_IMPLOSION_17;
if (iRoll==4)iSpell = IP_CONST_CASTSPELL_INCENDIARY_CLOUD_15;
if (iRoll==5)iSpell = IP_CONST_CASTSPELL_PREMONITION_15;
if (iRoll==6)iSpell = IP_CONST_CASTSPELL_MORDENKAINENS_DISJUNCTION_17;
if (iRoll==7)iSpell = IP_CONST_CASTSPELL_METEOR_SWARM_17;
if (iRoll==8)iSpell = IP_CONST_CASTSPELL_ISAACS_GREATER_MISSILE_STORM_15;
if (iRoll==9)iSpell = IP_CONST_CASTSPELL_SUNBEAM_13;
if (iRoll==10)iSpell = IP_CONST_CASTSPELL_CONE_OF_COLD_15;
if (iRoll==11)iSpell = IP_CONST_CASTSPELL_MASS_HEAL_15;
if (iRoll==12)iSpell = IP_CONST_CASTSPELL_ETHEREAL_VISAGE_15;
if (iRoll==13)iSpell = IP_CONST_CASTSPELL_FIREBRAND_15;
if (iRoll==14)iSpell = IP_CONST_CASTSPELL_FLAME_ARROW_18;
if (iRoll==15)iSpell = IP_CONST_CASTSPELL_FLAME_STRIKE_18;
if (iRoll==16)iSpell = IP_CONST_CASTSPELL_MASS_HEAL_15;
}
break;
case 5:
{
iRoll = d20();
if (iRoll==1)iSpell = IP_CONST_CASTSPELL_WAIL_OF_THE_BANSHEE_17;
if (iRoll==2)iSpell = IP_CONST_CASTSPELL_TIME_STOP_17;
if (iRoll==3)iSpell = IP_CONST_CASTSPELL_IMPLOSION_17;
if (iRoll==4)iSpell = IP_CONST_CASTSPELL_ISAACS_GREATER_MISSILE_STORM_15;
if (iRoll==5)iSpell = IP_CONST_CASTSPELL_HORRID_WILTING_20;
if (iRoll==6)iSpell = IP_CONST_CASTSPELL_MORDENKAINENS_SWORD_18;
if (iRoll==7)iSpell = IP_CONST_CASTSPELL_MORDENKAINENS_DISJUNCTION_17;
if (iRoll==8)iSpell = IP_CONST_CASTSPELL_MASS_HEAL_15;
if (iRoll==9)iSpell = IP_CONST_CASTSPELL_BIGBYS_FORCEFUL_HAND_15;
if (iRoll==10)iSpell = IP_CONST_CASTSPELL_HORRID_WILTING_20;
if (iRoll==11)iSpell = IP_CONST_CASTSPELL_IMPLOSION_17;
if (iRoll==12)iSpell = IP_CONST_CASTSPELL_INCENDIARY_CLOUD_15;
if (iRoll==13)iSpell = IP_CONST_CASTSPELL_PREMONITION_15;
if (iRoll==14)iSpell = IP_CONST_CASTSPELL_MORDENKAINENS_DISJUNCTION_17;
if (iRoll==15)iSpell = IP_CONST_CASTSPELL_METEOR_SWARM_17;
if (iRoll==16)iSpell = IP_CONST_CASTSPELL_ISAACS_GREATER_MISSILE_STORM_15;
if (iRoll==17)iSpell = IP_CONST_CASTSPELL_SUNBEAM_13;
if (iRoll==18)iSpell = IP_CONST_CASTSPELL_CONE_OF_COLD_15;
if (iRoll==19)iSpell = IP_CONST_CASTSPELL_MASS_HEAL_15;
if (iRoll==20)iSpell = IP_CONST_CASTSPELL_ETHEREAL_VISAGE_15;
}
break;
}
switch (iRange)
{
case 1:
{
iRoll = d3();
if (iRoll==1)iUses = IP_CONST_CASTSPELL_NUMUSES_5_CHARGES_PER_USE;
if (iRoll==2)iUses = IP_CONST_CASTSPELL_NUMUSES_4_CHARGES_PER_USE;
if (iRoll==3)iUses = IP_CONST_CASTSPELL_NUMUSES_3_CHARGES_PER_USE;
break;
}
case 2:
{
iRoll = d3();
if (iRoll==1)iUses = IP_CONST_CASTSPELL_NUMUSES_5_CHARGES_PER_USE;
if (iRoll==2)iUses = IP_CONST_CASTSPELL_NUMUSES_5_CHARGES_PER_USE;
if (iRoll==3)iUses = IP_CONST_CASTSPELL_NUMUSES_4_CHARGES_PER_USE;
break;
}
case 3:
{
iRoll = d3();
if (iRoll==1)iUses = IP_CONST_CASTSPELL_NUMUSES_4_CHARGES_PER_USE;
if (iRoll==2)iUses = IP_CONST_CASTSPELL_NUMUSES_3_CHARGES_PER_USE;
if (iRoll==3)iUses = IP_CONST_CASTSPELL_NUMUSES_2_CHARGES_PER_USE;
iRoll = d100();
if (iRoll > 95)
{
iUses = IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY;
}
break;
}
case 4:
{
iRoll = d3();
if (iRoll==1)iUses = IP_CONST_CASTSPELL_NUMUSES_1_CHARGE_PER_USE;
if (iRoll==2)iUses = IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY;
if (iRoll==3)iUses = IP_CONST_CASTSPELL_NUMUSES_2_USES_PER_DAY;
iRoll = d100();
if (iRoll > 95)
{
iUses = IP_CONST_CASTSPELL_NUMUSES_2_USES_PER_DAY;
}
break;
}
case 5:
{
iRoll = d3();
if (iRoll==1)iUses = IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY;
if (iRoll==2)iUses = IP_CONST_CASTSPELL_NUMUSES_2_USES_PER_DAY;
if (iRoll==3)iUses = IP_CONST_CASTSPELL_NUMUSES_3_USES_PER_DAY;
iRoll = d100();
if (iRoll > 90)
{
iUses = IP_CONST_CASTSPELL_NUMUSES_4_USES_PER_DAY;
}
break;
}
}
ipAdd = ItemPropertyCastSpell(iSpell, iUses);
IPSafeAddItemProperty(oItem, ipAdd);
iRoll = (d12() * iRange)+1; if (iRoll > 50) iRoll = 50;
SetItemCharges(oItem, iRoll);
}
void WeapOnHit(object oItem, int iRange)
{
itemproperty ipAdd;
int iProperty;
int iSaveDC;
int iSpecial;
int iRoll;
switch (iRange)
{
case 1:
{
iRoll = d3();
if (iRoll==1)iProperty = IP_CONST_ONHIT_DOOM;
if (iRoll==2)iProperty = IP_CONST_ONHIT_DEAFNESS;
if (iRoll==3)iProperty = IP_CONST_ONHIT_SLOW;
}
break;
case 2:
{
iRoll = d4();
if (iRoll==1)iProperty = IP_CONST_ONHIT_DOOM;
if (iRoll==2)iProperty = IP_CONST_ONHIT_DEAFNESS;
if (iRoll==3)iProperty = IP_CONST_ONHIT_SLOW;
if (iRoll==4)iProperty = IP_CONST_ONHIT_SLEEP;
}
break;
case 3:
{
iRoll = d6();
if (iRoll==1)iProperty = IP_CONST_ONHIT_DOOM;
if (iRoll==2)iProperty = IP_CONST_ONHIT_DEAFNESS;
if (iRoll==3)iProperty = IP_CONST_ONHIT_SLOW;
if (iRoll==4)iProperty = IP_CONST_ONHIT_SLEEP;
if (iRoll==5)iProperty = IP_CONST_ONHIT_DAZE;
if (iRoll==6)iProperty = IP_CONST_ONHIT_STUN;
}
break;
case 4:
{
iRoll = d10();
if (iRoll==1)iProperty = IP_CONST_ONHIT_DOOM;
if (iRoll==2)iProperty = IP_CONST_ONHIT_SILENCE;
if (iRoll==3)iProperty = IP_CONST_ONHIT_SLOW;
if (iRoll==4)iProperty = IP_CONST_ONHIT_SLEEP;
if (iRoll==5)iProperty = IP_CONST_ONHIT_DAZE;
if (iRoll==6)iProperty = IP_CONST_ONHIT_STUN;
if (iRoll==7)iProperty = IP_CONST_ONHIT_HOLD;
if (iRoll==8)iProperty = IP_CONST_ONHIT_CONFUSION;
if (iRoll==9)iProperty = IP_CONST_ONHIT_ABILITYDRAIN;
if (iRoll==10)iProperty = IP_CONST_ONHIT_FEAR;
}
break;
case 5:
{
iRoll = d12();
if (iRoll==1)iProperty = IP_CONST_ONHIT_DOOM;
if (iRoll==2)iProperty = IP_CONST_ONHIT_SILENCE;
if (iRoll==3)iProperty = IP_CONST_ONHIT_SLOW;
if (iRoll==4)iProperty = IP_CONST_ONHIT_SLEEP;
if (iRoll==5)iProperty = IP_CONST_ONHIT_DAZE;
if (iRoll==6)iProperty = IP_CONST_ONHIT_STUN;
if (iRoll==7)iProperty = IP_CONST_ONHIT_HOLD;
if (iRoll==8)iProperty = IP_CONST_ONHIT_CONFUSION;
if (iRoll==9)iProperty = IP_CONST_ONHIT_ABILITYDRAIN;
if (iRoll==10)iProperty = IP_CONST_ONHIT_FEAR;
if (iRoll==11)iProperty = IP_CONST_ONHIT_BLINDNESS;
if (iRoll==12)iProperty = IP_CONST_ONHIT_LEVELDRAIN;
}
break;
}
switch (iRange)
{
case 1:
{
iRoll = d2();
if (iRoll==1)iSaveDC = IP_CONST_ONHIT_SAVEDC_14;
if (iRoll==2)iSaveDC = IP_CONST_ONHIT_SAVEDC_14;
break;
}
case 2:
{
iRoll = d3();
if (iRoll==1)iSaveDC = IP_CONST_ONHIT_SAVEDC_14;
if (iRoll==2)iSaveDC = IP_CONST_ONHIT_SAVEDC_14;
if (iRoll==3)iSaveDC = IP_CONST_ONHIT_SAVEDC_14;
break;
}
case 3:
{
iRoll = d3();
if (iRoll==1)iSaveDC = IP_CONST_ONHIT_SAVEDC_14;
if (iRoll==2)iSaveDC = IP_CONST_ONHIT_SAVEDC_14;
if (iRoll==3)iSaveDC = IP_CONST_ONHIT_SAVEDC_16;
iRoll = d100();
if (iRoll > 95)
{
iSaveDC = IP_CONST_ONHIT_SAVEDC_18;
}
break;
}
case 4:
{
iRoll = d4();
if (iRoll==1)iSaveDC = IP_CONST_ONHIT_SAVEDC_14;
if (iRoll==2)iSaveDC = IP_CONST_ONHIT_SAVEDC_14;
if (iRoll==3)iSaveDC = IP_CONST_ONHIT_SAVEDC_16;
if (iRoll==4)iSaveDC = IP_CONST_ONHIT_SAVEDC_18;
iRoll=d100();
if (iRoll > 95)
{
iSaveDC = IP_CONST_ONHIT_SAVEDC_20;
}
break;
}
case 5:
{
iRoll = d4();
if (iRoll==1)iSaveDC = IP_CONST_ONHIT_SAVEDC_16;
if (iRoll==2)iSaveDC = IP_CONST_ONHIT_SAVEDC_18;
if (iRoll==3)iSaveDC = IP_CONST_ONHIT_SAVEDC_20;
if (iRoll==4)iSaveDC = IP_CONST_ONHIT_SAVEDC_22;
iRoll=d100();
if (iRoll>90)
{
iSaveDC = IP_CONST_ONHIT_SAVEDC_24;
}
break;
}
}
switch (iRange)
{
case 1: case 2: case 3: case 4: case 5:
{
iRoll = Random(5);
if (iRoll==1)iSpecial = IP_CONST_ONHIT_DURATION_5_PERCENT_5_ROUNDS;
if (iRoll==2)iSpecial = IP_CONST_ONHIT_DURATION_10_PERCENT_4_ROUNDS;
if (iRoll==3)iSpecial = IP_CONST_ONHIT_DURATION_25_PERCENT_3_ROUNDS;
if (iRoll==4)iSpecial = IP_CONST_ONHIT_DURATION_50_PERCENT_2_ROUNDS;
if (iRoll==5)iSpecial = IP_CONST_ONHIT_DURATION_75_PERCENT_1_ROUND;
break;
}
}
ipAdd = ItemPropertyOnHitProps(iProperty, iSaveDC, iSpecial);
IPSafeAddItemProperty(oItem, ipAdd);
}
void SpellSlot(object oItem, int iRange, int iNum)
{
itemproperty ipAdd;
itemproperty ipClass;
int iLvl, i;
int iClass;
int iSpec;
int iRoll;
iRoll = d8();
switch (iRoll)
{
case 1:
{
iClass = IP_CONST_CLASS_BARD; iSpec = 1;
ipClass = ItemPropertyLimitUseByClass(IP_CONST_CLASS_BARD);
}
break;
case 2:
{
iClass = IP_CONST_CLASS_DRUID;
ipClass = ItemPropertyLimitUseByClass(IP_CONST_CLASS_DRUID);
}
break;
case 3:
{
iClass = IP_CONST_CLASS_SORCERER;
ipClass = ItemPropertyLimitUseByClass(IP_CONST_CLASS_SORCERER);
}
break;
case 4:
{
iClass = IP_CONST_CLASS_WIZARD;
ipClass = ItemPropertyLimitUseByClass(IP_CONST_CLASS_WIZARD);
}
break;
case 5:
{
iClass = IP_CONST_CLASS_PALADIN; iSpec = 2;
ipClass = ItemPropertyLimitUseByClass(IP_CONST_CLASS_PALADIN);
}
break;
case 6:
{
iClass = IP_CONST_CLASS_RANGER; iSpec = 2;
ipClass = ItemPropertyLimitUseByClass(IP_CONST_CLASS_RANGER);
}
break;
case 7:
{
iClass = IP_CONST_CLASS_CLERIC;
ipClass = ItemPropertyLimitUseByClass(IP_CONST_CLASS_CLERIC);
}
break;
case 8:
{
iClass = IP_CONST_CLASS_WIZARD;
ipClass = ItemPropertyLimitUseByClass(IP_CONST_CLASS_WIZARD);
}
break;
}
for (i = 0; i < iNum; i++)
{
if (iSpec == 1)
{
switch (iRange) // Bard max lvl 6
{
case 1: iLvl = 1; break; // 1
case 2: {iLvl = d3();if(iLvl==3)iLvl=2;}break; // 1-2
case 3: {iLvl = d3()+2;if(iLvl==5)iLvl=3;}break; // 3-4
case 4: {iLvl = d3()+3;if(iLvl==6)iLvl=4;}break; // 4-5
case 5: {iLvl = d3()+4;if(iLvl==7)iLvl=5;}break; // 5-6
}
}
else if (iSpec == 2)
{
switch (iRange) // Pally & Ranger max lvl 4
{
case 1: iLvl = 1; break; // 1
case 2: {iLvl = d3();if(iLvl==3)iLvl=2;}break; // 1-2
case 3: iLvl = d3(); break; // 1-3
case 4: iLvl = d3()+1; break; // 2-4
case 5: {iLvl = d3()+2;if(iLvl==5)iLvl=3;}break; // 3-4
}
}
else
{
switch (iRange) // The rest max lvl 9
{
case 1: iLvl = 1; break; // 1
case 2: iLvl = d4(); break; // 1-4
case 3: iLvl = d4()+1; break; // 2-5
case 4: iLvl = d6()+2; break; // 3-8
case 5: iLvl = d6()+4; break; // 5-9
}
}
ipAdd = ItemPropertyBonusLevelSpell(iClass, iLvl);
AddItemProperty(DURATION_TYPE_PERMANENT, ipAdd, oItem);
}
IPSafeAddItemProperty(oItem, ipClass);
}
void ImbueDivinity(object oItem, int iRange) //:: PRC8
{
itemproperty ipAdd;
int iEnh;
switch (iRange)
{
case 1:
{
//:: Cantrips & 1st lvl spells
iEnh = Random(2); break;
}
case 2:
{
//:: 1st & 2nd lvl spells
iEnh = Random(2)+1; break;
}
case 3:
{
//:: 2nd & 3rd lvl spells
iEnh = Random(2)+2; break;
}
case 4:
{
//:: 3rd & 4th lvl spells
iEnh = Random(2)+3; break;
}
case 5:
{
//:: 3rd, 4th & 5th lvl spells
iEnh = Random(3)+3; break;
}
}
ipAdd = ItemPropertyDivinity(iEnh);
IPSafeAddItemProperty(oItem, ipAdd);
}
void ImbueWizardry(object oItem, int iRange) //:: PRC8
{
itemproperty ipAdd;
int iEnh;
switch (iRange)
{
case 1:
{
//:: Cantrips & 1st lvl spells
iEnh = Random(2); break;
}
case 2:
{
//:: 1st & 2nd lvl spells
iEnh = Random(2)+1; break;
}
case 3:
{
//:: 2nd & 3rd lvl spells
iEnh = Random(2)+2; break;
}
case 4:
{
//:: 3rd & 4th lvl spells
iEnh = Random(2)+3; break;
}
case 5:
{
//:: 3rd, 4th & 5th lvl spells
iEnh = Random(3)+3; break;
}
}
ipAdd = ItemPropertyWizardry(iEnh);
IPSafeAddItemProperty(oItem, ipAdd);
}
void MightyEnhance(object oItem, int iRange)
{
itemproperty ipAdd;
int iEnh = d4();
switch (iRange)
{
case 1: iEnh+=0; break; // 1-4
case 2: iEnh+=1; break; // 2-5
case 3: iEnh+=2; break; // 3-6
case 4: iEnh+=3; break; // 4-7
case 5: iEnh+=4; break; // 5-8
}
ipAdd = ItemPropertyMaxRangeStrengthMod(iEnh);
IPSafeAddItemProperty(oItem, ipAdd);
}
void BowEnhance(object oItem, int iRange)
{
itemproperty ipAdd;
int iEnh = d3();
switch (iRange)
{
case 1: if (iEnh==3)iEnh=1; break; // 1-2
case 2: {iEnh+=1;if (iEnh==4)iEnh=1;} break; // 2-3
case 3: {iEnh+=1;if (iEnh==4)iEnh=2;} break; // 3-4
case 4: {iEnh+=2;if (iEnh==5)iEnh=3;} break; // 4-5
case 5: {iEnh+=3;if (iEnh==6)iEnh=4;} break; // 5-6
}
ipAdd = ItemPropertyAttackBonus(iEnh);
IPSafeAddItemProperty(oItem, ipAdd);
}
void AmmoUnlim(object oItem, int iRange)
{
itemproperty ipAdd;
int iType;
int iDam;
int iRoll = d12();
switch (iRange)
{
case 1:
{
iRoll = d3();
if (iRoll==1)iType = IP_CONST_UNLIMITEDAMMO_BASIC;
if (iRoll==2)iType = IP_CONST_UNLIMITEDAMMO_BASIC;
if (iRoll==3)iType = IP_CONST_UNLIMITEDAMMO_PLUS1;
}
break;
case 2:
{
iRoll = d4();
if (iRoll==1)iType = IP_CONST_UNLIMITEDAMMO_PLUS2;
if (iRoll==2)iType = IP_CONST_UNLIMITEDAMMO_PLUS2;
if (iRoll==3)iType = IP_CONST_UNLIMITEDAMMO_1D6COLD;
if (iRoll==4)iType = IP_CONST_UNLIMITEDAMMO_1D6LIGHT;
}
break;
case 3:
{
iRoll = d6();
if (iRoll==1)iType = IP_CONST_UNLIMITEDAMMO_PLUS2;
if (iRoll==2)iType = IP_CONST_UNLIMITEDAMMO_PLUS2;
if (iRoll==3)iType = IP_CONST_UNLIMITEDAMMO_PLUS3;
if (iRoll==4)iType = IP_CONST_UNLIMITEDAMMO_1D6FIRE;
if (iRoll==5)iType = IP_CONST_UNLIMITEDAMMO_1D6COLD;
if (iRoll==6)iType = IP_CONST_UNLIMITEDAMMO_1D6LIGHT;
}
break;
case 4:
{
iRoll = d6();
if (iRoll==1)iType = IP_CONST_UNLIMITEDAMMO_PLUS3;
if (iRoll==2)iType = IP_CONST_UNLIMITEDAMMO_PLUS4;
if (iRoll==3)iType = IP_CONST_UNLIMITEDAMMO_PLUS4;
if (iRoll==4)iType = IP_CONST_UNLIMITEDAMMO_1D6FIRE;
if (iRoll==5)iType = IP_CONST_UNLIMITEDAMMO_1D6COLD;
if (iRoll==6)iType = IP_CONST_UNLIMITEDAMMO_1D6LIGHT;
}
break;
case 5:
{
iRoll = d6();
if (iRoll==1)iType = IP_CONST_UNLIMITEDAMMO_PLUS4;
if (iRoll==2)iType = IP_CONST_UNLIMITEDAMMO_PLUS5;
if (iRoll==3)iType = IP_CONST_UNLIMITEDAMMO_PLUS5;
if (iRoll==4)iType = IP_CONST_UNLIMITEDAMMO_1D6FIRE;
if (iRoll==5)iType = IP_CONST_UNLIMITEDAMMO_1D6COLD;
if (iRoll==6)iType = IP_CONST_UNLIMITEDAMMO_1D6LIGHT;
}
break;
}
ipAdd = ItemPropertyUnlimitedAmmo(iType);
IPSafeAddItemProperty(oItem, ipAdd);
}
void AmmoEnhance(object oItem, int iRange)
{
itemproperty ipAdd;
int iType;
int iDam;
int iRoll = d10();
switch (iRoll)
{
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_MAGICAL; break;
case 7: iType = IP_CONST_DAMAGETYPE_NEGATIVE; break;
case 8: iType = IP_CONST_DAMAGETYPE_PIERCING; break;
case 9: iType = IP_CONST_DAMAGETYPE_SLASHING; break;
case 10: iType = IP_CONST_DAMAGETYPE_SONIC; break;
}
switch (iRange)
{
case 1: iDam = IP_CONST_DAMAGEBONUS_1; break;
case 2:
{
iRoll = d4();
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1;
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d4;
}
break;
case 3:
{
iRoll = d6();
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d4;
}
break;
case 4:
{
iRoll = d8();
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d8;
if (iRoll==7)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==8)iDam = IP_CONST_DAMAGEBONUS_1d8;
}
break;
case 5:
{
iRoll = d10();
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d8;
if (iRoll==7)iDam = IP_CONST_DAMAGEBONUS_1d8;
if (iRoll==8)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==9)iDam = IP_CONST_DAMAGEBONUS_1d8;
if (iRoll==10)iDam = IP_CONST_DAMAGEBONUS_1d10;
}
break;
}
ipAdd = ItemPropertyDamageBonus(iType, iDam);
IPSafeAddItemProperty(oItem, ipAdd);
}
void WeapEnhance(object oItem, int iRange)
{
itemproperty ipAdd;
int iEnh = d3();
switch (iRange)
{
case 1: if (iEnh==3)iEnh=1; break; // 1-2
case 2: {iEnh+=1;if (iEnh==4)iEnh=1;} break; // 2-3
case 3: {iEnh+=1;if (iEnh==4)iEnh=2;} break; // 3-4
case 4: {iEnh+=2;if (iEnh==5)iEnh=3;} break; // 4-5
case 5: {iEnh+=3;if (iEnh==6)iEnh=4;} break; // 5-6
}
ipAdd = ItemPropertyAttackBonus(iEnh);
IPSafeAddItemProperty(oItem, ipAdd);
}
void RangedImbue(object oItem)
{
itemproperty ipAdd;
int iType;
int iRoll = d3();
switch (iRoll)
{
case 1: if (iRoll==1)iType=IP_CONST_DAMAGETYPE_BLUDGEONING; break;
case 2: if (iRoll==2)iType=IP_CONST_DAMAGETYPE_SLASHING; break;
case 3: if (iRoll==3)iType=IP_CONST_DAMAGETYPE_PIERCING; break;
}
ipAdd = ItemPropertyExtraRangeDamageType(iType);
IPSafeAddItemProperty(oItem, ipAdd);
}
void MeleeImbue(object oItem)
{
itemproperty ipAdd;
int iType;
int iRoll = d3();
switch (iRoll)
{
case 1: if (iRoll==1)iType=IP_CONST_DAMAGETYPE_BLUDGEONING; break;
case 2: if (iRoll==2)iType=IP_CONST_DAMAGETYPE_SLASHING; break;
case 3: if (iRoll==3)iType=IP_CONST_DAMAGETYPE_PIERCING; break;
}
ipAdd = ItemPropertyExtraMeleeDamageType(iType);
IPSafeAddItemProperty(oItem, ipAdd);
}
void MassCritImbue(object oItem, int iRange)
{
itemproperty ipAdd;
int iDam;
int iCol;
int iType;
int iRoll;
switch (iRange)
{
case 1:
{
iRoll = d3();
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1;
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
}
break;
case 2:
{
iRoll = d4();
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1;
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_2;
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d4;
iRoll=d100();
{
if (iRoll>90)iDam = IP_CONST_DAMAGEBONUS_1d6;
}
}
break;
case 3:
{
iRoll = d6();
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d6;
iRoll=d100();
{
if (iRoll>95)iDam = IP_CONST_DAMAGEBONUS_1d8;
}
}
break;
case 4:
{
iRoll = d10();
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==7)iDam = IP_CONST_DAMAGEBONUS_1d8;
if (iRoll==8)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==9)iDam = IP_CONST_DAMAGEBONUS_1d8;
if (iRoll==10)iDam = IP_CONST_DAMAGEBONUS_1d8;
iRoll=d100();
{
if (iRoll > 95)iDam = IP_CONST_DAMAGEBONUS_1d10;
}
}
break;
case 5:
{
iRoll = d12();
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d8;
if (iRoll==7)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==8)iDam = IP_CONST_DAMAGEBONUS_1d8;
if (iRoll==9)iDam = IP_CONST_DAMAGEBONUS_1d8;
if (iRoll==10)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==11)iDam = IP_CONST_DAMAGEBONUS_1d8;
if (iRoll==12)iDam = IP_CONST_DAMAGEBONUS_1d10;
iRoll=d100();
{
if (iRoll > 95)iDam = IP_CONST_DAMAGEBONUS_2d6;
}
}
break;
}
ipAdd = ItemPropertyMassiveCritical(iDam);
IPSafeAddItemProperty(oItem, ipAdd);
}
void DamageTypeImbue(object oItem, int iRange)
{
itemproperty ipAdd;
itemproperty ipVis;
int iDam;
int iCol;
int iType;
int iRoll = d10();
switch (iRoll)
{
case 1: {iType = IP_CONST_DAMAGETYPE_ACID; iCol=4;} break;
case 2: {iType = IP_CONST_DAMAGETYPE_BLUDGEONING;} break;
case 3: {iType = IP_CONST_DAMAGETYPE_COLD; iCol=2;} break;
case 4: {iType = IP_CONST_DAMAGETYPE_ELECTRICAL; iCol=5;} break;
case 5: {iType = IP_CONST_DAMAGETYPE_FIRE; iCol=3;} break;
case 6: {iType = IP_CONST_DAMAGETYPE_MAGICAL; iCol=7;} break;
case 7: {iType = IP_CONST_DAMAGETYPE_NEGATIVE; iCol=1;} break;
case 8: {iType = IP_CONST_DAMAGETYPE_PIERCING; iCol=1;} break;
case 9: {iType = IP_CONST_DAMAGETYPE_SLASHING; iCol=1;} break;
case 10: {iType = IP_CONST_DAMAGETYPE_SONIC; iCol=7; }break;
}
switch (iRange)
{
case 1:
{
iRoll = d2();
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1;
}
break;
case 2:
{
iRoll = d4();
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1;
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_2;
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d4;
}
break;
case 3:
{
iRoll = d6();
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d6;
}
break;
case 4:
{
iRoll = d10();
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==7)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==8)iDam = IP_CONST_DAMAGEBONUS_1d8;
if (iRoll==9)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==10)iDam = IP_CONST_DAMAGEBONUS_1d8;
}
break;
case 5:
{
iRoll = d12();
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d8;
if (iRoll==7)iDam = IP_CONST_DAMAGEBONUS_1d6;
if (iRoll==8)iDam = IP_CONST_DAMAGEBONUS_1d8;
if (iRoll==9)iDam = IP_CONST_DAMAGEBONUS_1d8;
if (iRoll==10)iDam = IP_CONST_DAMAGEBONUS_1d8;
if (iRoll==11)iDam = IP_CONST_DAMAGEBONUS_1d8;
if (iRoll==12)iDam = IP_CONST_DAMAGEBONUS_1d10;
}
break;
}
ipAdd = ItemPropertyDamageBonus(iType, iDam);
IPSafeAddItemProperty(oItem, ipAdd);
//ipAdd = ItemPropertyVisualEffect(ITEM_VISUAL_EVIL);
//IPSafeAddItemProperty(oItem, ipAdd);
}
void ACmisc(object oItem, int iRange)
{
itemproperty ipAdd;
int iAC = d3();
switch (iRange)
{
case 1: if(iAC==3)iAC=1; break; // 1-2
case 2: {iAC+=1;if (iAC==4)iAC=1;} break; // 2-3
case 3: {iAC+=1;if (iAC==4)iAC=2;} break; // 3-4
case 4: {iAC+=2;if (iAC==5)iAC=2;} break; // 4-5
case 5: {iAC+=3;if (iAC==6)iAC=3;} break; // 5-6
}
ipAdd = ItemPropertyACBonus(iAC);
IPSafeAddItemProperty(oItem, ipAdd);
}
void ACimbue(object oItem, int iRange, int iSpec)
{
itemproperty ipAdd;
int iAC = d3();
int iPen;
int iRoll;
int iAbil;
switch (iRange)
{
case 1: if(iAC==3)iAC=1; break; // 1-2
case 2: {iAC+=1;if (iAC==4)iAC=1;} break; // 2-3
case 3: {iAC+=1;if (iAC==4)iAC=2;} break; // 3-4
case 4: {iAC+=2;if (iAC==5)iAC=2;} break; // 4-5
case 5: {iAC+=3;if (iAC==6)iAC=3;} break; // 5-6
}
ipAdd = ItemPropertyACBonus(iAC);
if (iSpec==1){iPen = d4()+1; ipAdd = ItemPropertyDecreaseAC(IP_CONST_ACMODIFIERTYPE_ARMOR, iPen);}
if (iSpec==2){iPen = d4()+1; ipAdd = ItemPropertyEnhancementPenalty(iPen);}
if (iSpec==3)
{
iPen = d4()+1;
iRoll = d6();
switch(iRoll)
{
case 1: iAbil = ABILITY_DEXTERITY; break;
case 2: iAbil = ABILITY_INTELLIGENCE; break;
case 3: iAbil = ABILITY_WISDOM; break;
case 4: iAbil = ABILITY_CHARISMA; break;
case 5: iAbil = ABILITY_CONSTITUTION; break;
case 6: iAbil = ABILITY_STRENGTH; break;
}
ipAdd = ItemPropertyDecreaseAbility(iAbil, iPen);
}
if (iSpec==4)
{
iPen = d4()+1; ipAdd = ItemPropertyAttackPenalty(iPen);
}
IPSafeAddItemProperty(oItem, ipAdd);
}
void MIMMimbue(object oItem, int iRange)
{
itemproperty ipAdd;
int iType;
int iRoll;
switch (iRange)
{
case 1: {} break;
case 2:
{
iRoll = Random(35);
if (iRoll==1)iType = IP_CONST_IMMUNITYMISC_POISON;
if (iRoll==2)iType = IP_CONST_IMMUNITYMISC_DISEASE;
if (iRoll==3)iType = IP_CONST_IMMUNITYSPELL_SLEEP;
if (iRoll==4)iType = IP_CONST_IMMUNITYSPELL_WEB;
if (iRoll==5)iType = IP_CONST_IMMUNITYSPELL_RAY_OF_FROST;
if (iRoll==6)iType = IP_CONST_IMMUNITYSPELL_GREASE;
if (iRoll==7)iType = IP_CONST_IMMUNITYSPELL_COLOR_SPRAY;
if (iRoll==8)iType = IP_CONST_IMMUNITYSPELL_DAZE;
if (iRoll==9)iType = IP_CONST_IMMUNITYSPELL_BURNING_HANDS;
if (iRoll==10)iType = IP_CONST_IMMUNITYSPELL_BLINDNESS_AND_DEAFNESS;
if (iRoll==11)iType = IP_CONST_IMMUNITYSPELL_LIGHTNING_BOLT;
if (iRoll==12)iType = IP_CONST_IMMUNITYSPELL_MAGIC_MISSILE;
if (iRoll==13)iType = IP_CONST_FEAT_ALERTNESS;
if (iRoll==14)iType = IP_CONST_FEAT_ARMOR_PROF_HEAVY;
if (iRoll==15)iType = IP_CONST_FEAT_ARMOR_PROF_MEDIUM;
if (iRoll==16)iType = IP_CONST_FEAT_ARMOR_PROF_LIGHT;
if (iRoll==17)iType = IP_CONST_FEAT_CLEAVE;
if (iRoll==18)iType = IP_CONST_FEAT_COMBAT_CASTING;
if (iRoll==19)iType = IP_CONST_FEAT_DODGE;
if (iRoll==20)iType = IP_CONST_FEAT_POWERATTACK;
if (iRoll==21)iType = IP_CONST_FEAT_SPELLFOCUSABJ;
if (iRoll==22)iType = IP_CONST_FEAT_SPELLFOCUSCON;
if (iRoll==23)iType = IP_CONST_FEAT_SPELLFOCUSDIV;
if (iRoll==24)iType = IP_CONST_FEAT_SPELLFOCUSENC;
if (iRoll==25)iType = IP_CONST_FEAT_SPELLFOCUSEVO;
if (iRoll==26)iType = IP_CONST_FEAT_SPELLFOCUSILL;
if (iRoll==27)iType = IP_CONST_FEAT_SPELLFOCUSNEC;
if (iRoll==28)iType = IP_CONST_FEAT_SPELLPENETRATION;
if (iRoll==29)iType = IP_CONST_FEAT_WEAPON_PROF_EXOTIC;
if (iRoll==30)iType = IP_CONST_FEAT_WEAPON_PROF_MARTIAL;
if (iRoll==31)iType = IP_CONST_FEAT_EXTRA_TURNING;
if (iRoll==32)iType = IP_CONST_FEAT_AMBIDEXTROUS;
if (iRoll==33)iType = IP_CONST_FEAT_SNEAK_ATTACK_1D6;
if (iRoll==34)iType = IP_CONST_FEAT_WEAPFINESSE;
if (iRoll==35)iType = IP_CONST_FEAT_ARMOR_PROF_HEAVY;
}
break;
case 3:
{
iRoll = Random(35);
if (iRoll==1)iType = IP_CONST_IMMUNITYSPELL_DOOM;
if (iRoll==2)iType = IP_CONST_IMMUNITYMISC_DISEASE;
if (iRoll==3)iType = IP_CONST_IMMUNITYSPELL_CLOUDKILL;
if (iRoll==4)iType = IP_CONST_IMMUNITYSPELL_GREASE;
if (iRoll==5)iType = IP_CONST_IMMUNITYMISC_POISON;
if (iRoll==6)iType = IP_CONST_IMMUNITYSPELL_SLEEP;
if (iRoll==7)iType = IP_CONST_IMMUNITYSPELL_WEB;
if (iRoll==8)iType = IP_CONST_IMMUNITYSPELL_RAY_OF_FROST;
if (iRoll==9)iType = IP_CONST_IMMUNITYSPELL_ENTANGLE;
if (iRoll==10)iType = IP_CONST_IMMUNITYSPELL_MELFS_ACID_ARROW;
if (iRoll==11)iType = IP_CONST_IMMUNITYSPELL_SLOW;
if (iRoll==12)iType = IP_CONST_IMMUNITYSPELL_DOMINATE_PERSON;
if (iRoll==13)iType = IP_CONST_FEAT_ALERTNESS;
if (iRoll==14)iType = IP_CONST_FEAT_WEAPON_PROF_EXOTIC;
if (iRoll==15)iType = IP_CONST_FEAT_WEAPSPEUNARM;
if (iRoll==16)iType = IP_CONST_FEAT_ARMOR_PROF_LIGHT;
if (iRoll==17)iType = IP_CONST_FEAT_CLEAVE;
if (iRoll==18)iType = IP_CONST_FEAT_COMBAT_CASTING;
if (iRoll==19)iType = IP_CONST_FEAT_WHIRLWIND;
if (iRoll==20)iType = IP_CONST_FEAT_POWERATTACK;
if (iRoll==21)iType = IP_CONST_FEAT_SPELLFOCUSABJ;
if (iRoll==22)iType = IP_CONST_FEAT_SPELLFOCUSCON;
if (iRoll==23)iType = IP_CONST_FEAT_SPELLFOCUSDIV;
if (iRoll==24)iType = IP_CONST_FEAT_SPELLFOCUSENC;
if (iRoll==25)iType = IP_CONST_FEAT_SPELLFOCUSEVO;
if (iRoll==26)iType = IP_CONST_FEAT_SPELLFOCUSILL;
if (iRoll==27)iType = IP_CONST_FEAT_SPELLFOCUSNEC;
if (iRoll==28)iType = IP_CONST_FEAT_SPELLPENETRATION;
if (iRoll==29)iType = IP_CONST_FEAT_WEAPON_PROF_EXOTIC;
if (iRoll==30)iType = IP_CONST_FEAT_WEAPON_PROF_MARTIAL;
if (iRoll==31)iType = IP_CONST_FEAT_EXTRA_TURNING;
if (iRoll==32)iType = IP_CONST_FEAT_AMBIDEXTROUS;
if (iRoll==33)iType = 32;
if (iRoll==34)iType = IP_CONST_FEAT_WEAPFINESSE;
if (iRoll==35)iType = IP_CONST_FEAT_ARMOR_PROF_HEAVY;
}
break;
case 4:
{
iRoll = Random(35);
if (iRoll==1)iType = IP_CONST_IMMUNITYMISC_POISON;
if (iRoll==2)iType = IP_CONST_IMMUNITYMISC_DISEASE;
if (iRoll==3)iType = IP_CONST_IMMUNITYMISC_FEAR;
if (iRoll==4)iType = IP_CONST_IMMUNITYMISC_PARALYSIS;
if (iRoll==5)iType = IP_CONST_IMMUNITYSPELL_FIREBALL;
if (iRoll==6)iType = IP_CONST_IMMUNITYMISC_DISEASE;
if (iRoll==7)iType = IP_CONST_IMMUNITYSPELL_HAMMER_OF_THE_GODS;
if (iRoll==8)iType = IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN;
if (iRoll==9)iType = IP_CONST_IMMUNITYSPELL_METEOR_SWARM;
if (iRoll==10)iType = IP_CONST_IMMUNITYSPELL_POWER_WORD_KILL;
if (iRoll==11)iType = IP_CONST_IMMUNITYSPELL_PRISMATIC_SPRAY;
if (iRoll==12)iType = IP_CONST_IMMUNITYSPELL_SILENCE;
if (iRoll==13)iType = 32;
if (iRoll==14)iType = IP_CONST_FEAT_WEAPON_PROF_EXOTIC;
if (iRoll==15)iType = IP_CONST_FEAT_WEAPSPEUNARM;
if (iRoll==16)iType = IP_CONST_FEAT_POINTBLANK;
if (iRoll==17)iType = IP_CONST_FEAT_CLEAVE;
if (iRoll==18)iType = IP_CONST_FEAT_COMBAT_CASTING;
if (iRoll==19)iType = IP_CONST_FEAT_WHIRLWIND;
if (iRoll==20)iType = IP_CONST_FEAT_POWERATTACK;
if (iRoll==21)iType = IP_CONST_FEAT_SPELLFOCUSABJ;
if (iRoll==22)iType = IP_CONST_FEAT_SPELLFOCUSCON;
if (iRoll==23)iType = IP_CONST_FEAT_SPELLFOCUSDIV;
if (iRoll==24)iType = IP_CONST_FEAT_SPELLFOCUSENC;
if (iRoll==25)iType = IP_CONST_FEAT_SPELLFOCUSEVO;
if (iRoll==26)iType = IP_CONST_FEAT_SPELLFOCUSILL;
if (iRoll==27)iType = IP_CONST_FEAT_SPELLFOCUSNEC;
if (iRoll==28)iType = IP_CONST_FEAT_SPELLPENETRATION;
if (iRoll==29)iType = IP_CONST_FEAT_WEAPON_PROF_EXOTIC;
if (iRoll==30)iType = IP_CONST_FEAT_WEAPON_PROF_MARTIAL;
if (iRoll==31)iType = IP_CONST_FEAT_EXTRA_TURNING;
if (iRoll==32)iType = IP_CONST_FEAT_AMBIDEXTROUS;
if (iRoll==33)iType = 32;
if (iRoll==34)iType = IP_CONST_FEAT_WEAPFINESSE;
if (iRoll==35)iType = IP_CONST_FEAT_ARMOR_PROF_HEAVY;
}
break;
case 5:
{
iRoll = Random(35);
if (iRoll==1)iType = IP_CONST_IMMUNITYMISC_POISON;
if (iRoll==2)iType = IP_CONST_IMMUNITYMISC_DISEASE;
if (iRoll==3)iType = IP_CONST_IMMUNITYMISC_FEAR;
if (iRoll==4)iType = IP_CONST_IMMUNITYMISC_PARALYSIS;
if (iRoll==5)iType = IP_CONST_IMMUNITYSPELL_METEOR_SWARM;
if (iRoll==6)iType = IP_CONST_IMMUNITYSPELL_HEALING_CIRCLE;
if (iRoll==7)iType = IP_CONST_IMMUNITYMISC_KNOCKDOWN;
if (iRoll==8)iType = IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN;
if (iRoll==9)iType = IP_CONST_IMMUNITYSPELL_HAMMER_OF_THE_GODS;
if (iRoll==10)iType = IP_CONST_IMMUNITYSPELL_HEAL;
if (iRoll==11)iType = IP_CONST_IMMUNITYSPELL_IMPLOSION;
if (iRoll==12)iType = IP_CONST_IMMUNITYSPELL_HARM;
if (iRoll==13)iType = IP_CONST_IMMUNITYSPELL_MASS_BLINDNESS_AND_DEAFNESS;
if (iRoll==14)iType = IP_CONST_IMMUNITYSPELL_METEOR_SWARM;
if (iRoll==15)iType = IP_CONST_IMMUNITYSPELL_POWER_WORD_KILL;
if (iRoll==16)iType = IP_CONST_IMMUNITYSPELL_PRISMATIC_SPRAY;
if (iRoll==17)iType = IP_CONST_IMMUNITYSPELL_STORM_OF_VENGEANCE;
if (iRoll==18)iType = IP_CONST_IMMUNITYSPELL_WAIL_OF_THE_BANSHEE;
if (iRoll==19)iType = IP_CONST_IMMUNITYSPELL_WORD_OF_FAITH;
if (iRoll==20)iType = IP_CONST_FEAT_SNEAK_ATTACK_2D6;
if (iRoll==21)iType = IP_CONST_FEAT_SPELLFOCUSABJ;
if (iRoll==22)iType = IP_CONST_FEAT_SPELLFOCUSCON;
if (iRoll==23)iType = IP_CONST_FEAT_SPELLFOCUSDIV;
if (iRoll==24)iType = IP_CONST_FEAT_SPELLFOCUSENC;
if (iRoll==25)iType = IP_CONST_FEAT_SPELLFOCUSEVO;
if (iRoll==26)iType = IP_CONST_FEAT_SPELLFOCUSILL;
if (iRoll==27)iType = IP_CONST_FEAT_SPELLFOCUSNEC;
if (iRoll==28)iType = IP_CONST_FEAT_SPELLPENETRATION;
if (iRoll==29)iType = IP_CONST_FEAT_WEAPON_PROF_EXOTIC;
if (iRoll==30)iType = IP_CONST_FEAT_WEAPON_PROF_MARTIAL;
if (iRoll==31)iType = IP_CONST_FEAT_EXTRA_TURNING;
if (iRoll==32)iType = IP_CONST_FEAT_AMBIDEXTROUS;
if (iRoll==33)iType = IP_CONST_FEAT_SNEAK_ATTACK_1D6;
if (iRoll==34)iType = IP_CONST_FEAT_WEAPFINESSE;
if (iRoll==35)iType = IP_CONST_FEAT_ARMOR_PROF_HEAVY;
}
break;
}
ipAdd = ItemPropertyImmunityMisc(iType);
IPSafeAddItemProperty(oItem, ipAdd);
}
void RESimbue(object oItem, int iRange)
{
itemproperty ipAdd;
int iRes;
int iType;
int iRoll = Random(9)+1;
switch (iRoll)
{
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_PHYSICAL; break;
case 7: iType = IP_CONST_DAMAGETYPE_PIERCING; break;
case 8: iType = IP_CONST_DAMAGETYPE_SLASHING; break;
case 9: iType = IP_CONST_DAMAGETYPE_SONIC; break;
}
switch (iRange)
{
case 1: iRes = IP_CONST_DAMAGERESIST_5; break;
case 2:
{
iRoll=d4();
if (iRoll==1)iRes = IP_CONST_DAMAGERESIST_5;
if (iRoll==2)iRes = IP_CONST_DAMAGERESIST_5;
if (iRoll==3)iRes = IP_CONST_DAMAGERESIST_5;
if (iRoll==4)iRes = IP_CONST_DAMAGERESIST_10;
}
break;
case 3:
{
iRoll=d3();
if (iRoll==1)iRes = IP_CONST_DAMAGERESIST_5;
if (iRoll==2)iRes = IP_CONST_DAMAGERESIST_5;
if (iRoll==3)iRes = IP_CONST_DAMAGERESIST_10;
}
break;
case 4:
{
iRoll=d4();
if (iRoll==1)iRes = IP_CONST_DAMAGERESIST_5;
if (iRoll==2)iRes = IP_CONST_DAMAGERESIST_10;
if (iRoll==3)iRes = IP_CONST_DAMAGERESIST_10;
if (iRoll==4)iRes = IP_CONST_DAMAGERESIST_10;
}
break;
case 5:
{
iRoll=d4();
if (iRoll==1)iRes = IP_CONST_DAMAGERESIST_10;
if (iRoll==2)iRes = IP_CONST_DAMAGERESIST_10;
if (iRoll==3)iRes = IP_CONST_DAMAGERESIST_10;
if (iRoll==4)iRes = IP_CONST_DAMAGERESIST_10;
}
break;
}
ipAdd = ItemPropertyDamageResistance(iType, iRes);
IPSafeAddItemProperty(oItem, ipAdd);
}
void AbilityImbue(object oItem, int iRange)
{
itemproperty ipAdd;
int iAbil;
int iType;
int iRoll = d6();
switch (iRoll)
{
case 1: iType = ABILITY_DEXTERITY; break;
case 2: iType = ABILITY_INTELLIGENCE; break;
case 3: iType = ABILITY_WISDOM; break;
case 4: iType = ABILITY_CHARISMA; break;
case 5: iType = ABILITY_CONSTITUTION; break;
case 6: iType = ABILITY_STRENGTH; break;
}
switch (iRange)
{
case 1: {iAbil = d3(); if (iAbil==3)iAbil=1; break;} // 1-2
case 2: {iAbil = d3();if (iAbil==4)iAbil=1; break;} // 2-3
case 3: {iAbil = d3();if (iAbil==4)iAbil=1; break;} // 3-4
case 4: {iAbil = d3()+1;if (iAbil==5)iAbil=2; break;} // 4-5
case 5: {iAbil = d3()+1;if (iAbil==6)iAbil=2; break;} // 5-6
}
ipAdd = ItemPropertyAbilityBonus(iType, iAbil);
IPSafeAddItemProperty(oItem, ipAdd);
}
void MiscImbue(object oItem, int iRange)
{
itemproperty ipAdd;
int iRoll;
switch (iRange)
{
case 1:
{
iRoll = Random(43);
if (iRoll==1)ipAdd = ItemPropertyLight(IP_CONST_LIGHTBRIGHTNESS_NORMAL, IP_CONST_LIGHTCOLOR_WHITE);
if (iRoll==2)ipAdd = ItemPropertyLight(IP_CONST_LIGHTBRIGHTNESS_NORMAL, IP_CONST_LIGHTCOLOR_BLUE);
if (iRoll==3)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_FORTITUDE, 2);
if (iRoll==4)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLEEP);
if (iRoll==5)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WEB);
if (iRoll==6)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_RAY_OF_FROST);
if (iRoll==7)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_GREASE);
if (iRoll==8)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_COLOR_SPRAY);
if (iRoll==9)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_DAZE);
if (iRoll==10)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_BURNING_HANDS);
if (iRoll==11)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_BLINDNESS_AND_DEAFNESS);
if (iRoll==12)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_LIGHTNING_BOLT);
if (iRoll==13)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_MAGIC_MISSILE);
if (iRoll==14)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_DODGE);
if (iRoll==15)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSABJ);
if (iRoll==16)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSCON);
if (iRoll==17)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSDIV);
if (iRoll==18)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSENC);
if (iRoll==19)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSEVO);
if (iRoll==20)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSILL);
if (iRoll==21)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSNEC);
if (iRoll==22)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLPENETRATION);
if (iRoll==23)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_EXOTIC);
if (iRoll==24)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_MARTIAL);
if (iRoll==25)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_EXTRA_TURNING);
if (iRoll==26)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_AMBIDEXTROUS);
if (iRoll==27)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SNEAK_ATTACK_1D6);
if (iRoll==28)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPFINESSE);
if (iRoll==29)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_ARMOR_PROF_HEAVY);
if (iRoll==30)ipAdd = ItemPropertyBonusFeat(32);
if (iRoll==31)ipAdd = ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_5_PERCENT);
if (iRoll==32)ipAdd = ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_10_PERCENT);
if (iRoll==33)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 2);
if (iRoll==34)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 2);
if (iRoll==35)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 2);
if (iRoll==36)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 2);
if (iRoll==37)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 2);
if (iRoll==38)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 3);
if (iRoll==39)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 3);
if (iRoll==40)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 3);
if (iRoll==41)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 3);
if (iRoll==42)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 3);
if (iRoll==43)ipAdd = ItemPropertyImmunityToSpellLevel(1);
}
break;
case 2:
{
iRoll = Random(43);
if (iRoll==1)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_HOLD_PERSON);
if (iRoll==2)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_REFLEX, 2);
if (iRoll==3)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_FORTITUDE, 2);
if (iRoll==4)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLEEP);
if (iRoll==5)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WEB);
if (iRoll==6)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_RAY_OF_FROST);
if (iRoll==7)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_GREASE);
if (iRoll==8)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_COLOR_SPRAY);
if (iRoll==9)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_DAZE);
if (iRoll==10)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_BURNING_HANDS);
if (iRoll==11)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_BLINDNESS_AND_DEAFNESS);
if (iRoll==12)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_LIGHTNING_BOLT);
if (iRoll==13)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_MAGIC_MISSILE);
if (iRoll==14)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_DODGE);
if (iRoll==15)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSABJ);
if (iRoll==16)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSCON);
if (iRoll==17)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSDIV);
if (iRoll==18)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSENC);
if (iRoll==19)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSEVO);
if (iRoll==20)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSILL);
if (iRoll==21)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSNEC);
if (iRoll==22)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLPENETRATION);
if (iRoll==23)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_EXOTIC);
if (iRoll==24)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_MARTIAL);
if (iRoll==25)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_EXTRA_TURNING);
if (iRoll==26)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_AMBIDEXTROUS);
if (iRoll==27)ipAdd = ItemPropertyBonusFeat(32);
if (iRoll==28)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPFINESSE);
if (iRoll==29)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_ARMOR_PROF_HEAVY);
if (iRoll==30)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_POWERATTACK);
if (iRoll==31)ipAdd = ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_10_PERCENT);
if (iRoll==32)ipAdd = ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_10_PERCENT);
if (iRoll==33)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 3);
if (iRoll==34)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 3);
if (iRoll==35)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 3);
if (iRoll==36)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 3);
if (iRoll==37)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 3);
if (iRoll==38)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 4);
if (iRoll==39)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 4);
if (iRoll==40)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 4);
if (iRoll==41)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 4);
if (iRoll==42)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 4);
if (iRoll==43)ipAdd = ItemPropertyImmunityToSpellLevel(1);
}
break;
case 3:
{
iRoll = Random(56);
if (iRoll==1)ipAdd = ItemPropertyDarkvision();
if (iRoll==2)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_POWER_WORD_STUN);
if (iRoll==3)ipAdd = ItemPropertyVampiricRegeneration(1);
if (iRoll==4)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_FORTITUDE, 2);
if (iRoll==5)ipAdd = ItemPropertyRegeneration(1);
if (iRoll==6)ipAdd = ItemPropertyDarkvision();
if (iRoll==7)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_CLOUDKILL);
if (iRoll==8)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_GREASE);
if (iRoll==9)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_FLAME_ARROW);
if (iRoll==10)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLEEP);
if (iRoll==11)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WEB);
if (iRoll==12)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_RAY_OF_FROST);
if (iRoll==13)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_ENTANGLE);
if (iRoll==14)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_MELFS_ACID_ARROW);
if (iRoll==15)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLOW);
if (iRoll==16)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_DOMINATE_PERSON);
if (iRoll==17)ipAdd = ItemPropertyBonusFeat(32);
if (iRoll==18)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSABJ);
if (iRoll==19)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSCON);
if (iRoll==20)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSDIV);
if (iRoll==21)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSENC);
if (iRoll==22)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSEVO);
if (iRoll==23)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSILL);
if (iRoll==24)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSNEC);
if (iRoll==25)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLPENETRATION);
if (iRoll==26)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_EXOTIC);
if (iRoll==27)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_MARTIAL);
if (iRoll==28)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_EXTRA_TURNING);
if (iRoll==29)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_AMBIDEXTROUS);
if (iRoll==30)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_EXTRA_TURNING);
if (iRoll==31)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPFINESSE);
if (iRoll==32)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_ARMOR_PROF_HEAVY);
if (iRoll==33)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_KNOCKDOWN);
if (iRoll==34)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WHIRLWIND);
if (iRoll==35)ipAdd = ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_15_PERCENT);
if (iRoll==36)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLEEP);
if (iRoll==37)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WEB);
if (iRoll==38)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_RAY_OF_FROST);
if (iRoll==39)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_GREASE);
if (iRoll==40)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_COLOR_SPRAY);
if (iRoll==41)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_DAZE);
if (iRoll==42)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_BURNING_HANDS);
if (iRoll==43)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_BLINDNESS_AND_DEAFNESS);
if (iRoll==44)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_LIGHTNING_BOLT);
if (iRoll==45)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_MAGIC_MISSILE);
if (iRoll==46)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 4);
if (iRoll==47)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 4);
if (iRoll==48)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 4);
if (iRoll==49)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 4);
if (iRoll==50)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 4);
if (iRoll==51)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 5);
if (iRoll==52)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 5);
if (iRoll==53)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 5);
if (iRoll==54)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 5);
if (iRoll==55)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 5);
if (iRoll==56)ipAdd = ItemPropertyImmunityToSpellLevel(1);
}
break;
case 4:
{
iRoll = Random(72);
if (iRoll==1)ipAdd = ItemPropertyDarkvision();
if (iRoll==2)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_POWER_WORD_KILL);
if (iRoll==3)ipAdd = ItemPropertyVampiricRegeneration(3);
if (iRoll==4)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_FORTITUDE, 3);
if (iRoll==5)ipAdd = ItemPropertyRegeneration(1);
if (iRoll==6)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_FORTITUDE, 2);
if (iRoll==7)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_FIREBALL);
if (iRoll==8)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_DOOM);
if (iRoll==9)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_HAMMER_OF_THE_GODS);
if (iRoll==10)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_FORTITUDE, 1);
if (iRoll==11)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_METEOR_SWARM);
if (iRoll==12)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_POWER_WORD_KILL);
if (iRoll==13)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_PRISMATIC_SPRAY);
if (iRoll==14)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SILENCE);
if (iRoll==15)ipAdd = ItemPropertyBonusFeat(33);
if (iRoll==16)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSABJ);
if (iRoll==17)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSCON);
if (iRoll==18)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSDIV);
if (iRoll==19)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSENC);
if (iRoll==20)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSEVO);
if (iRoll==21)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSILL);
if (iRoll==22)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSNEC);
if (iRoll==23)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLPENETRATION);
if (iRoll==24)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_EXOTIC);
if (iRoll==25)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_MARTIAL);
if (iRoll==26)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_EXTRA_TURNING);
if (iRoll==27)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_AMBIDEXTROUS);
if (iRoll==28)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_EXTRA_TURNING);
if (iRoll==29)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPFINESSE);
if (iRoll==30)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_ARMOR_PROF_HEAVY);
if (iRoll==31)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_KNOCKDOWN);
if (iRoll==32)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_RAPID_SHOT);
if (iRoll==33)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SHIELD_PROFICIENCY);
if (iRoll==34)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WHIRLWIND);
if (iRoll==35)ipAdd = ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_20_PERCENT);
if (iRoll==36)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLEEP);
if (iRoll==37)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WEB);
if (iRoll==38)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_RAY_OF_FROST);
if (iRoll==39)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_GREASE);
if (iRoll==40)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_COLOR_SPRAY);
if (iRoll==41)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_DAZE);
if (iRoll==42)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_BURNING_HANDS);
if (iRoll==43)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_BLINDNESS_AND_DEAFNESS);
if (iRoll==44)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_LIGHTNING_BOLT);
if (iRoll==45)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_MAGIC_MISSILE);
if (iRoll==46)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_CLOUDKILL);
if (iRoll==47)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_GREASE);
if (iRoll==48)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_FLAME_ARROW);
if (iRoll==49)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLEEP);
if (iRoll==50)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WEB);
if (iRoll==51)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_RAY_OF_FROST);
if (iRoll==52)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_ENTANGLE);
if (iRoll==53)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_MELFS_ACID_ARROW);
if (iRoll==54)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLOW);
if (iRoll==55)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_DOMINATE_PERSON);
if (iRoll==56)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_ENERVATION);
if (iRoll==57)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_ENERGY_DRAIN);
if (iRoll==58)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_FINGER_OF_DEATH);
if (iRoll==59)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 5);
if (iRoll==60)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 5);
if (iRoll==61)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 5);
if (iRoll==62)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 5);
if (iRoll==63)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 5);
if (iRoll==64)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 6);
if (iRoll==65)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 6);
if (iRoll==66)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 6);
if (iRoll==67)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 6);
if (iRoll==68)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 6);
if (iRoll==69)ipAdd = ItemPropertyImmunityToSpellLevel(2);
if (iRoll==70)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 7);
if (iRoll==71)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 7);
if (iRoll==72)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 7);
if (iRoll==73)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 7);
}
break;
case 5:
{
iRoll = Random(86);
if (iRoll==1)ipAdd = ItemPropertyDarkvision();
if (iRoll==2)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_REFLEX, 3);
if (iRoll==3)ipAdd = ItemPropertyVampiricRegeneration(2);
if (iRoll==4)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_FORTITUDE, 3);
if (iRoll==5)ipAdd = ItemPropertyRegeneration(2);
if (iRoll==6)ipAdd = ItemPropertyRegeneration(1);
if (iRoll==7)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_HAMMER_OF_THE_GODS);
if (iRoll==8)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_HEAL);
if (iRoll==9)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_IMPLOSION);
if (iRoll==10)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_HARM);
if (iRoll==11)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_MASS_BLINDNESS_AND_DEAFNESS);
if (iRoll==12)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_METEOR_SWARM);
if (iRoll==13)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_POWER_WORD_KILL);
if (iRoll==14)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_PRISMATIC_SPRAY);
if (iRoll==15)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_STORM_OF_VENGEANCE);
if (iRoll==16)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WAIL_OF_THE_BANSHEE);
if (iRoll==17)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WORD_OF_FAITH);
if (iRoll==18)ipAdd = ItemPropertyBonusFeat(33);
if (iRoll==19)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSABJ);
if (iRoll==20)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSCON);
if (iRoll==21)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSDIV);
if (iRoll==22)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSENC);
if (iRoll==23)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSEVO);
if (iRoll==24)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSILL);
if (iRoll==25)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLFOCUSNEC);
if (iRoll==26)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLPENETRATION);
if (iRoll==27)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_EXOTIC);
if (iRoll==28)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_MARTIAL);
if (iRoll==29)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_EXTRA_TURNING);
if (iRoll==30)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_AMBIDEXTROUS);
if (iRoll==31)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_EXTRA_TURNING);
if (iRoll==32)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPFINESSE);
if (iRoll==33)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_ARMOR_PROF_HEAVY);
if (iRoll==34)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_KNOCKDOWN);
if (iRoll==35)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_RAPID_SHOT);
if (iRoll==36)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_SHIELD_PROFICIENCY);
if (iRoll==37)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_WHIRLWIND);
if (iRoll==38)ipAdd = ItemPropertyBonusFeat(IP_CONST_FEAT_TWO_WEAPON_FIGHTING);
if (iRoll==39)ipAdd = ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_30_PERCENT);
if (iRoll==40)ipAdd = ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_35_PERCENT);
if (iRoll==41)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLEEP);
if (iRoll==42)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WEB);
if (iRoll==43)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_RAY_OF_FROST);
if (iRoll==44)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_GREASE);
if (iRoll==45)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_COLOR_SPRAY);
if (iRoll==46)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_DAZE);
if (iRoll==47)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_BURNING_HANDS);
if (iRoll==48)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_BLINDNESS_AND_DEAFNESS);
if (iRoll==49)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_LIGHTNING_BOLT);
if (iRoll==50)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_MAGIC_MISSILE);
if (iRoll==51)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_CLOUDKILL);
if (iRoll==52)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_GREASE);
if (iRoll==53)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_FLAME_ARROW);
if (iRoll==54)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLEEP);
if (iRoll==55)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_WEB);
if (iRoll==56)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_RAY_OF_FROST);
if (iRoll==57)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_ENTANGLE);
if (iRoll==58)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_MELFS_ACID_ARROW);
if (iRoll==59)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_SLOW);
if (iRoll==60)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_DOMINATE_PERSON);
if (iRoll==61)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_ENERVATION);
if (iRoll==62)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_ENERGY_DRAIN);
if (iRoll==63)ipAdd = ItemPropertySpellImmunitySpecific(IP_CONST_IMMUNITYSPELL_FINGER_OF_DEATH);
if (iRoll==64)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 6);
if (iRoll==65)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 6);
if (iRoll==66)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 6);
if (iRoll==67)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 6);
if (iRoll==68)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 6);
if (iRoll==69)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 7);
if (iRoll==70)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 7);
if (iRoll==71)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 7);
if (iRoll==72)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 7);
if (iRoll==73)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 7);
if (iRoll==74)ipAdd = ItemPropertyImmunityToSpellLevel(2);
if (iRoll==75)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 8);
if (iRoll==76)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 8);
if (iRoll==77)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 8);
if (iRoll==78)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 8);
if (iRoll==79)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 6);
if (iRoll==80)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_WIZARD, 9);
if (iRoll==81)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_CLERIC, 9);
if (iRoll==82)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_DRUID, 9);
if (iRoll==83)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_SORCERER, 9);
if (iRoll==84)ipAdd = ItemPropertyBonusLevelSpell(IP_CONST_CLASS_BARD, 7);
}
break;
}
IPSafeAddItemProperty(oItem, ipAdd);
}
void SaveImbue(object oItem, int iRange)
{
itemproperty ipAdd;
int iAbil;
int iType;
int iRoll = d6();
switch (iRoll)
{
case 1: iType = IP_CONST_SAVEBASETYPE_FORTITUDE; break;
case 2: iType = IP_CONST_SAVEBASETYPE_REFLEX; break;
case 3: iType = IP_CONST_SAVEBASETYPE_WILL; break;
case 4: iType = IP_CONST_SAVEBASETYPE_FORTITUDE; break;
case 5: iType = IP_CONST_SAVEBASETYPE_REFLEX; break;
case 6: iType = IP_CONST_SAVEBASETYPE_WILL; break;
}
switch (iRange)
{
case 1: {iAbil = d3(); if (iAbil==3)iAbil=1; break;} // 1-2
case 2: {iAbil = d3();if (iAbil==4)iAbil=1; break;} // 2-3
case 3: {iAbil = d3();if (iAbil==5)iAbil=1; break;} // 3-4
case 4: {iAbil = d3();if (iAbil==6)iAbil=2; break;} // 4-5
case 5: {iAbil = d3()+1;if (iAbil==7)iAbil=2; break;} // 5-6
}
ipAdd = ItemPropertyBonusSavingThrow(iType, iAbil);
IPSafeAddItemProperty(oItem, ipAdd);
}
void ImpEvasionImbue(object oItem)
{
itemproperty ipAdd;
ipAdd = ItemPropertyImprovedEvasion();
IPSafeAddItemProperty(oItem, ipAdd);
}
void TruseeingImbue(object oItem)
{
itemproperty ipAdd;
ipAdd = ItemPropertyTrueSeeing();
IPSafeAddItemProperty(oItem, ipAdd);
}
void DarkvisionImbue(object oItem)
{
itemproperty ipAdd;
ipAdd = ItemPropertyDarkvision();
IPSafeAddItemProperty(oItem, ipAdd);
}
void FreedomImbue(object oItem)
{
itemproperty ipAdd;
ipAdd = ItemPropertyFreeAction();
IPSafeAddItemProperty(oItem, ipAdd);
}
void RegenImbue(object oItem, int iRange)
{
int iRegen;
itemproperty ipAdd;
switch (iRange)
{
case 1: {iRegen = d2();if (iRegen==3)iRegen=1; break;} //1-2
case 2: iRegen = d2(); break; //1-3
case 3: iRegen = d2(); break; //1-4
case 4: {iRegen = d2();if (iRegen==5)iRegen=2;break;} //2-4
case 5: iRegen = d2();break; //2-5
}
ipAdd = ItemPropertyRegeneration(iRegen);
IPSafeAddItemProperty(oItem, ipAdd);
}
void VampRegenImbue(object oItem, int iRange)
{
int iRegen;
itemproperty ipAdd;
switch (iRange)
{
case 1: {iRegen = d3();if (iRegen==3)iRegen=1; break;} //1-2
case 2: iRegen = d3(); break; //1-3
case 3: iRegen = d3()+1; break; //1-4
case 4: {iRegen = d3()+1;if (iRegen==5)iRegen=3;break;} //2-4
case 5: iRegen = d3()+2;break; //2-5
}
ipAdd = ItemPropertyVampiricRegeneration(iRegen);
IPSafeAddItemProperty(oItem, ipAdd);
}
void EvilImbue(object oItem)
{
itemproperty ipAdd;
ipAdd = ItemPropertyVisualEffect(ITEM_VISUAL_EVIL);
IPSafeAddItemProperty(oItem, ipAdd);
}
void HolyImbue(object oItem)
{
itemproperty ipAdd;
ipAdd = ItemPropertyVisualEffect(ITEM_VISUAL_HOLY);
IPSafeAddItemProperty(oItem, ipAdd);
}
void FireImbue(object oItem)
{
itemproperty ipAdd;
ipAdd = ItemPropertyVisualEffect(ITEM_VISUAL_FIRE);
IPSafeAddItemProperty(oItem, ipAdd);
}
void ElecImbue(object oItem)
{
itemproperty ipAdd;
ipAdd = ItemPropertyVisualEffect(ITEM_VISUAL_ELECTRICAL);
IPSafeAddItemProperty(oItem, ipAdd);
}
void AcidImbue(object oItem)
{
itemproperty ipAdd;
ipAdd = ItemPropertyVisualEffect(ITEM_VISUAL_ACID);
IPSafeAddItemProperty(oItem, ipAdd);
}
void HasteImbue(object oItem)
{
itemproperty ipAdd;
ipAdd = ItemPropertyHaste();
IPSafeAddItemProperty(oItem, ipAdd);
}
void KeenImbue(object oItem)
{
itemproperty ipAdd;
ipAdd = ItemPropertyKeen();
IPSafeAddItemProperty(oItem, ipAdd);
}
void WoundingImbue(object oItem, int iRange)
{
itemproperty ipAdd;
ipAdd = ItemPropertyOnHitProps(IP_CONST_ONHIT_WOUNDING, iRange-1, iRange);
IPSafeAddItemProperty(oItem, ipAdd);
}
void EchobladeImbue(object oItem) //:: PRC8
{
if(!PRCGetBludgeoningWeapon(oItem))
{
itemproperty ipAdd;
ipAdd = ItemPropertyEchoblade();
IPSafeAddItemProperty(oItem, ipAdd);
}
}
void DropArmor (object oMob, object oSack, int iRange, int SockChance, int iChest)
{
object oItem;
itemproperty ipAdd;
string sType, sIName, sName, sSocks, AbilName, ResName, HasteName;
int iQual = 0;
int iAbilQual = 0;
int iResQual = 0;
int iHasteQual = 0;
int iRoll = d10();
switch(iRoll)
{
case 1: sType = "sdarmor8"; break;
case 2: sType = "sdarmor7"; break;
case 3: sType = "sdarmor6"; break;
case 4: sType = "sdarmor5"; break;
case 5: sType = "sdarmor4"; break;
case 6: sType = "sdarmor3"; break;
case 7: sType = "sdarmor2"; break;
case 8: sType = "sdarmor1"; break;
case 9: sType = "sdarmor0"; break;
case 10: sType = "sdarmor02"; break;
}
oItem = CreateItemOnObject(sType, oSack, 1, "sf_socket_item");
// chance for socketed item
iRoll = d100();
if (iRoll < SockChance)
{
iRoll=d6();
SetLocalInt(oItem, "SOCKETS", iRoll);
sSocks = IntToString(iRoll);
ipAdd = ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER, IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE);
IPSafeAddItemProperty(oItem, ipAdd);
sName = ColorString("Socketed "+sIName+" ("+sSocks+")", 72, 209, 204 );
SetName(oItem, sName);
return;
}
iRoll = d100();
if (iRoll <= CHANCE_WORN && iRoll > CHANCE_BROKEN && iChest != 1) // chance of being worn
{
sName = ColorString("Worn "+sIName, 192, 192, 192);
SetName(oItem, sName);
SetIdentified(oItem, TRUE);
return;
}
if (iRoll<=CHANCE_BROKEN&&iChest!=1) // chance of being broken
{
DelayCommand(0.2, ACimbue(oItem, iRange, 1));
sName = ColorString("Broken "+sIName, 255, 0, 0);
SetName(oItem, sName);
SetIdentified(oItem, TRUE);
return;
}
SetIdentified(oItem, FALSE);
//////////////////////////////////////////// Lvls 1-5
//:: AC bonus
DelayCommand(0.2, ACimbue(oItem, iRange, 0));
++iQual;
//:: Ability bonus
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
++iAbilQual;
}
////////////////////////////////////////// Lvls 6-10
if (iRange==2)
{
//:: Ability bonus
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
++iAbilQual;
}
//:: Misc
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2,MiscImbue(oItem, iRange));
++iQual;
}
//:: Damage Res bonus
iRoll = d100();
if (iRoll > 85)
{
DelayCommand(0.2, RESimbue(oItem, iRange));
++iQual;
++iResQual;
}
iRoll = d100();
if (iRoll > 97)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
}
////////////////////////////////////////// Lvls 11-20
if (iRange==3)
{
//:: Ability bonus
iRoll = d100();
if (iRoll>40)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
++iAbilQual;
}
//:: Damage Res bonus
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, RESimbue(oItem, iRange));
++iQual;
++iResQual;
}
//:: Damage Res bonus
iRoll = d100();
if (iRoll>89)
{
DelayCommand(0.2, RESimbue(oItem, iRange));
++iQual;
++iResQual;
}
//::: Misc
iRoll = d100();
if (iRoll>75)
{
DelayCommand(0.2, MiscImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, MiscImbue(oItem, iRange));
++iQual;
}
// Misc Immunity
// iRoll = d100();
// if (iRoll>90)
// {
// DelayCommand(0.2, MIMMimbue(oItem, iRange));
// ++iQual;
// }
//:: Haste
iRoll = d100();
if (iRoll>95)
{
DelayCommand(0.2, HasteImbue(oItem));
++iQual;
++iHasteQual;
}
}
////////////////////////////////////////// Lvls 20-30
if (iRange==4)
{
//:: Ability bonus x 2
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
++iAbilQual;
}
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
++iAbilQual;
}
//:: Damage Res bonus x 2
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, RESimbue(oItem, iRange));
++iQual;
++iResQual;
}
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, RESimbue(oItem, iRange));
++iQual;
++iResQual;
}
//:: Misc
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, MiscImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, MiscImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>95)
{
DelayCommand(0.2, MiscImbue(oItem, iRange));
++iQual;
}
// Misc Immunity
// iRoll = d100();
// if (iRoll>75)
// {
// DelayCommand(0.2, MIMMimbue(oItem, iRange));
// ++iQual;
// }
//:: Haste
iRoll = d100();
if (iRoll>95)
{
DelayCommand(0.2, HasteImbue(oItem));
++iQual;
++iHasteQual;
}
}
////////////////////////////////////////// Lvls 30-40
if (iRange==5)
{
//:: Ability bonus x 2
iRoll = d100();
if (iRoll > 50)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
++iAbilQual;
}
iRoll = d100();
if (iRoll > 60)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
++iAbilQual;
}
if (iRoll > 70)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
++iAbilQual;
}
if (iRoll > 85)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
++iAbilQual;
}
//:: Damage Res bonus x 3
iRoll = d100();
if (iRoll > 60)
{
DelayCommand(0.2, RESimbue(oItem, iRange));
++iQual;
++iResQual;
}
iRoll = d100();
if (iRoll > 70)
{
DelayCommand(0.2, RESimbue(oItem, iRange));
++iQual;
++iResQual;
}
iRoll = d100();
if (iRoll > 80)
{
DelayCommand(0.2, RESimbue(oItem, iRange));
++iQual;
++iResQual;
}
iRoll = d100();
if (iRoll > 90)
{
DelayCommand(0.2, RESimbue(oItem, iRange));
++iQual;
++iResQual;
}
//:: Misc
iRoll = d100();
if (iRoll > 70)
{
DelayCommand(0.2, MiscImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll > 75)
{
DelayCommand(0.2, MiscImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll > 80)
{
DelayCommand(0.2, MiscImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, MiscImbue(oItem, iRange));
++iQual;
}
// Misc Immunity
// iRoll = d100();
// if (iRoll>70)
// {
// DelayCommand(0.2, MIMMimbue(oItem, iRange));
// ++iQual;
}
// iRoll = d100();
// if (iRoll>75)
// {
// DelayCommand(0.2, MIMMimbue(oItem, iRange));
// ++iQual;
// }
// iRoll = d100();
// if (iRoll>90)
// {
// DelayCommand(0.2, MIMMimbue(oItem, iRange));
// ++iQual;
// }
// iRoll = d100();
// if (iRoll>95)
// {
// DelayCommand(0.2, MIMMimbue(oItem, iRange));
// ++iQual;
// }
//:: Haste
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, HasteImbue(oItem));
++iQual;
++iHasteQual;
}
DelayCommand(0.4, ChangeArmor(oItem, iRandomShoulder, iRandomBicep, iRandomForearm, iRandomHand, iRandomThigh, iRandomShins, iRandomFeet, iRandomPelvis, iRandomBelt, iRandomNeck, iRandomChest, iRandomArmor1, iRandomArmor2, iRandomArmor3, iRandomArmor4, iRandomArmor5, iRandomArmor6, oSack));
switch(iAbilQual)
{
case 1: AbilName = ColorString(" Neophyte", 1, 255, 1);break;
case 2: AbilName = ColorString(" Journeyman", 1, 255, 1);break;
case 3: AbilName = ColorString(" Seraphim", 1, 255, 255);break;
case 4: AbilName = ColorString(" Archon", 1, 255, 255);break;
case 5: AbilName = ColorString(" Paragon", 1, 255, 255);break;
}
switch(iResQual)
{
case 0: ResName = ColorString(" Guarded", 255, 255, 255);break;
case 1: ResName = ColorString(" Stout", 1, 255, 1);break;
case 2: ResName = ColorString(" Resilient", 1, 255, 1);break;
case 3: ResName = ColorString(" Sentinel", 1, 255, 255);break;
case 4: ResName = ColorString(" Inpenetrable", 1, 255, 255);break;
}
switch(iHasteQual)
{
case 1: HasteName = "Swift "; break;
}
switch(iQual)
{
case 1: sName = ColorString(HasteName + "Magical Armour ",255, 255, 255) + "of the" + ResName + AbilName; break;
case 2: sName = ColorString(HasteName + "Enchanted Armour ", 30, 180, 30)+ "of the" + ResName + AbilName; break;
case 3: sName = ColorString(HasteName + "Enchanted Armour ", 30, 180, 30)+ "of the" + ResName + AbilName; break;
case 4: sName = ColorString(HasteName + "Imbued Armour ", 5, 90, 255)+ "of the" + ResName + AbilName; break;
case 5: sName = ColorString(HasteName + "Imbued Armour ", 5, 90, 255)+ "of the" + ResName + AbilName; break;
case 6: sName = ColorString(HasteName + "Planar Armour ", 185, 1, 200)+ "of the" + ResName + AbilName; break;
case 7: sName = ColorString(HasteName + "Planar Armour ", 185, 1, 200)+ "of the" + ResName + AbilName; break;
case 8: sName = ColorString(HasteName + "Divine Armour ", 255, 245, 210)+ "of the" + ResName + AbilName; break;
case 9: sName = ColorString(HasteName + "Divine Armour ", 255, 245, 210)+ "of the" + ResName + AbilName; break;
case 10: sName = ColorString(HasteName + "Ancient Armour ", 180, 180, 80)+ "of the" + ResName + AbilName; break;
}
DelayCommand(0.4,SetName(oItem, sName));
}
void DropShield (object oMob, object oSack, int iRange, int SockChance, int iChest)
{
object oItem;
itemproperty ipAdd;
string sType, sName, sIName, sSocks;
int iQual = 0;
int iRoll = d20();
switch(iRoll)
{
case 1: {sType = "sdTower1"; sIName = "Targe";} break;
case 2: {sType = "sdLarge1"; sIName = "Wooden Shield";} break;
case 3: {sType = "sdSmall1"; sIName = "Buckler";} break;
case 4: {sType = "sdTower2"; sIName = "Deflector";} break;
case 5: {sType = "sdLarge2"; sIName = "Protector";} break;
case 6: {sType = "sdSmall2"; sIName = "Heater";} break;
case 7: {sType = "sdTower3"; sIName = "Defender";} break;
case 8: {sType = "sdLarge3"; sIName = "Reinforced Shield";} break;
case 9: {sType = "sdSmall3"; sIName = "Arm Blocker";} break;
case 10: {sType = "sdTower4"; sIName = "Centurion";} break;
case 11: {sType = "sdLarge4"; sIName = "Iron Shield";} break;
case 12: {sType = "sdLarge5"; sIName = "Medium Shield";} break;
case 13: {sType = "sdLarge6"; sIName = "Vanguards Brace";} break;
case 14: {sType = "sdLarge7"; sIName = "Protector";} break;
case 15: {sType = "sdLarge8"; sIName = "Kite Shield";} break;
case 16: {sType = "sdLarge9"; sIName = "Protector";} break;
case 17: {sType = "sdLarge10"; sIName = "Kite Shield";} break;
case 18: {sType = "sdSmall3"; sIName = "Buckler";} break;
case 19: {sType = "sdTower2"; sIName = "Gothic Shield";} break;
case 20: {sType = "sdSmall1"; sIName = "Heater";} break;
}
oItem = CreateItemOnObject(sType, oSack, 1, "sf_socket_item");
// chance for socketed item
iRoll = d100();
if (iRoll < SockChance)
{
iRoll=d6();
SetLocalInt(oItem, "SOCKETS", iRoll);
sSocks = IntToString(iRoll);
ipAdd = ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER, IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE);
IPSafeAddItemProperty(oItem, ipAdd);
sName = ColorString("Socketed "+sIName+" ("+sSocks+")", 72, 209, 204 );
SetName(oItem, sName);
return;
}
iRoll = d100();
if (iRoll <= CHANCE_WORN && iRoll > CHANCE_BROKEN && iChest != 1) // chance of being worn
{
sName = ColorString("Worn "+sIName, 192, 192, 192);
SetName(oItem, sName);
SetIdentified(oItem, TRUE);
return;
}
if (iRoll <= CHANCE_BROKEN && iChest != 1) // chance of being broken
{
DelayCommand(0.2, ACimbue(oItem, iRange, 1));
sName = ColorString("Broken "+sIName, 255, 0, 0);
SetName(oItem, sName);
SetIdentified(oItem, TRUE);
return;
}
SetIdentified(oItem, FALSE);
//////////////////////////////////////////// Lvls 1-5
//:: Ac bonus
DelayCommand(0.2, ACmisc(oItem, iRange));
++iQual;
////////////////////////////////////////// Lvls 6-10
if (iRange==2)
{
//:: Ability bonus
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
// Save
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
}
////////////////////////////////////////// Lvls 11-20
if (iRange==3)
{
//:: Ability bonus
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Damage Res bonus
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, RESimbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, RESimbue(oItem, iRange));
++iQual;
}
//:: Saves
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
}
////////////////////////////////////////// Lvls 20-30
if (iRange==4)
{
//:: Ability bonus
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Damage Res bonus
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, RESimbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>75)
{
DelayCommand(0.2, RESimbue(oItem, iRange));
++iQual;
}
//:: Misc
iRoll = d100();
if (iRoll>75)
{
DelayCommand(0.2, MiscImbue(oItem, iRange));
++iQual;
}
//:: Saves
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
}
////////////////////////////////////////// Lvls 30-40
if (iRange==5)
{
//:: Ability bonus x 2
iRoll = d100();
if (iRoll>50)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Damage Res bonus x 2
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, RESimbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, RESimbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, RESimbue(oItem, iRange));
++iQual;
}
//:: Misc
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, MiscImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, MiscImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>85)
{
DelayCommand(0.2, MiscImbue(oItem, iRange));
++iQual;
}
//:: Save
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>94)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
}
switch(iQual)
{
case 1: sName = ColorString("Magical "+sIName,255, 255, 255); break;
case 2: sName = ColorString("Mystical "+sIName, 30, 180, 30); break;
case 3: sName = ColorString("Enchanted "+sIName, 30, 180, 30); break;
case 4: sName = ColorString("Imbued "+sIName, 5, 90, 255); break;
case 5: sName = ColorString("Arcane "+sIName, 5, 90, 255); break;
case 6: sName = ColorString("Lesser Planar "+sIName, 185, 1, 200); break;
case 7: sName = ColorString("Greater Planar "+sIName, 185, 1, 200); break;
case 8: sName = ColorString("Divine "+sIName, 255, 245, 210); break;
case 9: sName = ColorString("Eldritch "+sIName, 255, 245, 210); break;
case 10: sName = ColorString("Ancient "+sIName, 180, 180, 80); break;
}
SetName(oItem, sName);
}
void DropMagicItem (object oMob, object oSack, int iRange, int SockChance, int iChest)
{
string sType, sName, sIName, sSocks;
object oItem;
itemproperty ipAdd;
int iID = 0;
int iQual = 0;
int iRoll = d20();
switch(iRoll)
{
case 1: {sType = "sdammy1"; sIName = "Amulet";iID = 1;} break;
case 2: {sType = "sdring1"; sIName = "Ring";iID = 2;} break;
case 3: {sType = "sdboots1"; sIName = "Boots";iID = 1;}break;
case 4: {sType = "sdbracers1"; sIName = "Wristband";} break;
case 5: {sType = "sdhelm1"; sIName = "Helm";} break;
case 6: {sType = "sdcloak1"; sIName = "Cloak";iID = 1;} break;
case 7: {sType = "sdbelt1"; sIName = "Belt";} break;
case 8: {sType = "sdammy2"; sIName = "Talisman";iID = 1;} break;
case 9: {sType = "sdring2"; sIName = "Band";iID = 2;} break;
case 10: {sType = "sdboots2"; sIName = "Sabatons";iID = 1;} break;
case 11: {sType = "sdbracers2"; sIName = "Bracers";} break;
case 12: {sType = "sdhelm2"; sIName = "Visor";} break;
case 13: {sType = "sdcloak2"; sIName = "Cape";iID = 1;} break;
case 14: {sType = "sdbelt2"; sIName = "Thick Belt";} break;
case 15: {sType = "sdammy3"; sIName = "Charm";iID = 1;} break;
case 16: {sType = "sdring3"; sIName = "Circle";iID = 2;} break;
case 17: {sType = "sdboots3"; sIName = "Greaves";iID = 1;} break;
case 18: {sType = "sdbracers3"; sIName = "Armband";} break;
case 19: {sType = "sdhelm3"; sIName = "Vanguard";} break;
case 20: {sType = "sdring4"; sIName = "Coil";iID = 2;} break;
}
//:: Chance for socketed item
oItem = CreateItemOnObject(sType, oSack, 1, "sf_socket_item");
iRoll = d100();
if (iRoll < SockChance)
{
iRoll=d6();
SetLocalInt(oItem, "SOCKETS", iRoll);
sSocks = IntToString(iRoll);
ipAdd = ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER, IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE);
IPSafeAddItemProperty(oItem, ipAdd);
sName = ColorString("Socketed "+sIName+" ("+sSocks+")", 72, 209, 204 );
SetName(oItem, sName);
return;
}
iRoll = d100();
if (iRoll <= CHANCE_WORN && iRoll > CHANCE_BROKEN && iChest != 1) //:: Chance of being worn
{
sName = ColorString("Worn "+sIName, 192, 192, 192);
SetName(oItem, sName);
SetIdentified(oItem, TRUE);
return;
}
if (iRoll <= CHANCE_BROKEN && iChest != 1) //:: Chance of being broken
{
DelayCommand(0.2, ACimbue(oItem, iRange, 1));
sName = ColorString("Broken "+sIName, 255, 0, 0);
SetName(oItem, sName);
SetIdentified(oItem, TRUE);
return;
}
SetIdentified(oItem, FALSE);
///////////////////////////////////////////// Hench Reward Code
object oKiller = GetFirstPC();
if (GetMaster(oMob)!=OBJECT_INVALID)
{
SetIdentified(oItem, TRUE);
SetItemCursedFlag(oItem, TRUE);
}
//////////////////////////////////////////// Lvls 1-5
//:: AC bonus for ammy, cloak & boots or ability bonus otherwise
if (iID == 1)
{
DelayCommand(0.2, ACmisc(oItem, iRange));
++iQual;
}
else
{
iRoll = d100();
if (iRoll > 94) //:: 5% Chance for Divinty / Wizardry
{
iRoll = d2(1);
if (iRoll == 1)
{
DelayCommand(0.2, ImbueWizardry(oItem, iRange));
iQual+=3;
}
else
{
DelayCommand(0.2, ImbueDivinity(oItem, iRange));
iQual+=3;
}
}
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
////////////////////////////////////////// Lvls 6-10
if (iRange == 2)
{
//:: Ability bonus
iRoll = d100();
if (iRoll > 60)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
if (iID == 2)
{
iRoll = d100();
if (iRoll > 94) //:: 5% Chance for Divinty / Wizardry
{
iRoll = d2(1);
if (iRoll == 1)
{
DelayCommand(0.2, ImbueWizardry(oItem, iRange));
iQual+=3;
}
else
{
DelayCommand(0.2, ImbueDivinity(oItem, iRange));
iQual+=3;
}
}
else if (iRoll > 65) //:: 30% Chance for spell slots
{
iRoll = d3(); // 1-3 slots
DelayCommand(0.2, SpellSlot(oItem, iRange, iRoll));
iQual+=2;
}
}
else
{
//:: Saving Throw bonus
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
}
}
////////////////////////////////////////// Lvls 11-20
if (iRange == 3)
{
//:: Ability bonus &/or AC Bonus
iRoll = d100();
if (iRoll > 55)
{
DelayCommand(0.2, ACmisc(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll > 55)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Rings ONLY
if (iID == 2)
{
iRoll = d100();
if (iRoll > 89) //:: 10% Chance for Divinty / Wizardry
{
iRoll = d2(1);
if (iRoll == 1)
{
DelayCommand(0.2, ImbueWizardry(oItem, iRange));
iQual+=3;
}
else
{
DelayCommand(0.2, ImbueDivinity(oItem, iRange));
iQual+=3;
}
}
else if (iRoll > 59) //:: 30% Chance for spell slots
{
iRoll = d3()+1; // 2-4 slots
DelayCommand(0.2, SpellSlot(oItem, iRange, iRoll));
iQual+=2;
}
}
else
{//:: Misc Bonus
iRoll = d100();
if (iRoll > 80)
{
DelayCommand(0.2, MiscImbue(oItem, iRange));
iQual+=2;
}
//:: Saving Throw Bonuses
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
}
}
////////////////////////////////////////// Lvls 20-30
if (iRange == 4)
{
//:: 2x Ability bonus &/or AC Bonus
iRoll = d100();
if (iRoll > 55)
{
DelayCommand(0.2, ACmisc(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll > 55)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll > 60)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Rings ONLY
if (iID==2)
{
iRoll = d100();
if (iRoll > 89) //:: 10% Chance for Divinty / Wizardry
{
iRoll = d2(1);
if (iRoll == 1)
{
DelayCommand(0.2, ImbueWizardry(oItem, iRange));
iQual+=3;
}
else
{
DelayCommand(0.2, ImbueDivinity(oItem, iRange));
iQual+=3;
}
}
else if (iRoll > 59) //:: 30% Chance for spell slots
{
iRoll = d4()+2; // 3-6 slots
DelayCommand(0.2, SpellSlot(oItem, iRange, iRoll));
iQual+=2;
}
}
else
{//:: Misc Itemprop
iRoll = d100();
if (iRoll > 80)
{
DelayCommand(0.2, MiscImbue(oItem, iRange));
++iQual;
}
//:: Misc Immunity
iRoll = d100();
if (iRoll > 80)
{
DelayCommand(0.2, MIMMimbue(oItem, iRange));
iQual+=2;
}
//:: Damage Res bonus
iRoll = d100();
if (iRoll > 80)
{
DelayCommand(0.2, RESimbue(oItem, iRange));
++iQual;
}
//:: Saving Throw Bonuses
iRoll = d100();
if (iRoll > 70)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
}
}
////////////////////////////////////////// Lvls 30-40
if (iRange == 5)
{
//:: 2x Ability bonus &/or AC Bonus
iRoll = d100();
if (iRoll > 55)
{
DelayCommand(0.2, ACmisc(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll > 55)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll > 60)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Damage Res bonus x 2
iRoll = d100();
if (iRoll > 70)
{
DelayCommand(0.2, RESimbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll >75)
{
DelayCommand(0.2, RESimbue(oItem, iRange));
++iQual;
}
//:: Rings ONLY
if (iID==2)
{
iRoll = d100();
if (iRoll > 89) //:: 10% Chance for Divinty / Wizardry
{
iRoll = d2(1);
if (iRoll == 1)
{
DelayCommand(0.2, ImbueWizardry(oItem, iRange));
iQual+=3;
}
else
{
DelayCommand(0.2, ImbueDivinity(oItem, iRange));
iQual+=3;
}
}
else if (iRoll > 59) //:: 30% Chance for spell slots
{
iRoll = d6()+2; // 3-8 slots
DelayCommand(0.2, SpellSlot(oItem, iRange, iRoll));
iQual+=2;
}
}
else
//:: Misc
iRoll = d100();
if (iRoll>50)
{
DelayCommand(0.2, MiscImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, MiscImbue(oItem, iRange));
++iQual;
}
//:: Misc Immunity
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, MIMMimbue(oItem, iRange));
iQual+=2;
}
//:: Save
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
}
switch(iQual)
{
case 1: sName = ColorString("Magical "+sIName,255, 255, 255); break;
case 2: sName = ColorString("Mystical "+sIName, 30, 180, 30); break;
case 3: sName = ColorString("Enchanted "+sIName, 30, 180, 30); break;
case 4: sName = ColorString("Imbued "+sIName, 5, 90, 255); break;
case 5: sName = ColorString("Arcane "+sIName, 5, 90, 255); break;
case 6: sName = ColorString("Lesser Planar "+sIName, 185, 1, 200); break;
case 7: sName = ColorString("Greater Planar "+sIName, 185, 1, 200); break;
case 8: sName = ColorString("Divine "+sIName, 255, 245, 210); break;
case 9: sName = ColorString("Eldritch "+sIName, 255, 245, 210); break;
case 10: sName = ColorString("Ancient "+sIName, 180, 180, 80); break;
}
SetName(oItem, sName);
if (GetBaseItemType(oItem) == BASE_ITEM_CLOAK)
{
DelayCommand(0.4, ColorHelmClk(oItem, iRandomArmor1, iRandomArmor2, iRandomArmor3, iRandomArmor4, iRandomArmor5, iRandomArmor6, iRandomCloak, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_HELMET)
{
DelayCommand(0.4, ColorHelmClk(oItem, iRandomArmor1, iRandomArmor2, iRandomArmor3, iRandomArmor4, iRandomArmor5, iRandomArmor6, iRandomHelmet, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_RING)
{
DelayCommand(0.4, ChangeRingAmuBelt(oItem, iRandRing, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_BELT)
{
DelayCommand(0.4, ChangeRingAmuBelt(oItem, iRandBelt, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_AMULET)
{
DelayCommand(0.4, ChangeRingAmuBelt(oItem, iRandAmulet, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_BRACER)
{
DelayCommand(0.4, ChangeRingAmuBelt(oItem, iRandBracer, oSack));
}
}
void DropMonkGloves (object oMob, object oSack, int iRange, int SockChance, int iChest)
{
object oItem;
itemproperty ipAdd;
string sType, sName, sIName, sSocks;
int iDice1, iDice2, iRoll;
int iQual;
int iWType = 0;
iRoll = d6();
switch (iRoll)
{
case 1: sType = "sd_mgloves"; break;
case 2: sType = "sd_mgloves1"; break;
case 3: sType = "sd_mgloves2"; break;
case 4: sType = "sd_mgloves3"; break;
case 5: sType = "sd_mgloves4"; break;
case 6: sType = "sd_mgloves5"; break;
}
iRoll = d20();
switch (iRoll)
{
case 1: sIName = "War Talons"; break;
case 2: sIName = "Blood Claws"; break;
case 3: sIName = "Pulverizers"; ;break;
case 4: sIName = "Ninja Claws"; break;
case 5: sIName = "War Gloves"; break;
case 6: sIName = "Flesh Knuckles"; break;
case 7: sIName = "Death Mitts"; break;
case 8: sIName = "Palm Guards"; break;
case 9: sIName = "Knuckledusters"; ;break;
case 10: sIName = "Tiger Fists"; break;
case 11: sIName = "Tauntlets"; break;
case 12: sIName = "Chi Bracelets"; break;
case 13: sIName = "Dragon Claws"; break;
case 14: sIName = "Steel Palms"; break;
case 15: sIName = "Exploding Fists"; break;
case 16: sIName = "Nose Breakers"; break;
case 17: sIName = "Stiff Fingers"; ;break;
case 18: sIName = "Heart Piercers"; break;
case 19: sIName = "Digit Devastators"; break;
case 20: sIName = "Gore Gauntlets"; break;
}
oItem = CreateItemOnObject(sType, oSack, 1, "sf_socket_item");
//:: Monk
iRoll = d100();
if (iRoll <= CHANCE_WORN && iRoll > CHANCE_BROKEN && iChest != 1) //:: Chance of being worn
{
sName = ColorString("Worn "+sIName, 192, 192, 192);
SetName(oItem, sName);
SetIdentified(oItem, TRUE);
return;
}
if (iRoll <= CHANCE_BROKEN && iChest != 1) //:: Chance of being broken
{
DelayCommand(0.2, ACimbue(oItem, iRange, 1));
sName = ColorString("Broken "+sIName, 255, 0, 0);
SetName(oItem, sName);
SetIdentified(oItem, TRUE);
return;
}
SetIdentified(oItem, FALSE);
//////////////////////////////////////////// Lvls 1-5 ::Monk2::
//:: Attack bonus
DelayCommand(0.2, BowEnhance(oItem, iRange));
++iQual;
////////////////////////////////////////// Lvls 6-10 ::Monk2::
if (iRange==2)
{
//:: Ability bonus
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Damage Bonus
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
//:: Haste
iRoll = d100();
if (iRoll==98)
{
DelayCommand(0.2, HasteImbue(oItem));
iQual+=2;
}
}
////////////////////////////////////////// Lvls 11-20 ::Monk2::
if (iRange==3)
{
//:: Ability bonus x 2
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Damage Bonus x 2
iRoll = d100();
if (iRoll>50)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>55)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
//::: Haste
iRoll = d100();
if (iRoll>=95)
{
DelayCommand(0.2, HasteImbue(oItem));
++iQual;
}
}
////////////////////////////////////////// Lvls 20-30 ::Monk2::
if (iRange==4)
{
//:: Ability bonus x 2
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>40)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Damage Bonus x 3
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>50)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
//:: Haste
iRoll = d100();
if (iRoll>=95)
{
DelayCommand(0.2, HasteImbue(oItem));
++iQual;
}
//:: Save
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
}
////////////////////////////////////////// Lvls 30-40 ::Monk2::
if (iRange==5)
{
//:: Ability bonus x 2
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Damage Bonus x 3
iRoll = d100();
if (iRoll>30)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>50)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
if (iRoll>70)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
if (iRoll>85)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
if (iRoll>92)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
if (iRoll>95)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
//:: Haste
iRoll = d100();
if (iRoll>=90)
{
DelayCommand(0.2, HasteImbue(oItem));
++iQual;
}
//:: Save
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
}
switch(iQual)
{
case 1: sName = ColorString("Magical "+sIName,255, 255, 255); break;
case 2: sName = ColorString("Mystical "+sIName, 30, 180, 30); break;
case 3: sName = ColorString("Enchanted "+sIName, 30, 180, 30); break;
case 4: sName = ColorString("Imbued "+sIName, 5, 90, 255); break;
case 5: sName = ColorString("Arcane "+sIName, 5, 90, 255); break;
case 6: sName = ColorString("Lesser Planar "+sIName, 185, 1, 200); break;
case 7: sName = ColorString("Greater Planar "+sIName, 185, 1, 200); break;
case 8: sName = ColorString("Divine "+sIName, 255, 245, 210); break;
case 9: sName = ColorString("Eldritch "+sIName, 255, 245, 210); break;
case 10: sName = ColorString("Ancient "+sIName, 180, 180, 80); break;
}
SetName(oItem, sName);
SetIdentified(oItem, FALSE);
DelayCommand(0.4, ChangeRingAmuBelt(oItem, iRandGauntlet, oSack));
}
void DropWeapon (object oMob, object oSack, int iRange, int SockChance, int iChest)
{
object oItem;
itemproperty ipAdd;
string sType, sName, sIName, sSocks, DType;
int iRoll;
int iQual = 0;
int iWType = 0;
iRoll = Random(54)+1;
switch(iRoll)
{
//:: Axes
case 1:
{
sType = "sdgaxe"; iRoll = d3();
if (iRoll==1)sIName = "Greataxe";
if (iRoll==2)sIName = "Two Handed Axe";
if (iRoll==3)sIName = "Executioner's Axe";
}
break;
case 2:
{
sType = "sdwaxe"; iRoll = d3();
if (iRoll==1)sIName = "Dwarven War Axe";
if (iRoll==2)sIName = "War Axe";
if (iRoll==3)sIName = "Broad Axe";
}
break;
case 3:
{
sType = "sdbaxe"; iRoll = d3();
if (iRoll==1)sIName = "Battleaxe";
if (iRoll==2)sIName = "Berserker Axe";
if (iRoll==3)sIName = "Siege Axe";
}
break;
case 4:
{
sType = "sdhaxe"; iRoll = d3();
if (iRoll==1)sIName = "Handaxe";
if (iRoll==2)sIName = "Cleaver";
if (iRoll==3)sIName = "Tomahawk";
}
break;
//:: Bladed
case 5:
{
sType = "sd_bastard"; iRoll = d3();
if (iRoll==1)sIName = "Bastard Sword";
if (iRoll==2)sIName = "War Sword";
if (iRoll==3)sIName = "Arming Sword";
}
break;
case 6:
{
sType = "sdlsword"; iRoll = d3();
if (iRoll==1)sIName = "Longsword";
if (iRoll==2)sIName = "Knight's Sword";
if (iRoll==3)sIName = "Broadsword ";
}
break;
case 7:
{ //:: Falchion
sType = "prc_wswfa001"; iRoll = d3();
if (iRoll==1)sIName = "Falchion";
if (iRoll==2)sIName = "Nagamaki";
if (iRoll==3)sIName = "Chopper";
}
break;
case 8:
{
sType = "sdssword"; iRoll = d3();
if (iRoll==1)sIName = "Short Sword";
if (iRoll==2)sIName = "Gladius";
if (iRoll==3)sIName = "Xiphos";
}
break;
case 9:
{
sType = "sdgsword"; iRoll = d3();
if (iRoll==1)sIName = "Greatsword";
if (iRoll==2)sIName = "Claymore";
if (iRoll==3)sIName = "Linebreaker";
}
break;
case 10:
{
sType = "sdkatana"; iRoll = d3();
if (iRoll==1)sIName = "Katana";
if (iRoll==2)sIName = "Samurai Sword";
if (iRoll==3)sIName = "Nihonto";
}
break;
case 11:
{
sType = "sdscim"; iRoll = d3();
if (iRoll==1)sIName = "Scimitar";
if (iRoll==2)sIName = "Shamshir";
if (iRoll==3)sIName = "Talwar";
}
break;
case 12:
{
sType = "sdrapier"; iRoll = d3();
if (iRoll==1)sIName = "Rapier";
if (iRoll==2)sIName = "Sabre";
if (iRoll==3)sIName = "Court Sword";
}
break;
case 13:
{
sType = "sddagger"; iRoll = d6();
if (iRoll==1)sIName = "Dagger";
if (iRoll==2)sIName = "Dirk";
if (iRoll==3)sIName = "Knife";
if (iRoll==4)sIName = "Stiletto";
if (iRoll==5)sIName = "Poignard";
if (iRoll==6)sIName = "Main-gauche";
}
break;
//:: Exotic
case 14:
{
sType = "sdstaff3"; iRoll = d3();
iWType = 2;
if (iRoll==1)sIName = "Arcane Staff";
if (iRoll==2)sIName = "Runic Staff ";
if (iRoll==3)sIName = "Spellstaff ";
}
break;
case 15:
{
sType = "sdkama"; iRoll = d3();
if (iRoll==1)sIName = "Kama";
if (iRoll==2)sIName = "Monk Claw";
if (iRoll==3)sIName = "Ripper";}
break;
case 16:
{
sType = "sdkukri"; iRoll = d3();
if (iRoll==1)sIName = "Kukri";
if (iRoll==2)sIName = "Machete";
if (iRoll==3)sIName = "Scorpion Tail";
}
break;
case 17:
{
sType = "sdlbow"; iRoll = d3();
iWType = 1;
if (iRoll==1)sIName = "Longbow";
if (iRoll==2)sIName = "Warbow";
if (iRoll==3)sIName = "Greatbow";
}
break;
//:: Blunt
case 18:
{
sType = "sdclub"; iRoll = d3();
if (iRoll==1)sIName = "Club";
if (iRoll==2)sIName = "Baton";
if (iRoll==3)sIName = "Truncheon";
}
break;
case 19:
{
sType = "sdhflail"; iRoll = d3();
if (iRoll==1)sIName = "Heavy Flail";
if (iRoll==2)sIName = "War Flail";
if (iRoll==3)sIName = "Bastard Flail";
}
break;
case 20:
{
sType = "sdlflail"; iRoll = d3();
if (iRoll==1)sIName = "Light Flail";
if (iRoll==2)sIName = "Chain Mace";
if (iRoll==3)sIName = "Infanty Flail";
}
break;
case 21:
{
sType = "sdstaff1"; iRoll = d3();
iWType = 2;
if (iRoll==1)sIName = "Magestaff";
if (iRoll==2)sIName = "Mystic Staff";
if (iRoll==3)sIName = "Wyrdstaff ";
}
break;
case 22:
{
sType = "sdwhamm"; iRoll = d3();
if (iRoll==1)sIName = "Warhammer";
if (iRoll==2)sIName = "Battlehammer";
if (iRoll==3)sIName = "Earthshaker";
}
break;
case 23:
{
sType = "sdmace"; iRoll = d3();
if (iRoll==1)sIName = "Light Mace";
if (iRoll==2)sIName = "Flanged Mace";
if (iRoll==3)sIName = "Cudgel";
}
break;
case 24:
{
sType = "sdmstar"; iRoll = d3();
if (iRoll==1)sIName = "Morningstar ";
if (iRoll==2)sIName = "Ball-and-Chain";
if (iRoll==3)sIName = "Warstar";
}
break;
//:: Double Sided
case 25:
{
sType = "sddbsword"; iRoll = d3();
if (iRoll==1)sIName = "Two-Bladed Sword";
if (iRoll==2)sIName = "Doublesword";
if (iRoll==3)sIName = "Twinblade";
}
break;
case 26:
{
sType = "sddsmace"; iRoll = d3();
if (iRoll==1)sIName = "Dire Mace";
if (iRoll==2)sIName = "Double Mace";
if (iRoll==3)sIName = "Twin Basher";
}
break;
case 27:
{
sType = "sddsaxe"; iRoll = d3();
if (iRoll==1)sIName = "Double Axe";
if (iRoll==2)sIName = "Crowd Cutter";
if (iRoll==3)sIName = "Dervish";
}
break;
case 28:
{
sType = "sdqstaff"; iRoll = d3();
if (iRoll==1)sIName = "Quarterstaff";
if (iRoll==2)sIName = "Battlestaff";
if (iRoll==3)sIName = "Bo";
}
break;
//:: Polearms
case 29:
{
sType = "sdhalberd"; iRoll = d4();
if (iRoll==1)sIName = "Halberd";
if (iRoll==2)sIName = "Poleaxe";
if (iRoll==3)sIName = "Glaive";
if (iRoll==3)sIName = "Bardiche";
}
break;
case 30:
{
sType = "sdscythe"; iRoll = d3();
if (iRoll==1)sIName = "Scythe";
if (iRoll==2)sIName = "Reaper";
if (iRoll==3)sIName = "Harvester";
}
break;
case 31:
{
sType = "sdspear"; iRoll = d3();
if (iRoll==1)sIName = "Spear";
if (iRoll==2)sIName = "Pike";
if (iRoll==3)sIName = "Harpoon";
}
break;
//:: Whip
case 32:
{
sType = "sdwhip"; iRoll = d3();
if (iRoll==1)sIName = "Whip";
if (iRoll==2)sIName = "Bullwhip";
if (iRoll==3)sIName = "Lash";
}
break;
//:: Ranged
case 33:
{
sType = "sdsbow"; iRoll = d3();
iWType = 1;
if (iRoll==1)sIName = "Shortbow";
if (iRoll==2)sIName = "Hunting Bow";
if (iRoll==3)sIName = "Lightbow";
}
break;
case 34:
{
sType = "sdlcbow"; iRoll = d3();
iWType = 1;
if (iRoll==1)sIName = "Light Crossbow";
if (iRoll==2)sIName = "Crossbow";
if (iRoll==3)sIName = "Traveler<65>s Crossbow";
}
break;
case 35:
{
sType = "sdhcbow"; iRoll = d3();
iWType = 1;
if (iRoll==1)sIName = "Heavy Crossbow";
if (iRoll==2)sIName = "Siege Crossbow";
if (iRoll==3)sIName = "Arbalest";
}
break;
//:: Mage
case 36:
{
sType = "sdlhamm"; iRoll = d3();
if (iRoll==1)sIName = "Light Hammer";
if (iRoll==2)sIName = "Forge Hammer";
if (iRoll==3)sIName = "Hand Hammer";
}
break;
case 37:
{
sType = "sdstaff2"; iRoll = d3();
iWType = 2;
if (iRoll==1)sIName = "Mystic Cane";
if (iRoll==2)sIName = "Thaumic Conduit";
if (iRoll==3)sIName = "Leyline Channeler";
}
break;
case 38:
{
sType = "sdsickle"; iRoll = d3();
if (iRoll==1)sIName = "Sickle";
if (iRoll==2)sIName = "Moonblade";
if (iRoll==3)sIName = "Crescent Blade";
}
break;
case 39:
{
sType = "sdmgloves"; iRoll = d3();
iWType = 3;
if (iRoll==1)sIName = "Gloves";
if (iRoll==2)sIName = "Fistwraps";
if (iRoll==3)sIName = "Gauntlets";
}
break;
//:: PRC / CEP Weapons
case 40:
{ //:: Trident
sType = "nw_wpltr001"; iRoll = d3();
if (iRoll==1)sIName = "Trident";
if (iRoll==2)sIName = "Fork";
if (iRoll==3)sIName = "Fuscina";
}
break;
case 41:
{ //:: Heavy Pick
sType = "prc_wblph001"; iRoll = d3();
if (iRoll==1)sIName = "Heavy Pick";
if (iRoll==2)sIName = "War Pick";
if (iRoll==3)sIName = "Mattock";
}
break;
case 42:
{ //:: Light Pick
sType = "prc_wblpl001"; iRoll = d3();
if (iRoll==1)sIName = "Light Pick";
if (iRoll==2)sIName = "Hand Pick";
if (iRoll==3)sIName = "Rock Hammer";
}
break;
case 43:
{ //:: Goad
sType = "prc_wspgd001"; iRoll = d3();
if (iRoll==1)sIName = "Goad";
if (iRoll==2)sIName = "Prong";
if (iRoll==3)sIName = "Prod";
}
break;
case 44:
{ //:: Katar
sType = "prc_wswdp001"; iRoll = d3();
if (iRoll==1)sIName = "Katar";
if (iRoll==2)sIName = "Punch-dagger";
if (iRoll==3)sIName = "Tekpi";
}
break;
case 45:
{ //:: Sai
sType = "prc_wswsi001"; iRoll = d3();
if (iRoll==1)sIName = "Sai";
if (iRoll==2)sIName = "Jitte";
if (iRoll==3)sIName = "Defender";
}
break;
case 46:
{ //:: Eagle Claw
sType = "bdd_eagle_claw"; iRoll = d3();
if (iRoll==1)sIName = "Eagle Claw";
if (iRoll==2)sIName = "Claw";
if (iRoll==3)sIName = "Talon";
}
break;
case 47:
{ //:: Elven Courtblade
sType = "prc_wspec001"; iRoll = d3();
if (iRoll==1)sIName = "Elven Courtblade";
if (iRoll==2)sIName = "Courtblade";
if (iRoll==3)sIName = "Elven Greatsword";
}
break;
case 48:
{ //:: Elven Lightblade
sType = "prc_wspel001"; iRoll = d3();
if (iRoll==1)sIName = "Elven Lightblade";
if (iRoll==2)sIName = "Lightblade";
if (iRoll==3)sIName = "Elven Gladius";
}
break;
case 49:
{ //:: Elven Thinblade
sType = "prc_wspet001"; iRoll = d3();
if (iRoll==1)sIName = "Elven Thinblade";
if (iRoll==2)sIName = "Thinblade";
if (iRoll==3)sIName = "Elven Epee";
}
break;
case 50:
{ //:: Maul
sType = "prc_wxblma001"; iRoll = d3();
if (iRoll==1)sIName = "Maul";
if (iRoll==2)sIName = "Great Hammer";
if (iRoll==3)sIName = "Slegehammer";
}
break;
case 51:
{ //:: Heavy Mace
sType = "prc_wxblmh001"; iRoll = d3();
if (iRoll==1)sIName = "Heavy Mace";
if (iRoll==2)sIName = "Footman<61>s Mace";
if (iRoll==3)sIName = "Pernach";
}
break;
case 52:
{ //:: Nunchaku
sType = "prc_wblnn001"; iRoll = d3();
if (iRoll==1)sIName = "Nunchaku";
if (iRoll==2)sIName = "Thresher";
if (iRoll==3)sIName = "Split-club";
}
break;
case 53:
{ //:: Sap
sType = "prc_wspsp001"; iRoll = d3();
if (iRoll==1)sIName = "Sap";
if (iRoll==2)sIName = "Blackjack";
if (iRoll==3)sIName = "Shot-sack";
}
break;
case 54:
{ //:: Double Scimitar
sType = "prc_wxdbsc001"; iRoll = d3();
if (iRoll==1)sIName = "Double Scimitar";
if (iRoll==2)sIName = "Twin Sabre";
if (iRoll==3)sIName = "Double Shamshir";
}
break;
case 55:
{ //:: Sling
iWType = 1;
sType = "sdsling"; iRoll = d3();
if (iRoll==1)sIName = "Sling";
if (iRoll==2)sIName = "Strap";
if (iRoll==3)sIName = "Funda";
}
break;
}
//:: Chance for socketed item
oItem = CreateItemOnObject(sType, oSack, 1, "sf_socket_item");
SetName(oItem, sIName);
iRoll = d100();
if (iRoll < SockChance)
{
iRoll=d6();
SetLocalInt(oItem, "SOCKETS", iRoll);
sSocks = IntToString(iRoll);
ipAdd = ItemPropertyCastSpell(IP_CONST_CASTSPELL_UNIQUE_POWER, IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE);
IPSafeAddItemProperty(oItem, ipAdd);
sName = ColorString("Socketed "+sIName+" ("+sSocks+")", 72, 209, 204 );
SetName(oItem, sName);
return;
}
if (iWType==1) //:: Ranged Weapons
{
iQual=0;
//:: Ranged
//:: Chance for worn or broken item
iRoll = d100();
if (iRoll <= CHANCE_WORN && iRoll > CHANCE_BROKEN && iChest != 1) //:: Chance of being worn
{
sName = ColorString("Worn "+sIName, 192, 192, 192);
SetName(oItem, sName);
SetIdentified(oItem, TRUE);
return;
}
if (iRoll <= CHANCE_BROKEN && iChest != 1) //:: Chance of being broken
{
DelayCommand(0.2, ACimbue(oItem, iRange, 1));
sName = ColorString("Broken "+sIName, 255, 0, 0);
SetName(oItem, sName);
SetIdentified(oItem, TRUE);
return;
}
SetIdentified(oItem, FALSE);
//////////////////////////////////////////// Lvls 1-5 ::Ranged::
//:: Attack bonus
DelayCommand(0.2, BowEnhance(oItem, iRange));
++iQual;
////////////////////////////////////////// Lvls 6-10 ::Ranged::
if (iRange==2)
{
//:: Ability bonus
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Massive Crits
iRoll = d100();
if (iRoll > 70)
{
DelayCommand(0.2, MassCritImbue(oItem, iRange));
++iQual;
}
//:: Mighty
iRoll = d100();
if (iRoll > 70)
{
DelayCommand(0.2, MightyEnhance(oItem, iRange));
++iQual;
}
//:: Haste
iRoll = d100();
if (iRoll >= 98)
{
DelayCommand(0.2, HasteImbue(oItem));
iQual+=2;
}
}
////////////////////////////////////////// Lvls 11-20 ::Ranged::
if (iRange==3)
{
//:: Mighty
iRoll = d100();
if (iRoll>65)
{
DelayCommand(0.2, MightyEnhance(oItem, iRange));
++iQual;
}
//:: Ability bonus
iRoll = d100();
if (iRoll>65)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Massive Crits
iRoll = d100();
if (iRoll>65)
{
DelayCommand(0.2, MassCritImbue(oItem, iRange));
++iQual;
}
//:: Extra range damage bonus
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, RangedImbue(oItem));
++iQual;
}
//:: Save
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
//:: Haste
iRoll = d100();
if (iRoll>=95)
{
DelayCommand(0.2, HasteImbue(oItem));
iQual+=2;
}
}
////////////////////////////////////////// Lvls 20-30 ::Ranged::
if (iRange==4)
{
//:: Ability bonus
iRoll = d100();
if (iRoll>75)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Massive Crits
iRoll = d100();
if (iRoll>55)
{
DelayCommand(0.2, MassCritImbue(oItem, iRange));
++iQual;
}
//:: Mighty
iRoll = d100();
if (iRoll>55)
{
DelayCommand(0.2, MightyEnhance(oItem, iRange));
++iQual;
}
//:: Extra ranged damage bonus
iRoll = d100();
if (iRoll>75)
{
DelayCommand(0.2, RangedImbue(oItem));
iQual+=2;
}
//:: Save
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
//:: Haste
iRoll = d100();
if (iRoll>=90)
{
DelayCommand(0.2, HasteImbue(oItem));
iQual+=2;
}
}
////////////////////////////////////////// Lvls 30-40 ::Ranged::
if (iRange==5)
{
//:: Ability bonus x 2
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>65)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Mighty
iRoll = d100();
if (iRoll>45)
{
DelayCommand(0.2, MightyEnhance(oItem, iRange));
++iQual;
}
//:: Extra melee damage bonus
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, RangedImbue(oItem));
iQual+=2;
}
//:: Massive Crits
iRoll = d100();
if (iRoll>50)
{
DelayCommand(0.2, MassCritImbue(oItem, iRange));
++iQual;
}
//:: Save
iRoll = d100();
if (iRoll>85)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
//:: Haste
iRoll = d100();
if (iRoll>=85)
{
DelayCommand(0.2, HasteImbue(oItem));
iQual+=2;
}
}
}
else if (iWType==2) //:: Mage "weapons"
{
//:: Mage
iQual=0;
iRoll = d100();
if (iRoll <= CHANCE_WORN && iRoll > CHANCE_BROKEN && iChest != 1) //:: Chance of being worn
{
sName = ColorString("Worn "+sIName, 192, 192, 192);
SetName(oItem, sName);
SetIdentified(oItem, TRUE);
return;
}
if (iRoll <= CHANCE_BROKEN && iChest != 1) //:: Chance of being broken
{
DelayCommand(0.2, ACimbue(oItem, iRange, 1));
sName = ColorString("Broken "+sIName, 255, 0, 0);
SetName(oItem, sName);
SetIdentified(oItem, TRUE);
return;
}
//////////////////////////////////////////// Lvls 1-5 ::Mage::
//:: Enhancement bonus
DelayCommand(0.2, WeapEnhance(oItem, iRange));
++iQual;
////////////////////////////////////////// Lvls 6-10 ::Mage::
if (iRange==2)
{
//:: Extra Spell Slot 1-2
iRoll = d100();
if (iRoll>60)
{
iRoll = d3();if (iRoll==3)iRoll==2;
DelayCommand(0.2, SpellSlot(oItem, iRange, iRoll));
++iQual;
}
//:: Spell Bonus
iRoll = d100();
if (iRoll>50)
{
DelayCommand(0.2, CastImbue(oItem, iRange));
++iQual;
}
}
////////////////////////////////////////// Lvls 11-20 ::Mage::
if (iRange==3)
{
//:: Ability bonus
iRoll = d100();
if (iRoll>50)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Extra Spell Slot 1-4
iRoll = d100();
if (iRoll>45)
{
iRoll = d4();
DelayCommand(0.2, SpellSlot(oItem, iRange, iRoll));
++iQual;
}
//:: Spell Bonus x 2
iRoll = d100();
if (iRoll>40)
{
DelayCommand(0.2, CastImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>45)
{
DelayCommand(0.2, CastImbue(oItem, iRange));
++iQual;
}
//:: Haste bonus
iRoll = d100();
if (iRoll>95)
{
DelayCommand(0.2, HasteImbue(oItem));
iQual+=2;
}
}
////////////////////////////////////////// Lvls 20-30 ::Mage::
if (iRange==4)
{
//:: Ability bonus
iRoll = d100();
if (iRoll>45)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Extra Spell Slot 1-6
iRoll = d100();
if (iRoll==40)
{
iRoll = d6();
DelayCommand(0.2, SpellSlot(oItem, iRange, iRoll));
}
//:: Spell Bonus x 2
iRoll = d100();
if (iRoll>35)
{
DelayCommand(0.2, CastImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>45)
{
DelayCommand(0.2, CastImbue(oItem, iRange));
++iQual;
}
//:: Haste bonus
iRoll = d100();
if (iRoll>92)
{
DelayCommand(0.2, HasteImbue(oItem));
iQual+=2;
}
//:: Extra melee damage bonus
iRoll = d100();
if (iRoll>85)
{
DelayCommand(0.2, MeleeImbue(oItem));
++iQual;
}
//:: Save
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
}
////////////////////////////////////////// Lvls 30-40 ::Mage::
if (iRange==5)
{
//:: Ability bonus
iRoll = d100();
if (iRoll>35)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Extra Spell Slot 1-8
iRoll = d100();
if (iRoll>35)
{
iRoll = d8();
DelayCommand(0.2, SpellSlot(oItem, iRange, iRoll));
++iQual;
}
//:: Spell Bonus x 3
iRoll = d100();
if (iRoll>30)
{
DelayCommand(0.2, CastImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>40)
{
DelayCommand(0.2, CastImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>50)
{
DelayCommand(0.2, CastImbue(oItem, iRange));
++iQual;
}
//:: Haste bonus
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, HasteImbue(oItem));
++iQual;
}
//:: Extra melee damage bonus
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, MeleeImbue(oItem));
iQual+=2;
}
//:: Save
iRoll = d100();
if (iRoll>55)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
}
}
else if (iWType==3) //: Monk Gloves
{
//:: Monk
iRoll = d100();
if (iRoll <= CHANCE_WORN && iRoll > CHANCE_BROKEN && iChest != 1) //:: Chance of being worn
{
sName = ColorString("Worn "+sIName, 192, 192, 192);
SetName(oItem, sName);
SetIdentified(oItem, TRUE);
return;
}
if (iRoll <= CHANCE_BROKEN && iChest != 1) //:: Chance of being broken
{
DelayCommand(0.2, ACimbue(oItem, iRange, 1));
sName = ColorString("Broken "+sIName, 255, 0, 0);
SetName(oItem, sName);
SetIdentified(oItem, TRUE);
return;
}
SetIdentified(oItem, FALSE);
//////////////////////////////////////////// Lvls 1-5 ::Monk::
//:: Attack bonus
DelayCommand(0.2, BowEnhance(oItem, iRange));
++iQual;
////////////////////////////////////////// Lvls 6-10 ::Monk::
if (iRange==2)
{
//:: Ability bonus
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Damage Bonus
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
//:: Haste
iRoll = d100();
if (iRoll==95)
{
DelayCommand(0.2, HasteImbue(oItem));
iQual+=2;
}
}
////////////////////////////////////////// Lvls 11-20 ::Monk::
if (iRange==3)
{
//:: Ability bonus x 2
iRoll = d100();
if (iRoll>75)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Damage Bonus x 2
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
//:: Damage Bonus x 2
iRoll = d100();
if (iRoll>75)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
//:: Haste
iRoll = d100();
if (iRoll>=90)
{
DelayCommand(0.2, HasteImbue(oItem));
iQual+=2;
}
}
////////////////////////////////////////// Lvls 20-30 ::Monk::
if (iRange==4)
{
//:: Ability bonus x 2
iRoll = d100();
if (iRoll>75)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Damage Bonus x 3
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>75)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
//:: Haste
iRoll = d100();
if (iRoll>=85)
{
DelayCommand(0.2, HasteImbue(oItem));
iQual+=2;
}
//:: Save
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
}
////////////////////////////////////////// Lvls 30-40 ::Monk::
if (iRange==5)
{
//:: Ability bonus x 2
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, AbilityImbue(oItem, iRange));
++iQual;
}
//:: Damage Bonus x 3
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
//:: Haste
iRoll = d100();
if (iRoll>=80)
{
DelayCommand(0.2, HasteImbue(oItem));
iQual+=2;
}
//:: Save
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
}
}
else //::: Melee weapons
{
iRoll = d100();
if (iRoll <= CHANCE_WORN && iRoll > CHANCE_BROKEN && iChest != 1) //:: Chance of being worn
{
sName = ColorString("Worn "+sIName, 192, 192, 192);
SetName(oItem, sName);
SetIdentified(oItem, TRUE);
return;
}
if (iRoll<=CHANCE_BROKEN&&iChest!=1) //:: Chance of being broken
{
DelayCommand(0.2, ACimbue(oItem, iRange, 1));
sName = ColorString("Broken "+sIName, 255, 0, 0);
SetName(oItem, sName);
SetIdentified(oItem, TRUE);
return;
}
//////////////////////////////////////////// Lvls 1-5 ::Melee::
//:: Enhancement bonus
DelayCommand(0.2, WeapEnhance(oItem, iRange));
switch (iRange)
{
case 1: iQual+=1;
case 2: iQual+=1;
case 3: iQual+=2;
case 4: iQual+=2;
case 5: iQual+=3;
}
////////////////////////////////////////// Lvls 6-10 ::Melee::
if (iRange==1)
{
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>98)
{
DelayCommand(0.2, VampRegenImbue(oItem, iRange));
++iQual;
}
}
if (iRange==2)
{
//: Damage bonus
iRoll = d100();
if (iRoll>85)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
//:: Massive Crits
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, MassCritImbue(oItem, iRange));
++iQual;
}
//:: Keen bonus
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, KeenImbue(oItem));
++iQual;
}
iRoll = d100();
if (iRoll>95)
{
DelayCommand(0.2, WeapOnHit(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>95)
{
DelayCommand(0.2, VampRegenImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll > 98)
{
DelayCommand(0.2, EchobladeImbue(oItem));
iQual+=2;
}
iRoll = d100();
if (iRoll > 98)
{
DelayCommand(0.2, WoundingImbue(oItem, iRange));
iQual+=2;
}
}
////////////////////////////////////////// Lvls 11-20 ::Melee::
if (iRange==3)
{
//:: Damage bonus
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>75)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
//:: Massive Crits
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, MassCritImbue(oItem, iRange));
++iQual;
}
//:: Extra melee damage bonus
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, MeleeImbue(oItem));
++iQual;
}
//:: Keen bonus
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, KeenImbue(oItem));
++iQual;
}
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, WeapOnHit(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>95)
{
DelayCommand(0.2, VampRegenImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>97)
{
DelayCommand(0.2, EchobladeImbue(oItem));
iQual+=2;
}
iRoll = d100();
if (iRoll > 98)
{
DelayCommand(0.2, WoundingImbue(oItem, iRange));
iQual+=2;
}
}
////////////////////////////////////////// Lvls 20-30 ::Melee::
if (iRange==4)
{
//:: Damage bonus x 2
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
if (iRoll>75)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
if (iRoll>85)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
//:: Massive Crits
iRoll = d100();
if (iRoll>75)
{
DelayCommand(0.2, MassCritImbue(oItem, iRange));
++iQual;
}
//:: Extra melee damage bonus
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, MeleeImbue(oItem));
++iQual;
}
//:: Keen bonus
iRoll = d100();
if (iRoll>75)
{
DelayCommand(0.2, KeenImbue(oItem));
++iQual;
}
//:: Save
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, WeapOnHit(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>97)
{
DelayCommand(0.2, VampRegenImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>97)
{
DelayCommand(0.2, EchobladeImbue(oItem));
iQual+=2;
}
iRoll = d100();
if (iRoll > 98)
{
DelayCommand(0.2, WoundingImbue(oItem, iRange));
iQual+=2;
}
}
////////////////////////////////////////// Lvls 30-40 ::Melee::
if (iRange==5)
{
//:: Damage bonus x 3
iRoll = d100();
if (iRoll>85)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>75)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
if (iRoll>96)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
if (iRoll>97)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
if (iRoll>98)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
//:: Massive Crits
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, MassCritImbue(oItem, iRange));
++iQual;
}
//:: Extra melee damage bonus
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, MeleeImbue(oItem));
++iQual;
}
//:: Keen bonus
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, KeenImbue(oItem));
++iQual;
}
//:: Save
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, SaveImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>90)
{
DelayCommand(0.2, WeapOnHit(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>95)
{
DelayCommand(0.2, WeapOnHit(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>95)
{
DelayCommand(0.2, WeapOnHit(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>97)
{
DelayCommand(0.2, VampRegenImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>97)
{
DelayCommand(0.2, EchobladeImbue(oItem));
iQual+=2;
}
iRoll = d100();
if (iRoll > 96)
{
DelayCommand(0.2, WoundingImbue(oItem, iRange));
iQual+=2;
}
}
}
if (iQual>10)iQual=10;
if (iQual==0)iQual=1;
////////////////////////////////////////////////////////
//: Debugging
//
/*
FloatingTextStringOnCreature("ResRef: "+sType, GetFirstPC());
FloatingTextStringOnCreature("Qual: "+IntToString(iQual), GetFirstPC());
FloatingTextStringOnCreature("Range: "+IntToString(iRange), GetFirstPC());
*/
switch(iQual)
{
case 1: sName = ColorString("Magical "+sIName,255, 255, 255); break;
case 2: sName = ColorString("Mystical "+sIName, 30, 180, 30); break;
case 3: sName = ColorString("Enchanted "+sIName, 30, 180, 30); break;
case 4: sName = ColorString("Imbued "+sIName, 5, 90, 255); break;
case 5: sName = ColorString("Arcane "+sIName, 5, 90, 255); break;
case 6: sName = ColorString("Lesser Planar "+sIName, 185, 1, 200); break;
case 7: sName = ColorString("Greater Planar "+sIName, 185, 1, 200); break;
case 8: sName = ColorString("Divine "+sIName, 255, 245, 210); break;
case 9: sName = ColorString("Eldritch "+sIName, 255, 245, 210); break;
case 10: sName = ColorString("Ancient "+sIName, 180, 180, 80); break;
}
SetName(oItem, sName);
SetIdentified(oItem, FALSE);
if (GetBaseItemType(oItem) == BASE_ITEM_DOUBLEAXE)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d3(), d3(), d3(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_TWOBLADEDSWORD)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d3(), d3(), d3(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_SCYTHE)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d3(), d3(), d3(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_GREATAXE)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_HANDAXE)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_KATANA)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_RAPIER)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_HEAVYFLAIL)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_LIGHTHAMMER)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_LIGHTMACE)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_MORNINGSTAR)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_DIREMACE)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_HALBERD)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_SHORTSPEAR)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_TRIDENT)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_HEAVYCROSSBOW)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_LIGHTCROSSBOW)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_THROWINGAXE)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_DWARVENWARAXE)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d8(), d6(), d6(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_BATTLEAXE)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d8(), d6(), d6(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_BASTARDSWORD)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d6(), d6(), d6(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_DAGGER)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d6(), d6(), d6(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_SHORTSWORD)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d6(), d6(), d6(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_CLUB)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d6(), d6(), d6(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_SHORTBOW)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d6(), d6(), d6(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_GREATSWORD)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d4(), d4(), d4(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_WARHAMMER)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, Random(6) + 1, Random(6) + 1, Random(6) + 1, iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_MAGICSTAFF)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, Random(6) + 1, Random(6) + 1, Random(6) + 1, iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_LONGSWORD)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d8(), d8(), d8(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_LONGBOW)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, d8(), d8(), d8(), iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_SCIMITAR)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, Random(4) + 1, Random(4) + 1, Random(4) + 1,iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_LIGHTFLAIL)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, Random(4) + 1, Random(4) + 1, Random(4) + 1,iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
if (GetBaseItemType(oItem) == BASE_ITEM_QUARTERSTAFF)
{
DelayCommand(0.4, ChangeWeaponAppearance(oItem, Random(4) + 1, Random(4) + 1, Random(4) + 1,iRandomWeapon1, iRandomWeapon2 , iRandomWeapon3, oSack));
}
}
void DropAmmo (object oMob, object oSack, int iRange)
{
object oItem;
string sType, sName, sIName;
int iRoll = d3();
int iQual;
int iStack = d12()*5;
switch(iRoll)
{
//:: Ammo
case 1: {sType = "sdarrow"; iRoll = d3();
if (iRoll==1)sIName = "Arrow";
if (iRoll==2)sIName = "Sagitta";
if (iRoll==3)sIName = "War Arrow";}
break;
case 2: {sType = "sdbolt"; iRoll = d3();
if (iRoll==1)sIName = "Bolt";
if (iRoll==2)sIName = "Shaft";
if (iRoll==3)sIName = "Quarrel";}
break;
case 3: {sType = "sdbullet"; iRoll = d3();
if (iRoll==1)sIName = "Bullet";
if (iRoll==2)sIName = "Slug";
if (iRoll==3)sIName = "Stone";}
break;
}
oItem = CreateItemOnObject(sType, oSack, iStack);
//:: Ammo
iRoll = d100();
if (iRoll <= 10) // 10% chance of worn item ::Ammo::
{
sName = ColorString("Worn "+sIName, 192, 192, 192);
SetName(oItem, sName);
return;
}
SetIdentified(oItem, FALSE);
//////////////////////////////////////////// Lvls 1-5 ::Ammo::
if (iRange==1)
{
//:: Damage bonus
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
//++iQual; // Debugging
}
////////////////////////////////////////// Lvls 6-10 ::Ammo::
if (iRange==2)
{
//:: Damage bonus
iRoll = d100();
if (iRoll>40)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
//:: Vamp Regen bonus
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, VampRegenImbue(oItem, iRange));
++iQual;
}
}
////////////////////////////////////////// Lvls 11-20 ::Ammo::
if (iRange==3)
{
//:: Damage bonus x 2
iRoll = d100();
if (iRoll>40)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>50)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
//:: Vamp Regen bonus
iRoll = d100();
if (iRoll>70)
{
DelayCommand(0.2, VampRegenImbue(oItem, iRange));
++iQual;
}
//:: Unlim Ammo bonus
iRoll = d100();
if (iRoll>95)
{
DelayCommand(0.2, AmmoEnhance(oItem, iRange));
iQual+=2;
}
}
////////////////////////////////////////// Lvls 20-30 ::Ammo::
if (iRange==4)
{
//:: Damage bonus x 3
iRoll = d100();
if (iRoll>30)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>45)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>65)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
//:: Vamp Regen bonus
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, VampRegenImbue(oItem, iRange));
++iQual;
}
//:: Unlim Ammo bonus
iRoll = d100();
if (iRoll>85)
{
DelayCommand(0.2, AmmoEnhance(oItem, iRange));
iQual+=2;
}
}
////////////////////////////////////////// Lvls 30-40 ::Ammo::
if (iRange==5)
{
//:: Damage bonus x 4
iRoll = d100();
if (iRoll>20)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>30)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>40)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
iRoll = d100();
if (iRoll>60)
{
DelayCommand(0.2, DamageTypeImbue(oItem, iRange));
++iQual;
}
//:: Vamp Regen bonus
iRoll = d100();
if (iRoll>50)
{
DelayCommand(0.2, VampRegenImbue(oItem, iRange));
++iQual;
}
//:: Unlim Ammo bonus
iRoll = d100();
if (iRoll>80)
{
DelayCommand(0.2, AmmoEnhance(oItem, iRange));
iQual+=2;
}
}
switch(iQual)
{
case 1: sName = ColorString("Magical "+sIName,255, 255, 255); break;
case 2: sName = ColorString("Mystical "+sIName, 30, 180, 30); break;
case 3: sName = ColorString("Enchanted "+sIName, 30, 180, 30); break;
case 4: sName = ColorString("Imbued "+sIName, 5, 90, 255); break;
case 5: sName = ColorString("Arcane "+sIName, 5, 90, 255); break;
case 6: sName = ColorString("Lesser Planar "+sIName, 185, 1, 200); break;
case 7: sName = ColorString("Greater Planar "+sIName, 185, 1, 200); break;
case 8: sName = ColorString("Divine "+sIName, 255, 245, 210); break;
case 9: sName = ColorString("Eldritch "+sIName, 255, 245, 210); break;
case 10: sName = ColorString("Ancient "+sIName, 180, 180, 80); break;
}
SetName(oItem, sName);
}
void DropGem (object oMob, object oSack, int iRange)
{
object oItem;
int iRoll;
int iVal1;
int iVal2;
string sType1;
string sType2;
string sType3;
string sName, pName;
iRoll=d100();
if (iRoll<32)
oItem = CreateItemOnObject("sd_rune", oSack, 1);
else if (iRoll>32&&iRoll<65)
oItem = CreateItemOnObject("sd_rune2", oSack, 1);
else if (iRoll>65)
oItem = CreateItemOnObject("sd_rune3", oSack, 1);
SetIdentified(oItem, FALSE);
iRoll = d10();
if (iRoll==1) //:: Mass Crits
{
switch(iRange)
{
case 1:iVal1 = d3(); break; //1-3
case 2:iVal1 = d3()+1; break; //2-4
case 3:iVal1 = d4()+2; break; //3-6
case 4:iVal1 = d4()+4; break; //5-8
case 5:iVal1 = d6()+4; break; //7-10
}
if (iVal1==0)iVal1=1;
sName = "+"+IntToString(iVal1)+" Brutal Gem";
sName = ColorString(sName, 127, 255, 212 );
SetName(oItem, sName);
SetLocalString(oItem, "GEM_TYPE", "MASSIVE_CRITICAL");
SetLocalInt(oItem, "AMOUNT", iVal1);
}
else if (iRoll==2) //::: Ability rune
{
switch(iRange)
{
case 1: iVal1 = 1;break; //1
case 2: iVal1 = Random(2)+1;break; //1-2
case 3: iVal1 = d3();break; //1-3
case 4: iVal1 = d4();break; //1-4
case 5: iVal1 = d3()+1;break; //2-4
}
iRoll=d6();
switch(iRoll)
{
case 1: {sType2 = "STRENGTH_ABILITY_BONUS"; sType1=" Mighty"; break;}
case 2: {sType2 = "DEXTERITY_ABILITY_BONUS"; sType1=" Deft"; break;}
case 3: {sType2 = "WISDOM_ABILITY_BONUS"; sType1=" Wise"; break;}
case 4: {sType2 = "CONSTITUTION_ABILITY_BONUS"; sType1=" Hardy"; break;}
case 5: {sType2 = "INTELLEGENCE_ABILITY_BONUS"; sType1=" Clever"; break;}
case 6: {sType2 = "CHARISMA_ABILITY_BONUS"; sType1=" Charming"; break;}
}
if (iVal1==0)iVal1=2;
sName = "+"+IntToString(iVal1)+sType1+" Gem";
sName = ColorString(sName, 127, 255, 212 );
SetName(oItem, sName);
SetLocalString(oItem, "GEM_TYPE", sType2);
SetLocalInt(oItem, "AMOUNT", iVal1);
}
else if (iRoll==3) //:: AC rune
{
switch(iRange)
{
case 1: iVal1 = 1;break; //1
case 2: iVal1 = Random(2)+1;break; //1-2
case 3: iVal1 = d3();break; //1-3
case 4: iVal1 = d3()+2;break; //3-5
case 5: iVal1 = d3()+3;break; //4-6
}
if (iVal1==0) iVal1=1;
sName = "+"+IntToString(iVal1)+" AC Gem";
sName = ColorString(sName, 127, 255, 212 );
SetName(oItem, sName);
SetLocalString(oItem, "GEM_TYPE", "AC_BONUS");
SetLocalInt(oItem, "AMOUNT", iVal1);
}
else if (iRoll==4) //:: AB rune
{
switch(iRange)
{
case 1: iVal1 = Random(2)+1;break; //1-2
case 2: iVal1 = d3();break; //1-3
case 3: iVal1 = d3()+1;break; //2-4
case 4: iVal1 = d3()+2;break; //3-5
case 5: iVal1 = d4()+3;break; //4-6
}
if (iVal1==0) iVal1=2;
sName = "+"+IntToString(iVal1)+" Attack Gem";
sName = ColorString(sName, 127, 255, 212 );
SetName(oItem, sName);
SetLocalString(oItem, "GEM_TYPE", "ATTACK_BONUS");
SetLocalInt(oItem, "AMOUNT", iVal1);
}
else if (iRoll==5) //:: Enhancement rune
{
switch(iRange)
{
case 1: iVal1 = Random(2)+1;break; //1-2
case 2: iVal1 = d3();break; //1-3
case 3: iVal1 = d3()+1;break; //2-4
case 4: iVal1 = d3()+2;break; //3-5
case 5: iVal1 = d3()+3;break; //4-6
}
if (iVal1==0)iVal1=2;
sName = "+"+IntToString(iVal1)+" Enhancement Gem";
sName = ColorString(sName, 127, 255, 212 );
SetName(oItem, sName);
SetLocalString(oItem, "GEM_TYPE", "ENHANCEMENT_BONUS");
SetLocalInt(oItem, "AMOUNT", iVal1);
}
else if (iRoll==6) //:: Damage rune
{
switch(iRange)
{
case 1:
{
iRoll=d3();
if (iRoll==1)iVal1 = 1;
if (iRoll==2)iVal1 = 2;
if (iRoll==3)iVal1 = 3;
}
break;
case 2:
{
iRoll=d4();
if (iRoll==1)iVal1 = 1;
if (iRoll==2)iVal1 = 2;
if (iRoll==3)iVal1 = 3;
if (iRoll==4)iVal1 = 4;
}
break;
case 3:
{
iRoll=d6();
if (iRoll==1)iVal1 = 2;
if (iRoll==2)iVal1 = 2;
if (iRoll==3)iVal1 = 3;
if (iRoll==4)iVal1 = 4;
if (iRoll==5)iVal1 = 5;
if (iRoll==6)iVal1 = 6;
}
break;
case 4:
{
iRoll=d8();
if (iRoll==1)iVal1 = 3;
if (iRoll==2)iVal1 = 3;
if (iRoll==3)iVal1 = 4;
if (iRoll==4)iVal1 = 4;
if (iRoll==5)iVal1 = 5;
if (iRoll==6)iVal1 = 5;
if (iRoll==7)iVal1 = 6;
if (iRoll==8)iVal1 = 6;
}
break;
case 5:
{
iRoll=d10();
if (iRoll==1)iVal1 = 2;
if (iRoll==2)iVal1 = 2;
if (iRoll==3)iVal1 = 3;
if (iRoll==4)iVal1 = 4;
if (iRoll==5)iVal1 = 4;
if (iRoll==6)iVal1 = 5;
if (iRoll==7)iVal1 = 5;
if (iRoll==8)iVal1 = 6;
if (iRoll==9)iVal1 = 7;
if (iRoll==10)iVal1 = 8;
}
break;
}
iRoll = d12();
switch (iRoll)
{
case 1: {sType2 = "ACID_DAMAGE_BONUS"; sType1 = "Corrosive Gem"; break;}
case 2: {sType2 = "BLUDGEONING_DAMAGE_BONUS"; sType1 = "Thumping Gem"; break;}
case 3: {sType2 = "COLD_DAMAGE_BONUS"; sType1 = "Ice Gem"; break;}
case 4: {sType2 = "DIVINE_DAMAGE_BONUS";sType1 = "Holy Gem"; break;}
case 5: {sType2 = "ELECTIRCAL_DAMAGE_BONUS";sType1 = "Zapping Gem"; break;}
case 6: {sType2 = "FIRE_DAMAGE_BONUS"; sType1 = "Scorching Gem"; break;}
case 7: {sType2 = "MAGICAL_DAMAGE_BONUS"; sType1 = "Magical Gem"; break;}
case 8: {sType2 = "NEGATIVE_DAMAGE_BONUS"; sType1 = "Evil Gem"; break;}
case 9: {sType2 = "PIERCING_DAMAGE_BONUS"; sType1 = "Impaling Gem"; break;}
case 10: {sType2 = "POSITIVE_DAMAGE_BONUS"; sType1 = "Benevolent Gem"; break;}
case 11: {sType2 = "SLASHING_DAMAGE_BONUS"; sType1 = "Slicing Gem"; break;}
case 12: {sType2 = "SONIC_DAMAGE_BONUS"; sType1 = "Booming Gem"; break;}
}
if (iVal1==0)iVal1=2;
sName = "+"+IntToString(iVal1)+" "+sType1;
sName = ColorString(sName, 127, 255, 212 );
SetName(oItem, sName);
SetLocalString(oItem, "GEM_TYPE", sType2);
SetLocalInt(oItem, "AMOUNT", iVal1);
}
else if (iRoll==7) //:: VampRegen
{
iRoll = d4();
sType1 = "VAMPIRIC_REGENERATION";
switch(iRange)
{
case 1: iVal1 = 1;break; //1
case 2: iVal1 = Random(2)+1;break; //1-2
case 3: iVal1 = d3();break; //1-3
case 4: iVal1 = d3()+1;break; //2-4
case 5: iVal1 = d3()+2;break; //3-5
}
sName = "+"+IntToString(iVal1)+" Vamp Regen Gem";
sName = ColorString(sName, 127, 255, 212 );
SetName(oItem, sName);
SetLocalString(oItem, "GEM_TYPE", "VAMPIRIC_REGENERATION");
SetLocalInt(oItem, "AMOUNT", iVal1);
}
else if (iRoll==8) //:: Misc
{
switch(iRange)
{
case 1:
{
iRoll = d6();
if (iRoll==1){sType1 = "Benign"; sType2 = "Cracked";}
if (iRoll==2){sType1 = "Benign"; sType2 = "Cracked";}
if (iRoll==3){sType1 = "KEEN"; sType2 = "Deadly";}
if (iRoll==4){sType1 = "HASTE"; sType2 = "Speedy";}
if (iRoll==5){sType1 = "FREEDOM"; sType2 = "Unstoppable";}
if (iRoll==6){sType1 = "Benign"; sType2 = "Cracked";}
}
break;
case 2:
{
iRoll = d6();
if (iRoll==1){sType1 = "HOLY_AVENGER"; sType2 = "Vengeful";}
if (iRoll==2){sType1 = "FREEDOM"; sType2 = "Unstoppable";}
if (iRoll==3){sType1 = "HASTE"; sType2 = "Speedy";}
if (iRoll==4){sType1 = "KEEN"; sType2 = "Deadly";}
if (iRoll==5){sType1 = "Benign"; sType2 = "Cracked";}
if (iRoll==6){sType1 = "Benign"; sType2 = "Cracked";}
}
break;
case 3:
{
iRoll = d6();
if (iRoll==1){sType1 = "HOLY_AVENGER"; sType2 = "Vengeful";}
if (iRoll==2){sType1 = "KEEN"; sType2 = "Deadly";}
if (iRoll==3){sType1 = "FREEDOM"; sType2 = "Unstoppable";}
if (iRoll==4){sType1 = "IMPROVED_EVASION"; sType2 = "Slippery";}
if (iRoll==5){sType1 = "HOLY_AVENGER"; sType2 = "Vengeful";}
if (iRoll==6){sType1 = "HASTE"; sType2 = "Speedy";}
}
break;
case 4:
{
iRoll = d6();
if (iRoll==1){sType1 = "HOLY_AVENGER"; sType2 = "Vengeful";}
if (iRoll==2){sType1 = "KEEN"; sType2 = "Deadly";}
if (iRoll==3){sType1 = "FREEDOM"; sType2 = "Unstoppable";}
if (iRoll==4){sType1 = "IMPROVED_EVASION"; sType2 = "Slippery";}
if (iRoll==5){sType1 = "HASTE"; sType2 = "Speedy";}
if (iRoll==6){sType1 = "HASTE"; sType2 = "Speedy";}
}
break;
case 5:
{
iRoll = d6();
if (iRoll==1){sType1 = "KEEN"; sType2 = "Deadly";}
if (iRoll==2){sType1 = "KEEN"; sType2 = "Deadly";}
if (iRoll==3){sType1 = "FREEDOM"; sType2 = "Unstoppable";}
if (iRoll==4){sType1 = "IMPROVED_EVASION"; sType2 = "Slippery";}
if (iRoll==5){sType1 = "HASTE"; sType2 = "Speedy";}
if (iRoll==6){sType1 = "TRUE_SEEING"; sType2 = "Ocular";}
}
break;
}
pName = sType2+" Gem";
if (sType2=="Cracked")
{
sName = ColorString(pName, 255, 0, 0);
SetName(oItem, sName);
SetIdentified(oItem, TRUE);
return;
}
else sName = ColorString(pName, 127, 255, 212 );
SetName(oItem, sName);
SetLocalString(oItem, "GEM_TYPE", sType1);
}
else if (iRoll==9) //:: Regen
{
iRoll = d4();
sType1 = "REGENERATION";
switch(iRange)
{
case 1: iVal1 = 1;break; //1
case 2: iVal1 = Random(2)+1;break; //1-2
case 3: iVal1 = d3();break; //1-3
case 4: iVal1 = d3()+1;break; //2-4
case 5: iVal1 = d3()+2;break; //3-5
}
sName = "+"+IntToString(iVal1)+" Regeneration Gem";
sName = ColorString(sName, 127, 255, 212 );
SetName(oItem, sName);
SetLocalString(oItem, "GEM_TYPE", "REGENERATION");
SetLocalInt(oItem, "AMOUNT", iVal1);
}
else if (iRoll==10) //:: Damage rune
{
switch(iRange)
{
case 1: iVal1 = 5;break; // -/5 res
case 2: iVal1 = 5;break; // -/5 res
case 3: iVal1 = 10;break; // -/10 res
case 4: iVal1 = 15;break; // -/15 res
case 5: iVal1 = 20;break; // -/20 res
}
iRoll = d12();
switch (iRoll)
{
case 1: {sType2 = "ACID_DAMAGE_RESISTANCE"; sType1 = "Alkaline Gem"; break;}
case 2: {sType2 = "BLUDGEONING_DAMAGE_RESISTANCE"; sType1 = "Solid Gem"; break;}
case 3: {sType2 = "COLD_DAMAGE_RESISTANCE"; sType1 = "Warm Gem"; break;}
case 4: {sType2 = "DIVINE_DAMAGE_RESISTANCE";sType1 = "Absolution Gem"; break;}
case 5: {sType2 = "ELECTRICAL_DAMAGE_RESISTANCE";sType1 = "Grounding Gem"; break;}
case 6: {sType2 = "FIRE_DAMAGE_RESISTANCE"; sType1 = "Cool Gem"; break;}
case 7: {sType2 = "MAGICAL_DAMAGE_RESISTANCE"; sType1 = "Mantle Gem"; break;}
case 8: {sType2 = "NEGATIVE_DAMAGE_RESISTANCE"; sType1 = "Bright Gem"; break;}
case 9: {sType2 = "PIERCING_DAMAGE_RESISTANCE"; sType1 = "Shell Gem"; break;}
case 10: {sType2 = "POSITIVE_DAMAGE_RESISTANCE"; sType1 = "Malevolent Gem"; break;}
case 11: {sType2 = "SLASHING_DAMAGE_RESISTANCE"; sType1 = "Mesh Gem"; break;}
case 12: {sType2 = "SONIC_DAMAGE_RESISTANCE"; sType1 = "Dampening Gem"; break;}
}
if (iVal1==0)iVal1=2;
sName = "-/"+IntToString(iVal1)+" "+sType1;
sName = ColorString(sName, 127, 255, 212 );
SetName(oItem, sName);
SetLocalString(oItem, "GEM_TYPE", sType2);
SetLocalInt(oItem, "AMOUNT", iVal1);
}
}
void DropEpicSpellSeed(object oMob, object oSack)
{//:: Start DropEpicSpellSeed()
int iEpic = GetIsEpicSpellcaster(oMob);
string sItem;
if(iEpic > 1)
return;
int nESS = Random(29)+1;
switch (nESS)
{
case 1: sItem = "epic_sp_unseenwa"; break; // Epic Spell Unseen Wanderer
case 2: sItem = "epic_sd_afflict"; break; // Epic Spell Seed Afflict
case 3: sItem = "epic_sd_animate"; break; // Epic Spell Seed Animate
case 4: sItem = "epic_sd_animdead"; break; // Epic Spell Seed Animate Dead
case 5: sItem = "epic_sd_armor"; break; // Epic Spell Seed Armor
case 6: sItem = "epic_sd_banish"; break; // Epic Spell Seed Banish
case 7: sItem = "epic_sd_compel"; break; // Epic Spell Seed Compel
case 8: sItem = "epic_sd_conceal"; break; // Epic Spell Seed Conceal
case 9: sItem = "epic_sd_conjure"; break; // Epic Spell Seed Conjure
case 10: sItem = "epic_sd_contact"; break; // Epic Spell Seed Contact
case 11: sItem = "epic_sd_delude"; break; // Epic Spell Seed Delude
case 12: sItem = "epic_sd_destroy"; break; // Epic Spell Seed Destroy
case 13: sItem = "epic_sd_dispel"; break; // Epic Spell Seed Dispel
case 14: sItem = "epic_sd_energy"; break; // Epic Spell Seed Energy
case 15: sItem = "epic_sd_foresee"; break; // Epic Spell Seed Foresee
case 16: sItem = "epic_sd_fortify"; break; // Epic Spell Seed Forify
case 17: sItem = "epic_sd_heal"; break; // Epic Spell Seed Heal
case 18: sItem = "epic_sd_life"; break; // Epic Spell Seed Life
case 19: sItem = "epic_sd_light"; break; // Epic Spell Seed Light
case 20: sItem = "epic_sd_oppos"; break; // Epic Spell Seed Opposition
case 21: sItem = "epic_sd_reflect"; break; // Epic Spell Seed Reflect
case 22: sItem = "epic_sd_reveal"; break; // Epic Spell Seed Reveal
case 23: sItem = "epic_sd_shadow"; break; // Epic Spell Seed Shadow
case 24: sItem = "epic_sd_slay"; break; // Epic Spell Seed Slay
case 25: sItem = "epic_sd_summon"; break; // Epic Spell Seed Summon
case 26: sItem = "epic_sd_time"; break; // Epic Spell Seed Time
case 27: sItem = "epic_sd_transfrm"; break; // Epic Spell Seed Transform
case 28: sItem = "epic_sd_transprt"; break; // Epic Spell Seed Transport
case 29: sItem = "epic_sd_ward"; break; // Epic Spell Seed Ward
}
if ((GetLocalInt(GetModule(), "LOOT_DEBUG") > 0 ))
{
SpeakString("DropEpicSpellSeed()");
SpeakString("Item rolled case "+IntToString(nESS)+" sItem "+sItem);
}
object oItem = CreateItemOnObject("sItem", oSack, 1);
}
void DropEpicSpellBook(object oMob, object oSack)
{//:: Start DropEpicSpellBook()
int iEpic = GetIsEpicSpellcaster(oMob);
if(iEpic > 1)
return;
string sItem;
int nESB = Random(60)+1;
switch (nESB)
{
case 1: sItem = "epic_sp_audstone"; break; // Epic Spell Audience of Stone
case 2: sItem = "epic_sp_achilles"; break; // Epic Spell Achilles Heel
case 3: sItem = "epic_sp_allmart"; break; // Epic Spell Allied Martyr
case 4: sItem = "epic_sp_allhope"; break; // Epic Spell All Hope Lost
case 5: sItem = "epic_sp_anarchy"; break; // Epic Spell Anarchy's Call
case 6: sItem = "epic_sp_animblas"; break; // Epic Spell Animus Blast
case 7: sItem = "epic_sp_animbliz"; break; // Epic Spell Animus Blizzard
case 8: sItem = "epic_sp_armyunfa"; break; // Epic Spell Army Unfallen
case 9: sItem = "epic_sp_batbound"; break; // Epic Spell Battle Bounding
case 10: sItem = "epic_sp_champval"; break; // Epic Spell Champion's Valor
case 11: sItem = "epic_sp_contresu"; break; // Epic Spell Contingent Resurrection
case 12: sItem = "epic_sp_contreun"; break; // Epic Spell Contingent Reunion
case 13: sItem = "epic_sp_deadeyes"; break; // Epic Spell Deadeye Sense
case 14: sItem = "epic_sp_dreamscp"; break; // Epic Spell Dreamscape
case 15: sItem = "epic_sp_deathmrk"; break; // Epic Spell Deathmark
case 16: sItem = "epic_sp_dullblad"; break; // Epic Spell Dullblades
case 17: sItem = "epic_sp_dweomert"; break; // Epic Spell Dweomer Thief
case 18: sItem = "epic_sp_enslave"; break; // Epic Spell Enslave
case 19: sItem = "epic_sp_epmagarm"; break; // Epic Spell Epic Mage Armor
case 20: sItem = "epic_sp_eprepuls"; break; // Epic Spell Epic Repulsion
case 21: sItem = "epic_sp_epspellr"; break; // Epic Spell Epic Spell Reflection
case 22: sItem = "epic_sp_epwardin"; break; // Epic Spell Epic Warding
case 23: sItem = "epic_sp_eterfree"; break; // Epic Spell Eternal Freedom
case 24: sItem = "epic_sp_fleetnes"; break; // Epic Spell Fleetness of Foot
case 25: sItem = "epic_sp_greatrui"; break; // Epic Spell Greater Ruin
case 26: sItem = "epic_sp_grspellr"; break; // Epic Spell Greater Spell Resistance
case 27: sItem = "epic_sp_grtimest"; break; // Epic Spell Greater Timestop
case 28: sItem = "epic_sp_hellball"; break; // Epic Spell Hellball
case 29: sItem = "epic_sp_hellsend"; break; // Epic Spell Hell Send
case 30: sItem = "epic_sp_hercalli"; break; // Epic Spell Herculean Alliance
case 31: sItem = "epic_sp_hercempo"; break; // Epic Spell Herculean Empowerment
case 32: sItem = "epic_sp_impenetr"; break; // Epic Spell Impenetrability
case 33: sItem = "epic_sp_leechfie"; break; // Epic Spell Leech Field
case 34: sItem = "epic_sp_legendar"; break; // Epic Spell Legendary Artisan
case 35: sItem = "epic_sp_lifeforc"; break; // Epic Spell Life Force Transfer
case 36: sItem = "epic_sp_magmabur"; break; // Epic Spell Magma Burst
case 37: sItem = "epic_sp_momentom"; break; // Epic Spell Momento Mori
case 38: sItem = "epic_sp_mummdust"; break; // Epic Spell Mummy Dust
case 39: sItem = "epic_sp_nailedsk"; break; // Epic Spell Nailed to the Sky
case 40: sItem = "epic_sp_nightsun"; break; // Epic Spell Night's Undoing
case 41: sItem = "epic_sp_orderres"; break; // Epic Spell Order Restored
case 42: sItem = "epic_sp_pathsbec"; break; // Epic Spell Paths Become Known
case 43: sItem = "epic_sp_peerless"; break; // Epic Spell Peerless Penitence
case 44: sItem = "epic_sp_pestilen"; break; // Epic Spell Pestilence
case 45: sItem = "epic_sp_planarce"; break; // Epic Spell Planar Cell
case 46: sItem = "epic_sp_psionics"; break; // Epic Spell Psionic Salvo
case 47: sItem = "epic_sp_risenreu"; break; // Epic Spell Risen Reunited
case 48: sItem = "epic_sp_ruin"; break; // Epic Spell Ruin
case 49: sItem = "epic_sp_singsund"; break; // Epic Spell Singular Sunder
case 50: sItem = "epic_sp_spelworm"; break; // Epic Spell Spell Worm
case 51: sItem = "epic_sp_stormman"; break; // Epic Spell Storm Mantle
case 52: sItem = "epic_sp_summaber"; break; // Epic Spell Summon Aberration
case 53: sItem = "epic_sp_superbdi"; break; // Epic Spell Superb Dispelling
case 54: sItem = "epic_sp_symrusta"; break; // Epic Spell Symrustar's Spellbinding
case 55: sItem = "epic_sp_thewithe"; break; // Epic Spell The Withering
case 56: sItem = "epic_sp_tolodine"; break; // Epic Spell Tolodine's Killing Wind
case 57: sItem = "epic_sp_transvit"; break; // Epic Spell Transcendent Vitality
case 58: sItem = "epic_sp_twinfien"; break; // Epic Spell Twinfiend
case 59: sItem = "epic_sp_unholydi"; break; // Epic Spell Unholy Disciple
case 60: sItem = "epic_sp_unimping"; break; // Epic Spell Unimpinged
}
if ((GetLocalInt(GetModule(), "LOOT_DEBUG") > 0 ))
{
SpeakString("DropEpicSpellBook()");
SpeakString("Item rolled case "+IntToString(nESB)+" sItem "+sItem);
}
object oItem = CreateItemOnObject("sItem", oSack, 1);
}
void sd_droploot (object oMob, object oSack)
{
object oKiller = GetLastKiller();
//effect eVFX = EffectVisualEffect(VFX_IMP_REMOVE_CONDITION);
//effect eDust = EffectVisualEffect(VFX_IMP_DUST_EXPLOSION);
effect eLink /* = EffectLinkEffects(eVFX, eDust) */;
// no loot if spawned in Ascension
// chances are it was an uber guard
// and not the PC that did the killing.
// This is to prevent easy looting higher mobs
if (GetTag(GetArea(oMob))=="TownofAscension") return;
if (GetTag(GetArea(oMob))=="TrespassersTavern") return;
if (GetClassByPosition(1, oMob) == CLASS_TYPE_COMMONER) return;
// animals dont usually carry wares - but you can skin em!
// This is to prevent tiny rats dropping full plate mail - can't have that!
/////////////////////////////////////////
//::Droprate config::
//
int DamBroke = 0;
int lMod, mMod;
// adjust the droprate modifIer based on game difficulty
// if there is no game difficulty: Default to normal
int iDiff = GetLocalInt(GetModule(), "sd_game_diff");
if (iDiff==0)lMod = DROP_RATE; //default
if (iDiff==1)lMod = DROP_RATE;
if (iDiff==2)lMod = DROP_RATE;
// Make monk gloves a rare drop except when the player is a lvl 5+ monk
if (GetHasFeat(FEAT_SUPERIOR_UNARMED_STRIKE, oKiller)) mMod = 4;
if (GetLevelByClass(CLASS_TYPE_MONK, oKiller)>5||
GetLevelByClass(CLASS_TYPE_MONK, GetMaster(oKiller))>5)mMod = 8;
else mMod=lMod-1;
//:: Bosses have high chance to drop loot (never broken or worn)
if (GetLocalInt(oMob, "BOSS")==1){lMod = 85; DamBroke = 1;}
int WeapChance = 1; // % chance to drop a weapon
int MonkChance = 1; // % chance to drop monk gloves
int SockChance = 1; // % chance to drop a socketed item
int ArmorChance = 1; // % chance to drop armor or a shield
int MItemChance = 1; // % chance to drop a magic item
int RodWandChance = 1; // % chance to drop a wand/rod item
int AmmoChance = 1; // % chance to drop a bolt or an arrow
int GoldChance = 0; // % chance to drop some gold
int PotChance = 1; // % chance to drop a potion
int ScrollChance = 1; // % chance to drop a magic scroll
int GemChance = lMod; // % chance to drop a socket gem
int MiscChance = 1; // % chance to drop a miscellaneous item
int SetItemChance = 1; // % chance to drop a class item setpiece
int AlchemyChance = 1;
int EpicSpellSeedChance = 1;
int EpicSpellBookChance = 1;
//
//
/////////////////////////////////////////////////
//::initiate variables:: //
int iDice;
int iHD = GetHitDice(oMob);
int iRange;
int iMage;
/////////////////////////////////////////////////
//:: only casters drop scrolls, wands and rods
if (GetLevelByClass(CLASS_TYPE_DRUID)>0||GetLevelByClass(CLASS_TYPE_BARD)>0
||GetLevelByClass(CLASS_TYPE_CLERIC)>0||GetLevelByClass(CLASS_TYPE_SORCERER)>0
||GetLevelByClass(CLASS_TYPE_WIZARD)>0) iMage=1;
/////////////////////////////////////////////////
//:: Quality range based on level of monster::
if (iHD > 0 && iHD < 11)iRange=1; // lvl 1-10
if (iHD > 10 && iHD < 19)iRange=2; // lvl 11-18
if (iHD > 18 && iHD < 28)iRange=3; // lvl 19-27
if (iHD > 27 && iHD < 36)iRange=4; // lvl 28-35
if (iHD > 35 /* && iHD < 61 */)iRange=5; // lvl 36-40
//:: Chance of a more powerful item
if (LUCK_CHANCE>0)
{
iDice = Random(LUCK_CHANCE);
if (iDice==LUCK_CHANCE){++iRange; if (iRange==6)iRange=5;}
}
///////////////////
//:Debugging
//:
// FloatingTextStringOnCreature("* Luck has favoured you *", GetFirstPC());}
////////////////////////////////////////////////
//:: Gold Roll
iDice = d100();
if (iDice<GoldChance+1)
{
DropGold(oMob, oSack, DamBroke);
}
if (iDice<GoldChance+1)
{
FloatingTextStringOnCreature("Your defeated foe has dropped gold!", oKiller);
}
if (iDice<GoldChance+1)
{
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eLink, GetLocation(oSack));
}
//:: Rod/Wand Roll
iDice = d100();
if (iDice<RodWandChance+1)
{
DropRodWand(oMob, oSack);
}
if (iDice<RodWandChance+1)
{
FloatingTextStringOnCreature("Your defeated foe has dropped a wand!", oKiller);
}
if (iDice<RodWandChance+1)
{
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eLink, GetLocation(oSack));
}
// SetItem Roll ** Comming Soon **
//iDice = d100();
//if (iDice<SetItemChance+1)DropSetItem(oMob, oSack);
//:: Weapon Roll
iDice = d100();
if (iDice < WeapChance+1)
{
DropWeapon(oMob, oSack, iRange, SockChance, DamBroke);
FloatingTextStringOnCreature("Your defeated foe has dropped a weapon!", oKiller);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eLink, GetLocation(oSack));
}
//:: Monk Gloves Roll
iDice = d100();
if (iDice<MonkChance + 1)
{
DropMonkGloves(oMob, oSack, iRange, SockChance, DamBroke);
FloatingTextStringOnCreature("Your defeated foe has dropped gloves!", oKiller);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eLink, GetLocation(oSack));
}
//:: Armor or shield Roll
iDice = d100();
if (iDice < ArmorChance + 1)
{
iDice = d100();
if (iDice>59)DropShield(oMob, oSack, iRange, SockChance, DamBroke);
else DropArmor(oMob, oSack, iRange, SockChance, DamBroke);
if (iDice<ArmorChance+1) FloatingTextStringOnCreature("Your defeated foe has dropped armor!", oKiller);
if (iDice<ArmorChance+1) ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eLink, GetLocation(oSack));
if (iDice>59) FloatingTextStringOnCreature("Your defeated foe has dropped armour!", oKiller);
if (iDice>59) ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eLink, GetLocation(oSack));
}
//:: Magic Item Roll
iDice = d100();
if (iDice < MItemChance + 1)
{
DropMagicItem(oMob, oSack, iRange, SockChance, DamBroke);
FloatingTextStringOnCreature("Your defeated foe has dropped a magic item!", oKiller);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eLink, GetLocation(oSack));
}
//:: Misc Item Roll
iDice = d100();
if (iDice < MiscChance + 1)
{
DropMisc(oMob, oSack);
FloatingTextStringOnCreature("Your defeated foe has dropped an artifact!", oKiller);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eLink, GetLocation(oSack));
}
//:: Ranged Ammo Roll
iDice = d100();
if (iDice < AmmoChance + 1)
{
DropAmmo(oMob, oSack, iRange);
FloatingTextStringOnCreature("Your defeated foe has dropped ranged ammunition!", oKiller);
}
//:: Potion Roll
iDice = d100();
if (iDice < PotChance + 1)
{
DropPotion(oMob, oSack);
FloatingTextStringOnCreature("Your defeated foe has dropped a potion!", oKiller);
}
//:: Scroll Roll
iDice = d100();
if (iDice < ScrollChance + 1)
{
DropScroll(oMob, oSack, iRange);
FloatingTextStringOnCreature("Your defeated foe has dropped a scroll!", oKiller);
}
//:: Alchemical Item Roll
iDice = d100();
if (iDice < AlchemyChance + 1)
{
DropAlchemy(oMob, oSack, iRange);
}
//:: Epic Spell Seed Item Roll
iDice = d100();
if(iRange > 3)
{
if (iDice < EpicSpellSeedChance + 1)
{
DropEpicSpellSeed(oMob, oSack);
FloatingTextStringOnCreature("Your defeated foe has dropped an epic spell seed!", oKiller);
}
}
//:: Epic Book Book Item Roll
iDice = d100();
if(iRange > 4)
{
if (iDice < EpicSpellBookChance + 1)
{
DropEpicSpellBook(oMob, oSack);
FloatingTextStringOnCreature("Your defeated foe has dropped an epic spell book!", oKiller);
}
}
}
void sd_dropboss(object oMob, object oSack)
{
object oKiller = GetLastKiller();
//:: Early exit if mob is killed in Stonewatch to prevent looting high-end mobs easily
if (GetTag(GetArea(oMob)) == "Stonewatch") return;
//:: Droprate configuration
int DamBroke = 0;
int lMod = DROP_RATE; // Default drop rate
int mMod; // Modifyer for monk gloves drop rareness
//:: Determine the game difficulty modifier
int iDiff = GetLocalInt(GetModule(), "sd_game_diff");
if(iDiff > 0) lMod = DROP_RATE; // No change needed if not default because all set to same
//:: Make monk gloves a rare drop unless the player/Master is a lvl 5+ monk
if (GetLevelByClass(CLASS_TYPE_MONK, oKiller) > 5 || GetLevelByClass(CLASS_TYPE_MONK, GetMaster(oKiller)) > 5)
mMod = 8;
else
mMod = lMod - 1;
//:: Boss specific settings
if (GetLocalInt(oMob, "BOSS") == 1)
{
lMod = 85; // Higher chance for bosses
DamBroke = 1; // Boss items are never broken or worn
}
//:: Droprate chances initialization
int WeapChance = 5;
int MonkChance = 3;
int SockChance = 1;
int ArmorChance = 5;
int MItemChance = 3;
int RodWandChance = 1;
int AmmoChance = 1;
int GoldChance = 100;
int PotChance = 65;
int ScrollChance = 45;
int GemChance = 1;
int MiscChance = 1;
int SetItemChance = 1;
int AlchemyChance = 1;
int EpicSpellSeedChance = 1;
int EpicSpellBookChance = 1;
//:: Determine quality range based on monster level
int iHD = GetHitDice(oMob);
int iRange = (iHD + 9) / 10; // This formula directly computes the range from HD
if (iRange > 5) iRange = 5; // Cap the range at 5
//:: Chance of a more powerful item based on luck
if (LUCK_CHANCE > 0 && Random(LUCK_CHANCE) == LUCK_CHANCE - 1)
iRange = iRange < 5 ? iRange + 1 : 5;
//:: Only casters drop scrolls, wands, and rods
int iMage = GetLevelByClass(CLASS_TYPE_DRUID, oMob) > 0 || GetLevelByClass(CLASS_TYPE_BARD, oMob) > 0 ||
GetLevelByClass(CLASS_TYPE_CLERIC, oMob) > 0 || GetLevelByClass(CLASS_TYPE_SORCERER, oMob) > 0 ||
GetLevelByClass(CLASS_TYPE_WIZARD, oMob) > 0 ? 1 : 0;
//:: Drop functions based on the outcome of random chances
int iDice;
//:: Gold Drop
iDice = d20();
if (iDice < GoldChance + 1)
DropGold(oMob, oSack, DamBroke);
//:: Rod/Wand Drop, only for casters
if (iMage)
{
iDice = d100();
if (iDice < RodWandChance + 1)
DropRodWand(oMob, oSack);
}
//:: Weapon Drop
iDice = d10();
if (iDice < WeapChance + 1)
DropWeapon(oMob, oSack, iRange, SockChance, DamBroke);
//:: Monk Gloves Drop
iDice = d20();
if (iDice < MonkChance + 1)
DropMonkGloves(oMob, oSack, iRange, SockChance, DamBroke);
//:: Armor or Shield Drop
iDice = d20();
if (iDice < ArmorChance + 1)
{
iDice = d100();
if (iDice > 59)
DropShield(oMob, oSack, iRange, SockChance, DamBroke);
else
DropArmor(oMob, oSack, iRange, SockChance, DamBroke);
}
//:: Magic Item Drop
iDice = d20();
if (iDice < MItemChance + 1)
DropMagicItem(oMob, oSack, iRange, SockChance, DamBroke);
//:: Misc Item Drop
iDice = d100();
if (iDice < MiscChance + 1)
DropMisc(oMob, oSack);
//:: Ranged Ammo Drop
iDice = d100();
if (iDice < AmmoChance + 1)
DropAmmo(oMob, oSack, iRange);
//:: Potion Drop
iDice = d100();
if (iDice < PotChance + 1)
DropPotion(oMob, oSack);
//:: Scroll Drop
iDice = d100();
if (iDice < ScrollChance + 1)
DropScroll(oMob, oSack, iRange);
//:: Alchemical Item Roll
iDice = d100();
if (iDice < AlchemyChance+1)
{
DropAlchemy(oMob, oSack, iRange);
}
//:: Epic Spell Seed Item Roll
iDice = d100();
if (iDice < EpicSpellSeedChance + 1)
{
DropEpicSpellSeed(oMob, oSack);
}
//:: Epic Book Book Item Roll
if (iMage)
{
iDice = d100();
if (iDice < EpicSpellBookChance + 1)
{
DropEpicSpellBook(oMob, oSack);
}
}
}
void wk_chestloot (object oSack)
{
object oKiller = GetLastUsedBy();
object oMob = GetLastUsedBy();
/////////////////////////////////////////
//::Droprate config::
//
int DamBroke = 0;
int lMod;
lMod = DROP_RATE; //default
/////////////////////////////////////////////////
//::initiate variables:: //
int iDice;
int iHD = GetLocalInt(OBJECT_SELF,"BossLoot");
int iRange = iHD;
int iMage;
// Bosses have high chance to drop loot (never broken or worn)
lMod = lMod + iHD;
int WeapChance = 3+lMod; // % chance to drop a weapon
int SockChance = 1; // % chance to drop a socketed item
int ArmorChance = 2+lMod; // % chance to drop armor or a shield
int MItemChance = 2+lMod; // % chance to drop a magic item
int RodWandChance = 1+lMod; // % chance to drop a wand/rod item
int AmmoChance = 1+lMod; // % chance to drop a bolt or an arrow
int GoldChance = 46+lMod; // % chance to drop some gold
int PotChance = 1+lMod; // % chance to drop a potion
int ScrollChance = 1+lMod; // % chance to drop a magic scroll
int GemChance = lMod; // % chance to drop a socket gem
int MiscChance = 1; // % chance to drop a miscellaneous item
int SetItemChance = 1; // % chance to drop a class item setpiece
int AlchemyChance = 1+lMod;
//:: Chance of a more powerful item
if (LUCK_CHANCE>0)
{
iDice = Random(LUCK_CHANCE);
if (iDice == 1) iRange++;
if (iRange > 5) iRange=5;
}
////////////////////////////////////////////////
// Cycle through the various drops until the number of items for the boss are
// all dropped. This guarantees that each boss level will be distinct.
// Note that the luck chance to increase the value of the loot does not
// affect the number of items to drop.
// Rod/Wand Roll
iDice = d100();
if (iDice<RodWandChance+1)DropRodWand(oMob, oSack);
// SetItem Roll ** Comming Soon **
//iDice = d100();
//if (iDice<SetItemChance+1)DropSetItem(oMob, oSack);
// Weapon Roll
iDice = d20();
if (iDice<WeapChance+1)DropWeapon(oMob, oSack, iRange, SockChance, DamBroke);
// Armor or shield Roll
iDice = d20();
if (iDice < ArmorChance+1)
{
iDice = d100();
if (iDice>69)
{
DropShield(oMob, oSack, iRange, SockChance, DamBroke);
}
else
{
DropArmor(oMob, oSack, iRange, SockChance, DamBroke);
}
}
// Magic Item Roll
iDice = d20();
if (iDice<MItemChance+1)DropMagicItem(oMob, oSack, iRange, SockChance, DamBroke);
// Misc Item Roll
iDice = d100();
if (iDice<MiscChance+1)DropMisc(oMob, oSack);
// Ranged Ammo Roll
iDice = d100();
if (iDice<AmmoChance+1)DropAmmo(oMob, oSack, iRange);
// Pot Roll
iDice = d20();
if (iDice<PotChance+1)DropPotion(oMob, oSack);
// Pot Roll
iDice = d20();
if (iDice<PotChance+1)DropPotion(oMob, oSack);
// Scroll Roll
iDice = d100();
if (iDice<ScrollChance+1)DropScroll(oMob, oSack, iRange);
// Alchemical Item Roll
iDice = d100();
if (iDice < AlchemyChance+1) DropAlchemy(oMob, oSack, iRange);
}
void hy_barrelloot (object oSack)
{
object oKiller = GetLastUsedBy();
object oMob = GetLastUsedBy();
/////////////////////////////////////////
//::Droprate config::
//
int DamBroke = 0;
int lMod;
lMod = DROP_RATE; //default
/////////////////////////////////////////////////
//::initiate variables:: //
int iDice;
int iHD = GetLocalInt(OBJECT_SELF,"BossLoot");
int iRange = iHD;
int iMage;
// Bosses have high chance to drop loot (never broken or worn)
lMod = lMod + iHD;
int PotChance = 25+lMod; // % chance to drop a potion
int ScrollChance = 5+lMod; // % chance to drop a magic scroll
int AlchemyChance = 1+lMod;
////////////////////////////////////////////////
// Cycle through the various drops until the number of items for the boss are
// all dropped. This guarantees that each boss level will be distinct.
// Note that the luck chance to increase the value of the loot does not
// affect the number of items to drop.
// SetItem Roll ** Comming Soon **
//iDice = d100();
//if (iDice<SetItemChance+1)DropSetItem(oMob, oSack);
// Alchemical Item Roll
iDice = d100();
if (iDice < AlchemyChance+1) DropAlchemy(oMob, oSack, iRange);
// Potion Roll
iDice = d100();
if (iDice<PotChance+1)DropPotion(oMob, oSack);
// Potion Roll
iDice = d100();
if (iDice<PotChance+1)DropPotion(oMob, oSack);
// Scroll Roll
iDice = d100();
if (iDice<ScrollChance+1)DropScroll(oMob, oSack, iRange);
}
void hy_bookcaseloot (object oSack)
{
object oKiller = GetLastUsedBy();
object oMob = GetLastUsedBy();
/////////////////////////////////////////
//::Droprate config::
//
int DamBroke = 0;
int lMod;
lMod = DROP_RATE; //default
/////////////////////////////////////////////////
//::initiate variables:: //
int iDice;
int iHD = GetLocalInt(OBJECT_SELF,"BossLoot");
int iRange = iHD;
int iMage;
// Bosses have high chance to drop loot (never broken or worn)
lMod = lMod + iHD;
int ScrollChance = 50+lMod; // % chance to drop a magic scroll
////////////////////////////////////////////////
// Cycle through the various drops until the number of items for the boss are
// all dropped. This guarantees that each boss level will be distinct.
// Note that the luck chance to increase the value of the loot does not
// affect the number of items to drop.
// SetItem Roll ** Comming Soon **
//iDice = d100();
//if (iDice<SetItemChance+1)DropSetItem(oMob, oSack);
// Scroll Roll
iDice = d100();
if (iDice<ScrollChance+1)DropScroll(oMob, oSack, iRange);
// Scroll Roll
iDice = d100();
if (iDice<ScrollChance+1)DropScroll(oMob, oSack, iRange);
}
///////////////////////////
//: For test compiling only
//::void main(){}