1965 lines
76 KiB
Plaintext
1965 lines
76 KiB
Plaintext
#include "x2_inc_itemprop"
|
||
#include "nw_i0_generic"
|
||
|
||
//////////////////////////////////////////////////////////
|
||
//: Constants
|
||
//:
|
||
//:note* See line 2782 of "sd_lootsystem" 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 = 4; // % chance or loot drop
|
||
const int CHANCE_WORN = 15; // % chance of worn item (0 for off)
|
||
const int CHANCE_BROKEN = 5; // % chance of broken item (0 for off)
|
||
const int CHANCE_WFOCUS = 20; // % chance of weapon drop based on weap focus
|
||
|
||
// 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
|
||
// iStack = Stacksize
|
||
void DropPot(object oMob, object oSack, int iStack);
|
||
|
||
// 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);
|
||
|
||
// Generates a random alchemy recipe
|
||
// =======================================
|
||
// oMob = the creature that just died
|
||
// oSack = the object into which you will spawn the recipe
|
||
// iRange = the quality of the item: 1=lowest 5=highest
|
||
void DropAlchemyRecipe(object oMob, object oSack, int iRange);
|
||
|
||
|
||
|
||
|
||
|
||
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 SetQuality(object oItem, string sIName, int iQual)
|
||
{
|
||
string sName;
|
||
switch(iQual)
|
||
{
|
||
case 0: sName = ColorString("Inferior "+sIName,255, 255, 255); break;
|
||
case 1: sName = ColorString("Superior "+sIName,255, 255, 255); break;
|
||
case 2: sName = ColorString("Enchanted "+sIName, 0, 255, 0); break;
|
||
case 3: sName = ColorString("Powerful "+sIName, 65, 105, 225); break;
|
||
case 4: sName = ColorString("Champion's "+sIName, 102, 205, 170); break;
|
||
case 5: sName = ColorString("Epic "+sIName, 128, 0, 218); break;
|
||
case 6: sName = ColorString("Heroic "+sIName, 255, 255, 0 ); break;
|
||
case 7: sName = ColorString("Legendary "+sIName, 218, 165, 32 ); break;
|
||
case 8: sName = ColorString("Titan's "+sIName, 255, 0, 255 ); break;
|
||
}
|
||
SetName(oItem, sName);
|
||
}
|
||
|
||
void SetThreatLevel(object oMob)
|
||
{
|
||
int iHD = GetHitDice(OBJECT_SELF);
|
||
int iRange;
|
||
string sName;
|
||
string cName = GetName(oMob);
|
||
|
||
if (iHD>0&&iHD<6)iRange=1; // lvl 1-5
|
||
if (iHD>5&&iHD<11)iRange=2; // lvl 6-10
|
||
if (iHD>10&&iHD<21)iRange=3; // lvl 11-20
|
||
if (iHD>20&&iHD<31)iRange=4; // lvl 21-30
|
||
if (iHD>30&&iHD<41)iRange=5; // lvl 31-40
|
||
|
||
switch(iRange)
|
||
{
|
||
case 1: sName = ColorString(cName,255, 255, 255); break;
|
||
case 2: sName = ColorString(cName,189, 183, 107); break;
|
||
case 3: sName = ColorString(cName,218, 165, 32); break;
|
||
case 4: sName = ColorString(cName,210, 105, 30); break;
|
||
case 5: sName = ColorString(cName,255, 0, 0); break;
|
||
}
|
||
if (GetLocalInt(OBJECT_SELF, "BOSS")==1)sName = ColorString(cName,255, 255, 0);
|
||
SetName(oMob, sName);
|
||
}
|
||
|
||
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 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;
|
||
}
|
||
}
|
||
if (iRange==4||iRange==5)
|
||
{
|
||
iRoll = Random(40)+1; // scrolls valued above 3200
|
||
switch (iRoll)
|
||
{
|
||
case 1: sType = "nw_it_sparscr806";
|
||
case 2: sType = "x2_it_spdvscr804";
|
||
case 3: sType = "x1_it_sparscr801";
|
||
case 4: sType = "x1_it_sparscr901";
|
||
case 5: sType = "x2_it_sparscr901";
|
||
case 6: sType = "x2_it_sparscr801";
|
||
case 7: sType = "x1_it_spdvscr803";
|
||
case 8: sType = "x1_it_spdvscr804";
|
||
case 9: sType = "nw_it_sparscr905";
|
||
case 10: sType = "x2_it_spdvscr901";
|
||
case 11: sType = "nw_it_sparscr908";
|
||
case 12: sType = "nw_it_sparscr902";
|
||
case 13: sType = "nw_it_sparscr803";
|
||
case 14: sType = "nw_it_sparscr912";
|
||
case 15: sType = "nw_it_sparscr809";
|
||
case 16: sType = "x2_it_spdvscr902";
|
||
case 17: sType = "nw_it_sparscr804";
|
||
case 18: sType = "nw_it_sparscr807";
|
||
case 19: sType = "nw_it_sparscr806";
|
||
case 20: sType = "x2_it_spdvscr801";
|
||
case 21: sType = "nw_it_sparscr906";
|
||
case 22: sType = "nw_it_sparscr801";
|
||
case 23: sType = "nw_it_sparscr901";
|
||
case 24: sType = "x2_it_spdvscr802";
|
||
case 25: sType = "nw_it_sparscr903";
|
||
case 26: sType = "nw_it_sparscr808";
|
||
case 27: sType = "nw_it_sparscr910";
|
||
case 28: sType = "x2_it_spdvscr903";
|
||
case 29: sType = "nw_it_sparscr904";
|
||
case 30: sType = "nw_it_sparscr805";
|
||
case 31: sType = "x1_it_spdvscr802";
|
||
case 32: sType = "nw_it_sparscr911";
|
||
case 33: sType = "x1_it_spdvscr901";
|
||
case 34: sType = "nw_it_sparscr909";
|
||
case 35: sType = "nw_it_sparscr907";
|
||
case 36: sType = "x1_it_spdvscr801";
|
||
case 37: sType = "nw_it_sparscr906";
|
||
case 38: sType = "nw_it_sparscr808";
|
||
case 39: sType = "x2_it_sparscr801";
|
||
case 40: sType = "x2_it_spdvscr804";
|
||
}
|
||
}
|
||
|
||
object oScroll = CreateItemOnObject(sType, oSack, 1);
|
||
SetIdentified(oScroll, FALSE);
|
||
}
|
||
|
||
void DropAlchemyRecipe(object oMob, object oSack, int iRange)
|
||
{
|
||
string sType;
|
||
int iRoll;
|
||
|
||
if (iRange==1) //
|
||
{
|
||
iRoll = d10();
|
||
switch (iRoll)
|
||
{
|
||
case 1: sType = "cm_alch_rec1";break;
|
||
case 2: sType = "cm_alch_rec2";break;
|
||
case 3: sType = "cm_alch_rec3";break;
|
||
case 4: sType = "cm_alch_rec4";break;
|
||
case 5: sType = "cm_alch_rec5";break;
|
||
case 6: sType = "cm_alch_rec6";break;
|
||
case 7: sType = "cm_alch_rec7";break;
|
||
case 8: sType = "cm_alch_rec8";break;
|
||
case 9: sType = "cm_alch_rec9";break;
|
||
case 10: sType = "cm_alch_rec10";break;
|
||
}
|
||
}
|
||
if (iRange==2)
|
||
{
|
||
iRoll = d10(); ///
|
||
switch (iRoll)
|
||
{
|
||
case 1: sType = "cm_alch_rec1";break;
|
||
case 2: sType = "cm_alch_rec2";break;
|
||
case 3: sType = "cm_alch_rec3";break;
|
||
case 4: sType = "cm_alch_rec4";break;
|
||
case 5: sType = "cm_alch_rec5";break;
|
||
case 6: sType = "cm_alch_rec6";break;
|
||
case 7: sType = "cm_alch_rec7";break;
|
||
case 8: sType = "cm_alch_rec8";break;
|
||
case 9: sType = "cm_alch_rec9";break;
|
||
case 10: sType = "cm_alch_rec10";break;
|
||
}
|
||
}
|
||
if (iRange==3)
|
||
{
|
||
iRoll = d10();//
|
||
switch (iRoll)
|
||
{
|
||
case 1: sType = "cm_alch_rec11";break;
|
||
case 2: sType = "cm_alch_rec12";break;
|
||
case 3: sType = "cm_alch_rec13";break;
|
||
case 4: sType = "cm_alch_rec14";break;
|
||
case 5: sType = "cm_alch_rec15";break;
|
||
case 6: sType = "cm_alch_rec16";break;
|
||
case 7: sType = "cm_alch_rec17";break;
|
||
case 8: sType = "cm_alch_rec18";break;
|
||
case 9: sType = "cm_alch_rec19";break;
|
||
case 10: sType = "cm_alch_rec20";break;
|
||
}
|
||
}
|
||
if (iRange==4||iRange==5)
|
||
{
|
||
iRoll = d10(); //
|
||
switch (iRoll)
|
||
{
|
||
case 1: sType = "cm_alch_rec21";break;
|
||
case 2: sType = "cm_alch_rec22";break;
|
||
case 3: sType = "cm_alch_rec23";break;
|
||
case 4: sType = "cm_alch_rec24";break;
|
||
case 5: sType = "cm_alch_rec25";break;
|
||
case 6: sType = "cm_alch_rec26";break;
|
||
case 7: sType = "cm_alch_rec27";break;
|
||
case 8: sType = "cm_alch_rec28";break;
|
||
case 9: sType = "cm_alch_rec29";break;
|
||
case 10: sType = "cm_alch_rec30";break;
|
||
}
|
||
}
|
||
|
||
object oRecipe = CreateItemOnObject(sType, oSack, 1);
|
||
SetIdentified(oRecipe, FALSE);
|
||
}
|
||
|
||
void DropPot(object oMod, object oSack, int iStack)
|
||
{
|
||
string sPotion;
|
||
|
||
int iDice = d10()+d10()+d10();
|
||
switch (iDice)
|
||
{
|
||
case 1:sPotion = "dummy"; break;
|
||
case 2:sPotion = "dummy"; break;
|
||
case 3:sPotion = "nw_it_mpotion002"; break;
|
||
case 4:sPotion = "nw_it_mpotion003"; break;
|
||
case 5:sPotion = "nw_it_mpotion008"; break;
|
||
case 6:sPotion = "nw_it_mpotion009"; break;
|
||
case 7:sPotion = "nw_it_mpotion012"; break;
|
||
case 8:sPotion = "nw_it_mpotion011"; 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 = "nw_it_mpotion002"; break;
|
||
case 30: sPotion = "x2_it_mpotion001"; break;
|
||
}
|
||
CreateItemOnObject(sPotion, oSack, iStack);
|
||
}
|
||
|
||
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 = d10(3);
|
||
switch (nDice)
|
||
{
|
||
case 1: sName = "nw_it_contain006"; break; //bag holding
|
||
case 2: sName = "nw_it_contain005"; break; //gmbag
|
||
case 3: sName = "nw_it_contain003"; break; //lmbag
|
||
case 4: sName = "nw_it_contain004"; break; //mbag
|
||
case 5: sName = "nw_it_contain002"; break; //mpouch
|
||
case 6: sName = "nw_it_msmlmisc05"; break; //healpearl
|
||
case 7: sName = "nw_it_mmidmisc04"; break; //scab bless
|
||
case 8: sName = "x0_it_msmlmisc05"; break; //earth elem
|
||
case 9: sName = "x0_it_mmedmisc03"; break; //harp
|
||
case 10: sName = "x0_it_msmlmisc01"; break; //water elem
|
||
case 11: sName = "x0_it_msmlmisc02"; break; //fire elem
|
||
case 12: sName = "x0_it_mmedmisc01"; break; //shielding
|
||
case 13: sName = "x0_it_mthnmisc21"; break; //air elem
|
||
case 14: sName = "x0_it_mthnmisc19"; break; //bard lire
|
||
case 15: sName = "x0_it_mthnmisc17"; break; // bard spls
|
||
case 16: sName = "x0_it_mmedmisc02"; break; // bard spls
|
||
case 17: sName = "x0_it_mthnmisc05"; break; // dust app
|
||
case 18: sName = "x0_it_mthnmisc06"; break; // dust dissapp
|
||
case 19: sName = "x0_it_mthnmisc13"; break; // sunbeam
|
||
case 20: sName = "x0_it_mthnmisc15"; break; //
|
||
case 21: sName = "x0_it_mthnmisc14"; break; // lath chal
|
||
case 22: sName = "nw_it_mmidmisc01"; break; // harp charm
|
||
case 23: sName = "nw_it_mmidmisc02"; break; // harp haunt
|
||
case 24: sName = "nw_it_mmidmisc03"; break; // harp pand
|
||
case 25: sName = "x0_it_msmlmisc06"; break; // horn good/evil
|
||
case 26: sName = "x0_it_mthnmisc09"; break; //
|
||
case 27: sName = "nw_it_contain001"; break; // box
|
||
case 28: sName = "nw_it_contain006"; break; //bag holding
|
||
case 29: sName = "nw_it_contain005"; break; //gmbag
|
||
case 30: sName = "nw_it_contain003"; break; //lmbag
|
||
}
|
||
CreateItemOnObject(sName, oSack, 1);
|
||
}
|
||
|
||
void DropSetItem(object oMod, object oSack, int iClass)
|
||
{
|
||
object oPC = GetLastKiller();
|
||
if (oPC==OBJECT_INVALID)oPC = GetFirstPC();
|
||
if (GetMaster(oPC)!=OBJECT_INVALID)oPC = GetMaster(oPC);
|
||
|
||
int iDex = GetAbilityScore(oPC, ABILITY_DEXTERITY, TRUE);
|
||
int iStr = GetAbilityScore(oPC, ABILITY_STRENGTH, TRUE);
|
||
|
||
int iHD = GetHitDice(oPC);
|
||
if (iHD<=9)return;
|
||
|
||
string sName;
|
||
int iDice;
|
||
|
||
if (iClass==0)
|
||
{
|
||
if (GetLevelByClass(CLASS_TYPE_WIZARD, oPC)>=3)iClass = 2;
|
||
if (GetLevelByClass(CLASS_TYPE_SORCERER, oPC)>=3)iClass = 3;
|
||
if (GetLevelByClass(CLASS_TYPE_BARD, oPC)>=3)iClass = 3;
|
||
if (GetLevelByClass(CLASS_TYPE_CLERIC, oPC)>=5)iClass = 5;
|
||
if (GetLevelByClass(CLASS_TYPE_MONK, oPC)>=5)iClass = 10;
|
||
if (GetLevelByClass(CLASS_TYPE_BARBARIAN, oPC)>=5)iClass = 11;
|
||
if (GetLevelByClass(CLASS_TYPE_DRUID, oPC)>=5)iClass = 8;
|
||
if (GetLevelByClass(CLASS_TYPE_ROGUE, oPC)>=5)iClass = 4;
|
||
if (GetLevelByClass(CLASS_TYPE_DWARVEN_DEFENDER, oPC)>1)iClass = 11;
|
||
if (GetLevelByClass(CLASS_TYPE_DIVINE_CHAMPION, oPC)>1)iClass = 7;
|
||
if (GetLevelByClass(CLASS_TYPE_PALADIN, oPC)>=5)iClass = 7;
|
||
if (GetLevelByClass(CLASS_TYPE_ARCANE_ARCHER, oPC)>1)iClass = 4;
|
||
if (GetLevelByClass(CLASS_TYPE_FIGHTER, oPC)>=5){
|
||
if (iStr>iDex)iClass = 1;
|
||
else iClass = 4;
|
||
}
|
||
if (GetLevelByClass(CLASS_TYPE_RANGER, oPC)>5){
|
||
if (iStr>iDex)iClass = 1;
|
||
else iClass = 4;
|
||
}
|
||
|
||
}
|
||
|
||
|
||
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_s6"; break;
|
||
case 2: sName = "sd_barb_s1"; break;
|
||
case 3: sName = "sd_barb_s2"; break;
|
||
case 4: sName = "sd_barb_s3"; break;
|
||
case 5: sName = "sd_barb_s4"; break;
|
||
case 6: sName = "sd_barb_s5"; break;
|
||
}}break;
|
||
case 12:{ // Duel 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;
|
||
}
|
||
// comming 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)
|
||
{
|
||
object oPC = GetFirstPC();
|
||
string sGold, sLvl;
|
||
int iHD = GetHitDice(oMob);
|
||
int iGold = 0;
|
||
|
||
iGold = (d20()*iHD)+(15*iHD)+iBonus;
|
||
|
||
if (GetHenchman(oPC,2)!=OBJECT_INVALID)iGold+=iGold;
|
||
|
||
CreateItemOnObject("nw_it_gold001", oSack, iGold);
|
||
|
||
/////////////////////////////////////////////////////////////////////////
|
||
//Gold Debugging
|
||
//object oPC = GetFirstPC();
|
||
//sGold = IntToString(iGold);
|
||
//sLvl = IntToString(iHD);
|
||
//FloatingTextStringOnCreature(sGold+" Gold Spawned by lvl "+sLvl+" mob", oPC);
|
||
//
|
||
//
|
||
//
|
||
}
|
||
|
||
void CastImbue(object oItem, int iRange)
|
||
{
|
||
itemproperty ipAdd;
|
||
int iSpell;
|
||
int iUses;
|
||
int iRoll;
|
||
switch (iRange)
|
||
{
|
||
case 1: {
|
||
iRoll = d8();
|
||
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;
|
||
}break;
|
||
case 2: {
|
||
iRoll = d8();
|
||
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;
|
||
}break;
|
||
case 3: {
|
||
iRoll = d8();
|
||
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;
|
||
}break;
|
||
case 4: {
|
||
iRoll = d12();
|
||
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;
|
||
}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_UNLIMITED_USE;
|
||
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_UNLIMITED_USE;
|
||
break;}
|
||
case 5: {iRoll = d3();
|
||
if (iRoll==1)iUses = IP_CONST_CASTSPELL_NUMUSES_3_USES_PER_DAY;
|
||
if (iRoll==2)iUses = IP_CONST_CASTSPELL_NUMUSES_4_USES_PER_DAY;
|
||
if (iRoll==3)iUses = IP_CONST_CASTSPELL_NUMUSES_5_USES_PER_DAY;
|
||
iRoll=d100();
|
||
if (iRoll>90)iUses = IP_CONST_CASTSPELL_NUMUSES_UNLIMITED_USE;
|
||
break;}
|
||
|
||
}
|
||
ipAdd = ItemPropertyCastSpell(iSpell, iUses);
|
||
IPSafeAddItemProperty(oItem, ipAdd);
|
||
iRoll = (d12() * iRange)+1; if (iRoll>50)iRoll=50;
|
||
SetItemCharges(oItem, iRoll);
|
||
}
|
||
|
||
|
||
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 MightyEnhance(object oItem, int iRange)
|
||
{
|
||
itemproperty ipAdd;
|
||
int iEnh = d4();
|
||
|
||
switch (iRange)
|
||
{
|
||
case 1: ; 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=2;} break; // 2-3
|
||
case 3: {iEnh+=2;if (iEnh==5)iEnh=3;} break; // 3-4
|
||
case 4: {iEnh+=3;if (iEnh==6)iEnh=4;} break; // 4-5
|
||
case 5: {iEnh+=4;if (iEnh==7)iEnh=5;} 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 = d12();
|
||
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_DIVINE; break;
|
||
case 9: iType = IP_CONST_DAMAGETYPE_PIERCING; break;
|
||
case 10: iType = IP_CONST_DAMAGETYPE_POSITIVE; break;
|
||
case 11: iType = IP_CONST_DAMAGETYPE_SLASHING; break;
|
||
case 12: 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_2;
|
||
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
|
||
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_3;
|
||
}break;
|
||
case 3: {
|
||
iRoll = d6();
|
||
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_2;
|
||
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_3;
|
||
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
|
||
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
|
||
if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_4;
|
||
if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_5;
|
||
}break;
|
||
case 4: {
|
||
iRoll = d8();
|
||
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_3;
|
||
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
|
||
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_4;
|
||
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
|
||
if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_5;
|
||
if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d8;
|
||
if (iRoll==7)iDam = IP_CONST_DAMAGEBONUS_6;
|
||
if (iRoll==8)iDam = IP_CONST_DAMAGEBONUS_1d10;
|
||
}break;
|
||
case 5: {
|
||
iRoll = d10();
|
||
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_3;
|
||
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
|
||
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_4;
|
||
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
|
||
if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_5;
|
||
if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d8;
|
||
if (iRoll==7)iDam = IP_CONST_DAMAGEBONUS_2d4;
|
||
if (iRoll==8)iDam = IP_CONST_DAMAGEBONUS_6;
|
||
if (iRoll==9)iDam = IP_CONST_DAMAGEBONUS_1d10;
|
||
if (iRoll==10)iDam = IP_CONST_DAMAGEBONUS_7;
|
||
}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=2;} break; // 2-3
|
||
case 3: {iEnh+=2;if (iEnh==5)iEnh=3;} break; // 3-4
|
||
case 4: {iEnh+=3;if (iEnh==6)iEnh=4;} break; // 4-5
|
||
case 5: {iEnh+=4;if (iEnh==7)iEnh=5;} break; // 5-6
|
||
}
|
||
ipAdd = ItemPropertyEnhancementBonus(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 MCimbue(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_2;
|
||
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_1d6;
|
||
}break;
|
||
case 3: {
|
||
iRoll = d6();
|
||
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_2;
|
||
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_3;
|
||
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
|
||
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
|
||
if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_4;
|
||
if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d8;
|
||
}break;
|
||
case 4: {
|
||
iRoll = d10();
|
||
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_3;
|
||
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
|
||
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_4;
|
||
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
|
||
if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_5;
|
||
if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d8;
|
||
if (iRoll==7)iDam = IP_CONST_DAMAGEBONUS_6;
|
||
if (iRoll==8)iDam = IP_CONST_DAMAGEBONUS_2d4;
|
||
if (iRoll==9)iDam = IP_CONST_DAMAGEBONUS_5;
|
||
if (iRoll==10)iDam = IP_CONST_DAMAGEBONUS_1d10;
|
||
}break;
|
||
case 5: {
|
||
iRoll = d12();
|
||
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_3;
|
||
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
|
||
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_4;
|
||
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
|
||
if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_5;
|
||
if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d8;
|
||
if (iRoll==7)iDam = IP_CONST_DAMAGEBONUS_2d4;
|
||
if (iRoll==8)iDam = IP_CONST_DAMAGEBONUS_6;
|
||
if (iRoll==9)iDam = IP_CONST_DAMAGEBONUS_1d10;
|
||
if (iRoll==10)iDam = IP_CONST_DAMAGEBONUS_7;
|
||
if (iRoll==11)iDam = IP_CONST_DAMAGEBONUS_1d12;
|
||
if (iRoll==12)iDam = IP_CONST_DAMAGEBONUS_2d6;
|
||
}break;
|
||
}
|
||
ipAdd = ItemPropertyMassiveCritical(iDam);
|
||
IPSafeAddItemProperty(oItem, ipAdd);
|
||
}
|
||
|
||
int sd_PropCheck(object oItem, int tCode, int iSubProp)
|
||
{
|
||
int iFlag=0;
|
||
itemproperty ipProp = GetFirstItemProperty(oItem);
|
||
int iMatchType, iMatchSubType;
|
||
while (GetIsItemPropertyValid(ipProp))
|
||
{
|
||
iMatchType = GetItemPropertyType(ipProp);
|
||
iMatchSubType = GetItemPropertySubType(ipProp);
|
||
if (iMatchType == tCode && iMatchSubType == iSubProp)iFlag=1;
|
||
ipProp = GetNextItemProperty(oItem);
|
||
}
|
||
if (iFlag==1)return TRUE;
|
||
else return FALSE;
|
||
}
|
||
|
||
int sd_GetDamType()
|
||
{
|
||
int iType;
|
||
int iRoll = Random(13)+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_DIVINE; break;
|
||
case 5: iType = IP_CONST_DAMAGETYPE_ELECTRICAL; break;
|
||
case 6: iType = IP_CONST_DAMAGETYPE_FIRE; break;
|
||
case 7: iType = IP_CONST_DAMAGETYPE_MAGICAL; break;
|
||
case 8: iType = IP_CONST_DAMAGETYPE_NEGATIVE; break;
|
||
case 9: iType = IP_CONST_DAMAGETYPE_PHYSICAL; break;
|
||
case 10: iType = IP_CONST_DAMAGETYPE_PIERCING; break;
|
||
case 11: iType = IP_CONST_DAMAGETYPE_POSITIVE; break;
|
||
case 12: iType = IP_CONST_DAMAGETYPE_SLASHING; break;
|
||
case 13: iType = IP_CONST_DAMAGETYPE_SONIC; break;
|
||
}
|
||
|
||
return iType;
|
||
}
|
||
|
||
int sd_GetAbil()
|
||
{
|
||
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;
|
||
}
|
||
|
||
return iType;
|
||
}
|
||
|
||
void DAMimbue(object oItem, int iRange)
|
||
{
|
||
itemproperty ipAdd;
|
||
itemproperty ipVis;
|
||
int iDam, iCol, iType, iRoll;
|
||
|
||
iType = sd_GetDamType();
|
||
while (sd_PropCheck(oItem, 16 , iType))iType = sd_GetDamType();
|
||
|
||
switch (iRange)
|
||
{
|
||
case 1: {
|
||
iRoll = d3();
|
||
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_1;
|
||
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_2;
|
||
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_1d6;
|
||
}break;
|
||
case 3: {
|
||
iRoll = d6();
|
||
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_2;
|
||
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_3;
|
||
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_1d4;
|
||
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
|
||
if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_4;
|
||
if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d8;
|
||
}break;
|
||
case 4: {
|
||
iRoll = d10();
|
||
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_3;
|
||
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
|
||
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_4;
|
||
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
|
||
if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_5;
|
||
if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d8;
|
||
if (iRoll==7)iDam = IP_CONST_DAMAGEBONUS_6;
|
||
if (iRoll==8)iDam = IP_CONST_DAMAGEBONUS_2d4;
|
||
if (iRoll==9)iDam = IP_CONST_DAMAGEBONUS_5;
|
||
if (iRoll==10)iDam = IP_CONST_DAMAGEBONUS_1d10;
|
||
}break;
|
||
case 5: {
|
||
iRoll = d12();
|
||
if (iRoll==1)iDam = IP_CONST_DAMAGEBONUS_3;
|
||
if (iRoll==2)iDam = IP_CONST_DAMAGEBONUS_1d4;
|
||
if (iRoll==3)iDam = IP_CONST_DAMAGEBONUS_4;
|
||
if (iRoll==4)iDam = IP_CONST_DAMAGEBONUS_1d6;
|
||
if (iRoll==5)iDam = IP_CONST_DAMAGEBONUS_5;
|
||
if (iRoll==6)iDam = IP_CONST_DAMAGEBONUS_1d8;
|
||
if (iRoll==7)iDam = IP_CONST_DAMAGEBONUS_2d4;
|
||
if (iRoll==8)iDam = IP_CONST_DAMAGEBONUS_6;
|
||
if (iRoll==9)iDam = IP_CONST_DAMAGEBONUS_1d10;
|
||
if (iRoll==10)iDam = IP_CONST_DAMAGEBONUS_7;
|
||
if (iRoll==11)iDam = IP_CONST_DAMAGEBONUS_1d12;
|
||
if (iRoll==12)iDam = IP_CONST_DAMAGEBONUS_2d6;
|
||
}break;
|
||
}
|
||
ipAdd = ItemPropertyDamageBonus(iType, iDam);
|
||
IPSafeAddItemProperty(oItem, ipAdd);
|
||
|
||
//ipAdd = ItemPropertyVisualEffect(ITEM_VISUAL_EVIL);
|
||
//IPSafeAddItemProperty(oItem, ipAdd);
|
||
|
||
switch(iCol)
|
||
{
|
||
case 1: ipVis = ItemPropertyVisualEffect(ITEM_VISUAL_EVIL); break;
|
||
case 2: ipVis = ItemPropertyVisualEffect(ITEM_VISUAL_COLD); break;
|
||
case 3: ipVis = ItemPropertyVisualEffect(ITEM_VISUAL_FIRE); break;
|
||
case 4: ipVis = ItemPropertyVisualEffect(ITEM_VISUAL_ACID); break;
|
||
case 5: ipVis = ItemPropertyVisualEffect(ITEM_VISUAL_ELECTRICAL); break;
|
||
case 6: ipVis = ItemPropertyVisualEffect(ITEM_VISUAL_HOLY); break;
|
||
case 7: ipVis = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC); break;
|
||
}
|
||
AddItemProperty(DURATION_TYPE_PERMANENT, ipVis, oItem);
|
||
}
|
||
|
||
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=2;} break; // 2-3
|
||
case 3: {iAC+=2;if (iAC==5)iAC=3;} break; // 3-4
|
||
case 4: {iAC+=3;if (iAC==6)iAC=4;} break; // 4-5
|
||
case 5: {iAC+=4;if (iAC==7)iAC=5;} 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=2;} break; // 2-3
|
||
case 3: {iAC+=2;if (iAC==5)iAC=3;} break; // 3-4
|
||
case 4: {iAC+=3;if (iAC==6)iAC=4;} break; // 4-5
|
||
case 5: {iAC+=4;if (iAC==7)iAC=5;} 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 = d3();
|
||
if (iRoll==1)iType = IP_CONST_IMMUNITYMISC_POISON;
|
||
if (iRoll==2)iType = IP_CONST_IMMUNITYMISC_DISEASE;
|
||
if (iRoll==3)iType = IP_CONST_IMMUNITYMISC_DISEASE;
|
||
}; break;
|
||
case 3: {
|
||
iRoll = d6();
|
||
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_IMMUNITYMISC_DEATH_MAGIC;
|
||
if (iRoll==6)iType = IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN;
|
||
}; break;
|
||
case 4: {
|
||
iRoll = d10();
|
||
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_IMMUNITYMISC_DEATH_MAGIC;
|
||
if (iRoll==6)iType = IP_CONST_IMMUNITYMISC_DISEASE;
|
||
if (iRoll==7)iType = IP_CONST_IMMUNITYMISC_KNOCKDOWN;
|
||
if (iRoll==8)iType = IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN;
|
||
if (iRoll==9)iType = IP_CONST_IMMUNITYMISC_BACKSTAB;
|
||
if (iRoll==10)iType = IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN;
|
||
}; break;
|
||
case 5: {
|
||
iRoll = d12();
|
||
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_IMMUNITYMISC_DEATH_MAGIC;
|
||
if (iRoll==6)iType = IP_CONST_IMMUNITYMISC_DISEASE;
|
||
if (iRoll==7)iType = IP_CONST_IMMUNITYMISC_KNOCKDOWN;
|
||
if (iRoll==8)iType = IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN;
|
||
if (iRoll==9)iType = IP_CONST_IMMUNITYMISC_BACKSTAB;
|
||
if (iRoll==10)iType = IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN;
|
||
if (iRoll==11)iType = IP_CONST_IMMUNITYMISC_MINDSPELLS;
|
||
if (iRoll==12)iType = IP_CONST_IMMUNITYMISC_CRITICAL_HITS;
|
||
}; break;
|
||
}
|
||
ipAdd = ItemPropertyImmunityMisc(iType);
|
||
IPSafeAddItemProperty(oItem, ipAdd);
|
||
}
|
||
|
||
void RESimbue(object oItem, int iRange)
|
||
{
|
||
itemproperty ipAdd;
|
||
int iRes, iType, iRoll;
|
||
|
||
iType = sd_GetDamType();
|
||
while (sd_PropCheck(oItem, 23 , iType))iType = sd_GetDamType();
|
||
|
||
|
||
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_10;
|
||
if (iRoll==3)iRes = IP_CONST_DAMAGERESIST_5;
|
||
}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_15;
|
||
if (iRoll==4)iRes = IP_CONST_DAMAGERESIST_10;
|
||
}break;
|
||
case 5: {iRoll=d3();
|
||
if (iRoll==1)iRes = IP_CONST_DAMAGERESIST_5;
|
||
if (iRoll==2)iRes = IP_CONST_DAMAGERESIST_10;
|
||
if (iRoll==3)iRes = IP_CONST_DAMAGERESIST_15;
|
||
}break;
|
||
}
|
||
ipAdd = ItemPropertyDamageResistance(iType, iRes);
|
||
IPSafeAddItemProperty(oItem, ipAdd);
|
||
}
|
||
|
||
|
||
void AbilityImbue(object oItem, int iRange)
|
||
{
|
||
itemproperty ipAdd;
|
||
int iAbil;
|
||
int iType;
|
||
|
||
iType = sd_GetAbil();
|
||
while (sd_PropCheck(oItem, 0, iType))iType = sd_GetDamType();
|
||
|
||
switch (iRange)
|
||
{
|
||
case 1: iAbil = 1; break; // 1
|
||
case 2: iAbil = d2(); break; // 1-2
|
||
case 3: iAbil = d3(); break; // 1-3
|
||
case 4: iAbil = d3()+1; break; // 2-4
|
||
case 5: iAbil = d2()+2; break; // 3-4
|
||
}
|
||
ipAdd = ItemPropertyAbilityBonus(iType, iAbil);
|
||
IPSafeAddItemProperty(oItem, ipAdd);
|
||
}
|
||
|
||
void MiscImbue(object oItem, int iRange)
|
||
{
|
||
itemproperty ipAdd;
|
||
int iRoll;
|
||
switch (iRange)
|
||
{
|
||
case 1: {}; break;
|
||
case 2: {
|
||
iRoll = d3();
|
||
if (iRoll==1)ipAdd = ItemPropertyDarkvision();
|
||
if (iRoll==2)ipAdd = ItemPropertyImprovedEvasion();
|
||
if (iRoll==3)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_FORTITUDE, 2);
|
||
}; break;
|
||
case 3: {
|
||
iRoll = d6();
|
||
if (iRoll==1)ipAdd = ItemPropertyDarkvision();
|
||
if (iRoll==2)ipAdd = ItemPropertyImprovedEvasion();
|
||
if (iRoll==3)ipAdd = ItemPropertyVampiricRegeneration(1);
|
||
if (iRoll==4)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_FORTITUDE, 3);
|
||
if (iRoll==5)ipAdd = ItemPropertyRegeneration(1);
|
||
if (iRoll==6)ipAdd = ItemPropertyDarkvision();
|
||
}; break;
|
||
case 4: {
|
||
iRoll = d6();
|
||
if (iRoll==1)ipAdd = ItemPropertyDarkvision();
|
||
if (iRoll==2)ipAdd = ItemPropertyImprovedEvasion();
|
||
if (iRoll==3)ipAdd = ItemPropertyVampiricRegeneration(2);
|
||
if (iRoll==4)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_FORTITUDE, 4);
|
||
if (iRoll==5)ipAdd = ItemPropertyRegeneration(2);
|
||
if (iRoll==6)ipAdd = ItemPropertyTrueSeeing();
|
||
}; break;
|
||
case 5: {
|
||
iRoll = d6();
|
||
if (iRoll==1)ipAdd = ItemPropertyDarkvision();
|
||
if (iRoll==2)ipAdd = ItemPropertyImprovedEvasion();
|
||
if (iRoll==3)ipAdd = ItemPropertyVampiricRegeneration(4);
|
||
if (iRoll==4)ipAdd = ItemPropertyBonusSavingThrow(IP_CONST_SAVEBASETYPE_FORTITUDE, 5);
|
||
if (iRoll==5)ipAdd = ItemPropertyRegeneration(4);
|
||
if (iRoll==6)ipAdd = ItemPropertyTrueSeeing();
|
||
}; 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 = 1; break; // 1
|
||
case 2: iAbil = d2(); break; // 1-2
|
||
case 3: iAbil = d3(); break; // 1-3
|
||
case 4: iAbil = d3()+1; break; // 2-4
|
||
case 5: iAbil = d2()+2; break; // 3-4
|
||
}
|
||
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 = 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()+2;if (iRegen==5)iRegen=3;break;} //2-4
|
||
case 5: iRegen = d4()+1;break; //2-5
|
||
}
|
||
ipAdd = ItemPropertyRegeneration(iRegen);
|
||
IPSafeAddItemProperty(oItem, ipAdd);
|
||
}
|
||
|
||
void VRimbue(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()+2;if (iRegen==5)iRegen=3;break;} //2-4
|
||
case 5: iRegen = d4()+1;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);
|
||
}
|
||
|
||
/////////////////
|
||
//Test Compiling
|
||
//void main() {}
|
||
|