559 lines
19 KiB
Plaintext
559 lines
19 KiB
Plaintext
#include "NW_O2_CONINCLUDE"
|
|
#include "prc_class_const"
|
|
|
|
|
|
//Create Amulet in chest based on Hit Dice
|
|
void CreateAmulet(object oTarget, object oAdventurer)
|
|
{
|
|
string sItem = "";
|
|
int nHD = GetHitDice(oAdventurer);
|
|
|
|
if (GetRange(1, nHD)) // * 800
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_it_mneck022"; break;
|
|
case 2: sItem = "nw_it_mneck023"; break;
|
|
case 3: sItem = "nw_it_mneck021"; break;
|
|
}
|
|
}
|
|
else if (GetRange(2, nHD)) // * 200 - 2500
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_it_mneck001"; break;
|
|
case 2: sItem = "nw_it_mneck007"; break;
|
|
case 3: sItem = "nw_it_mneck006"; break;
|
|
}
|
|
}
|
|
else if (GetRange(3, nHD)) // * 800 - 10000
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_it_mneck012"; break;
|
|
case 2: sItem = "nw_it_mneck025"; break;
|
|
case 3: sItem = "nw_it_mneck016"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(4, nHD)) // * 2500 - 16500
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_it_mneck029"; break;
|
|
case 2: sItem = "nw_it_mneck013"; break;
|
|
case 3: sItem = "nw_it_mneck033"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(5, nHD)) // * 8000 - 25000
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_it_mneck015"; break;
|
|
case 2: sItem = "nw_it_mneck019"; break;
|
|
case 3: sItem = "nw_it_mneck005"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(6, nHD)) // * 16000 and up
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_it_mneck034"; break;
|
|
case 2: sItem = "nw_it_mneck037"; break;
|
|
case 3: sItem = "nw_it_mneck011"; break;
|
|
}
|
|
}
|
|
if (sItem != "")
|
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
|
}
|
|
|
|
//Create Ring in chest based on Hit Dice
|
|
void CreateRing(object oTarget, object oAdventurer)
|
|
{
|
|
string sItem = "";
|
|
int nHD = GetHitDice(oAdventurer);
|
|
|
|
if (GetRange(1, nHD)) // * 800
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_it_mring023"; break;
|
|
case 2: sItem = "nw_it_mring021"; break;
|
|
case 3: sItem = "nw_it_mring022"; break;
|
|
}
|
|
}
|
|
else if (GetRange(2, nHD)) // * 200 - 2500
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_it_mring018"; break;
|
|
case 2: sItem = "nw_it_mring003"; break;
|
|
case 3: sItem = "nw_it_mring014"; break;
|
|
}
|
|
}
|
|
else if (GetRange(3, nHD)) // * 800 - 10000
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_it_mring029"; break;
|
|
case 2: sItem = "nw_it_mring015"; break;
|
|
case 3: sItem = "nw_it_mring028"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(4, nHD)) // * 2500 - 16500
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_it_mring033"; break;
|
|
case 2: sItem = "nw_it_mring016"; break;
|
|
case 3: sItem = "nw_it_mring005"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(5, nHD)) // * 8000 - 25000
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_it_mring020"; break;
|
|
case 2: sItem = "nw_it_mring012"; break;
|
|
case 3: sItem = "nw_it_mring007"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(6, nHD)) // * 16000 and up
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_it_mring004"; break;
|
|
case 2: sItem = "nw_it_mring030"; break;
|
|
case 3: sItem = "nw_it_mring017"; break;
|
|
}
|
|
}
|
|
if (sItem != "")
|
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
|
}
|
|
|
|
//Create Bracer/Gauntlet for Monk
|
|
void CreateMonkGlove(object oTarget, object oAdventurer)
|
|
{
|
|
|
|
string sItem = "";
|
|
int nHD = GetHitDice(oAdventurer);
|
|
|
|
if (GetRange(1, nHD)) // * 800
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_it_mbracer002"; break;
|
|
case 2: sItem = "nw_it_mglove026"; break;
|
|
case 3: sItem = "nw_it_mbracer001"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(2, nHD)) // * 200 - 2500
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_it_mbracer003"; break;
|
|
case 2: sItem = "nw_it_mglove027"; break;
|
|
case 3: sItem = "nw_it_mglove016"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(3, nHD)) // * 800 - 10000
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_it_mbracer008"; break;
|
|
case 2: sItem = "nw_it_mbracer004"; break;
|
|
case 3: sItem = "nw_it_mglove018"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(4, nHD)) // * 2500 - 16500
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_it_mbracer003"; break;
|
|
case 2: sItem = "nw_it_mbracer013"; break;
|
|
case 3: sItem = "nw_it_mglove023"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(5, nHD)) // * 8000 - 25000
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_it_mglove029"; break;
|
|
case 2: sItem = "nw_it_mglove019"; break;
|
|
case 3: sItem = "nw_it_mbracer005"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(6, nHD)) // * 16000 and up
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_it_mbracer006"; break;
|
|
case 2: sItem = "nw_it_mglove030"; break;
|
|
case 3: sItem = "nw_it_mglove020"; break;
|
|
}
|
|
|
|
}
|
|
if (sItem != "")
|
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
|
}
|
|
|
|
//Create Clothing for Monk/Wizard/Sorcerer
|
|
void CreateClothing(object oTarget, object oAdventurer)
|
|
{
|
|
string sItem = "";
|
|
|
|
int nRandom = Random(12) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_mcloth020"; break;
|
|
case 2: sItem = "nw_mcloth017"; break;
|
|
case 3: sItem = "nw_mcloth004"; break;
|
|
case 4: sItem = "nw_mcloth003"; break;
|
|
case 5: sItem = "nw_mcloth016"; break;
|
|
case 6: sItem = "nw_mcloth007"; break;
|
|
case 7: sItem = "nw_mcloth008"; break;
|
|
case 8: sItem = "nw_mcloth010"; break;
|
|
case 9: sItem = "nw_mcloth009"; break;
|
|
case 10: sItem = "nw_mcloth002"; break;
|
|
case 11: sItem = "nw_mcloth022"; break;
|
|
case 12: sItem = "nw_mcloth001"; break;
|
|
}
|
|
|
|
if (sItem != "")
|
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
|
}
|
|
|
|
//Create Light Armor based on Hit Dice
|
|
void CreateLightArmor(object oTarget, object oAdventurer)
|
|
{
|
|
string sItem = "";
|
|
int nHD = GetHitDice(oAdventurer);
|
|
|
|
if (GetRange(1, nHD)) // * 800
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_aarcl012"; break;
|
|
case 2: sItem = "nw_aarcl001"; break;
|
|
case 3: sItem = "nw_aarcl032"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(2, nHD)) // * 200 - 2500
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_maarcl079"; break;
|
|
case 2: sItem = "nw_maarcl087"; break;
|
|
case 3: sItem = "nw_maarcl013"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(3, nHD)) // * 800 - 10000
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_maarcl005"; break;
|
|
case 2: sItem = "nw_maarcl034"; break;
|
|
case 3: sItem = "nw_maarcl006"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(4, nHD)) // * 2500 - 16500
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_maarcl001"; break;
|
|
case 2: sItem = "nw_maarcl008"; break;
|
|
case 3: sItem = "nw_it_novel003"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(5, nHD)) // * 8000 - 25000
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_maarcl009"; break;
|
|
case 2: sItem = "nw_maarcl033"; break;
|
|
case 3: sItem = "nw_maarcl017"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(6, nHD)) // * 16000 and up
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_maarcl002"; break;
|
|
case 2: sItem = "nw_maarcl004"; break;
|
|
case 3: sItem = "nw_maarcl005"; break;
|
|
}
|
|
}
|
|
if (sItem != "")
|
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
|
}
|
|
|
|
//Create Medium Armor based on Hit Dice
|
|
void CreateMediumArmor(object oTarget, object oAdventurer)
|
|
{
|
|
|
|
string sItem = "";
|
|
int nHD = GetHitDice(oAdventurer);
|
|
|
|
if (GetRange(1, nHD)) // * 800
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_aarcl010"; break;
|
|
case 2: sItem = "nw_aarcl004"; break;
|
|
case 3: sItem = "nw_aarcl003"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(2, nHD)) // * 200 - 2500
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_maarcl058"; break;
|
|
case 2: sItem = "nw_maarcl065"; break;
|
|
case 3: sItem = "nw_maarcl073"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(3, nHD)) // * 800 - 10000
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_maarcl016"; break;
|
|
case 2: sItem = "nw_maarcl037"; break;
|
|
case 3: sItem = "nw_maarcl085"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(4, nHD)) // * 2500 - 16500
|
|
{
|
|
int nRandom = Random(2) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_maarcl040"; break;
|
|
case 2: sItem = "nw_maarcl061"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(5, nHD))
|
|
{
|
|
int nRandom = Random(1) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_maarcl039"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(6, nHD)) // * 16000 and up
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_maarcl015"; break;
|
|
case 2: sItem = "nw_maarcl010"; break;
|
|
case 3: sItem = "nw_maarcl014"; break;
|
|
}
|
|
|
|
}
|
|
if (sItem != "")
|
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
|
}
|
|
|
|
//Create Heavy Armor based on Hit Dice
|
|
void CreateHeavyArmor(object oTarget, object oAdventurer)
|
|
{
|
|
|
|
string sItem = "";
|
|
int nHD = GetHitDice(oAdventurer);
|
|
|
|
if (GetRange(1, nHD)) // * 800
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_maarcl051"; break;
|
|
case 2: sItem = "nw_maarcl050"; break;
|
|
case 3: sItem = "nw_maarcl052"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(2, nHD)) // * 200 - 2500
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_maarcl076"; break;
|
|
case 2: sItem = "nw_maarcl081"; break;
|
|
case 3: sItem = "nw_maarcl026"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(3, nHD)) // * 800 - 10000
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_maarcl018"; break;
|
|
case 2: sItem = "nw_maarcl080"; break;
|
|
case 3: sItem = "nw_maarcl042"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(4, nHD)) // * 2500 - 16500
|
|
{
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_maarcl063"; break;
|
|
case 2: sItem = "nw_maarcl062"; break;
|
|
case 3: sItem = "nw_maarcl028"; break;
|
|
}
|
|
|
|
}
|
|
else if (GetRange(5, nHD)) // * 8000 - 25000
|
|
{
|
|
|
|
int nRandom = Random(3) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_maarcl054"; break;
|
|
case 2: sItem = "nw_maarcl063"; break;
|
|
case 3: sItem = "nw_maarcl024"; break;
|
|
}
|
|
}
|
|
else if (GetRange(6, nHD)) // * 16000 and up
|
|
{
|
|
int nRandom = Random(2) + 1;
|
|
switch (nRandom)
|
|
{
|
|
case 1: sItem = "nw_maarcl025"; break;
|
|
case 2: sItem = "nw_maarcl027"; break;
|
|
}
|
|
|
|
}
|
|
if (sItem != "")
|
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
|
}
|
|
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
Creates personalized armor, amulet, or ring in chest.
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Rand Al'Thor
|
|
//:: Created On: August 2002
|
|
//:://////////////////////////////////////////////
|
|
|
|
void main()
|
|
{
|
|
object oLastOpener = GetLastOpener();
|
|
object oContainer = OBJECT_SELF;
|
|
|
|
if (GetLocalInt(OBJECT_SELF, "NW_L_OPENONCE") > 0 || GetIsObjectValid(oLastOpener) == FALSE)
|
|
{
|
|
return; // * abort treasure if no one opened the container
|
|
}
|
|
SetLocalInt(OBJECT_SELF, "NW_L_OPENONCE",1);
|
|
ShoutDisturbed();
|
|
|
|
// * Choose the armor type to create
|
|
int Random2 = Random(3) +1;
|
|
|
|
if (Random2 == 1)
|
|
CreateAmulet(oContainer, oLastOpener);
|
|
|
|
else if (Random2 == 2)
|
|
CreateRing(oContainer, oLastOpener);
|
|
|
|
else if (Random2 == 3)
|
|
{
|
|
if (GetClassByPosition(1, oLastOpener) == CLASS_TYPE_MONK)
|
|
{
|
|
int nRandom3 = Random(2) + 1;
|
|
switch (nRandom3)
|
|
{
|
|
case 1: CreateMonkGlove(oContainer, oLastOpener); break;
|
|
case 2: CreateClothing(oContainer, oLastOpener); break;
|
|
}
|
|
}
|
|
|
|
else if (GetClassByPosition(1, oLastOpener) == CLASS_TYPE_WIZARD ||
|
|
GetClassByPosition(1, oLastOpener) == CLASS_TYPE_SORCERER ||
|
|
GetClassByPosition(1, oLastOpener) == CLASS_TYPE_DRAGONFIRE_ADEPT ||
|
|
GetClassByPosition(1, oLastOpener) == CLASS_TYPE_DRAGON_SHAMAN ||
|
|
GetClassByPosition(1, oLastOpener) == CLASS_TYPE_DREAD_NECROMANCER ||
|
|
GetClassByPosition(1, oLastOpener) == CLASS_TYPE_BEGUILER ||
|
|
GetClassByPosition(1, oLastOpener) == CLASS_TYPE_SHADOWCASTER ||
|
|
GetClassByPosition(1, oLastOpener) == CLASS_TYPE_WARMAGE ||
|
|
GetClassByPosition(1, oLastOpener) == CLASS_TYPE_BINDER ||
|
|
GetClassByPosition(1, oLastOpener) == CLASS_TYPE_TRUENAMER ||
|
|
GetClassByPosition(1, oLastOpener) == CLASS_TYPE_WARLOCK)
|
|
|
|
CreateClothing(oContainer, oLastOpener);
|
|
|
|
else if (GetHasFeat(FEAT_ARMOR_PROFICIENCY_LIGHT, oLastOpener) == TRUE && GetHasFeat(FEAT_ARMOR_PROFICIENCY_MEDIUM, oLastOpener) == TRUE && GetHasFeat(FEAT_ARMOR_PROFICIENCY_HEAVY, oLastOpener) == TRUE)
|
|
{
|
|
int nRandom3 = Random(3) + 1;
|
|
switch (nRandom3)
|
|
{
|
|
case 1: CreateLightArmor(oContainer, oLastOpener); break;
|
|
case 2: CreateMediumArmor(oContainer, oLastOpener); break;
|
|
case 3: CreateHeavyArmor(oContainer, oLastOpener); break;
|
|
}
|
|
}
|
|
else if (GetHasFeat(FEAT_ARMOR_PROFICIENCY_LIGHT, oLastOpener) == TRUE && GetHasFeat(FEAT_ARMOR_PROFICIENCY_MEDIUM, oLastOpener) == TRUE)
|
|
{
|
|
int nRandom3 = Random(2) + 1;
|
|
switch (nRandom3)
|
|
{
|
|
case 1: CreateLightArmor(oContainer, oLastOpener); break;
|
|
case 2: CreateMediumArmor(oContainer, oLastOpener); break;
|
|
}
|
|
}
|
|
else if (GetHasFeat(FEAT_ARMOR_PROFICIENCY_LIGHT, oLastOpener) == TRUE)
|
|
CreateLightArmor(oContainer, oLastOpener);
|
|
}
|
|
}
|
|
|