Files
HeroesStone_PRC8/_module/nss/jw_treasure_gene.nss
Jaysyn904 1eefc84201 Initial Commit
Initial Commit.
2025-09-14 15:40:46 -04:00

2670 lines
41 KiB
Plaintext

//:://////////////////////////////////////////////////
//:: jw_treasure_gene.nss
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
// *
// Takes oShield and creates a random shield of the same type
// (ie small, large, tower)
object CreateRandomShield(object oShield);
void GenerateChestOpenedTreasure(object oChest=OBJECT_SELF);
void GenerateMonsterTreasure(object oMob=OBJECT_SELF);
// Gets the res ref of a random level 3 technique
string GetLevel3Technique();
// gets the resf ref of a random level 4 technique
string GetLevel4Technique();
// gets the resf ref of a random level 5 technique
string GetLevel5Technique();
// gets the resf ref of a random level 6 technique
string GetLevel6Technique();
// gets the resf ref of a random level 7 technique
string GetLevel7Technique();
//Gets the res ref of random trap component
string GetTrapComponent();
// Gets a random low scroll of levels 0 to 3
string GetLowLevelScroll();
// Gets a random low scroll of levels 4 to 6
string GetMidLevelScroll();
// Gets a random scroll of levels 7 to 9
string GetHighLevelScroll();
// Gets a random item players can use
string GetLowLevelToys();
// Gets a random item players can use
string GetHighLevelToys();
// Gets golem items, including the book
string GetGolemItems();
// Gets low level cash loot, including gems
string GetLowLevelCash();
// Gets medium Level cash loot, including gems
string GetMediumLevelCash();
// Gets high level cash loot
string GetHighLevelCash();
// Gets low level potion
string GetLowLevelPotion();
// Gets medium level potion
string GetMediumLevelPotion();
// Gets high level potion
string GetHighLevelPotion();
// Gets general junk
string GetGeneralJunk();
// Gets a random drink
string GetDrink();
// Generates one item of suitable chest treasure based on the level, which should be 1 to 4
string GenerateOneChestTreasure(int nLevel);
// Returns one suitable technique based on nLevel, 1 to 4;
string GetSuitableTechnique(int nLevel);
// Returns one scroll technique based on nLevel, 1 to 4;
string GetSuitableScroll(int nLevel);
// Returns one potion based on nLevel, 1 to 4;
string GetSuitablePotion(int nLevel);
// Returns one cash loot based on nLevel, 1 to 4;
string GetSuitableCash(int nLevel);
// Returns one cash loot based on nLevel, 1 to 4;
string GetSuitableToy(int nLevel);
// Generates one suitable item of monster treasure based on the level
string GenerateOneMobTreasure(int nLevel);
// Generates a shield - small, large, tower
string GetShield();
// Testing script for a chest which creates shields
void TestCreatesRandomShield();
#include "prc_inc_racial"
object CreateRandomShield(object oShield)
{
int nBaseType = GetBaseItemType(oShield);
int RandomShieldModel;
int nRandom;
// Small shields
if (nBaseType==BASE_ITEM_SMALLSHIELD)
{
nRandom=Random(22)+1;
switch (nRandom)
{
case 1:
RandomShieldModel=11;
break;
case 2:
RandomShieldModel=12;
break;
case 3:
RandomShieldModel=13;
break;
case 4:
RandomShieldModel=21;
break;
case 5:
RandomShieldModel=22;
break;
case 6:
RandomShieldModel=23;
break;
case 7:
RandomShieldModel=31;
break;
case 8:
RandomShieldModel=32;
break;
case 9:
RandomShieldModel=33;
break;
case 10:
RandomShieldModel=41;
break;
case 11:
RandomShieldModel=42;
break;
case 12:
RandomShieldModel=43;
break;
case 13:
RandomShieldModel=51;
break;
case 14:
RandomShieldModel=52;
break;
case 15:
RandomShieldModel=53;
break;
case 16:
RandomShieldModel=54;
break;
case 17:
RandomShieldModel=55;
break;
case 18:
RandomShieldModel=56;
break;
case 19:
RandomShieldModel=57;
break;
case 20:
RandomShieldModel=86;
break;
case 21:
RandomShieldModel=87;
break;
case 22:
RandomShieldModel=88;
break;
}
}
// End small shields
// large shields
else if (nBaseType==BASE_ITEM_LARGESHIELD)
{
// One in ten chance of boring shield
if (d10()==1)
{
nRandom=Random(12)+1;
switch (nRandom)
{
case 1:
RandomShieldModel=11;
break;
case 2:
RandomShieldModel=12;
break;
case 3:
RandomShieldModel=13;
break;
case 4:
RandomShieldModel=21;
break;
case 5:
RandomShieldModel=22;
break;
case 6:
RandomShieldModel=23;
break;
case 7:
RandomShieldModel=31;
break;
case 8:
RandomShieldModel=32;
break;
case 9:
RandomShieldModel=33;
break;
case 10:
RandomShieldModel=41;
break;
case 11:
RandomShieldModel=42;
break;
case 12:
RandomShieldModel=43;
break;
}
}
// end boring shields
else
{
RandomShieldModel=Random(205)+51;
}
while(RandomShieldModel==096)// (ik 18/06/05) blocks bad large shield model
RandomShieldModel=Random(205)+51;
}
// END LARGE SHIELDS
// End small shields
// large shields
else if (nBaseType==BASE_ITEM_TOWERSHIELD)
{
// One in ten chance of boring shield
if (d10()==1)
{
nRandom=Random(12)+1;
switch (nRandom)
{
case 1:
RandomShieldModel=11;
break;
case 2:
RandomShieldModel=12;
break;
case 3:
RandomShieldModel=13;
break;
case 4:
RandomShieldModel=21;
break;
case 5:
RandomShieldModel=22;
break;
case 6:
RandomShieldModel=23;
break;
case 7:
RandomShieldModel=31;
break;
case 8:
RandomShieldModel=32;
break;
case 9:
RandomShieldModel=33;
break;
case 10:
RandomShieldModel=41;
break;
case 11:
RandomShieldModel=42;
break;
case 12:
RandomShieldModel=43;
break;
}
}
// end boring shields
else if (d3()!=1)
{
RandomShieldModel=Random(103)+51;
}
else
{
RandomShieldModel=Random(49)+181;
}
while(RandomShieldModel==145||RandomShieldModel==67||RandomShieldModel==61||RandomShieldModel==194) // (ik 18/06/05) blocks bad towershield models
RandomShieldModel=Random(103)+51;
}
object oNew = CopyItemAndModify(oShield, ITEM_APPR_TYPE_SIMPLE_MODEL, 0, RandomShieldModel, TRUE);
if (GetIsObjectValid(oNew))
{
DestroyObject(oShield);
return oNew;
}
else
{
return oShield;
}
}
string GetShield()
{
string sString;
int nRandom=d100();
if (nRandom<50)
{
sString="jw_small_shield";
}
else
if (nRandom<80)
{
sString="jw_large_shield";
}
else
{
sString="jw_tower_shield";
}
return sString;
}
string GetSuitableToy(int nLevel)
{
string sString;
int nRandom=d100();
if (nLevel==1)
{
if (nRandom<90)
{
sString=GetLowLevelToys();
}
else
{
sString=GetHighLevelToys();
}
}
else
if (nLevel==2)
{
if (nRandom<70)
{
sString=GetLowLevelToys();
}
else
{
sString=GetHighLevelToys();
}
}
else
if (nLevel==3)
{
if (nRandom<50)
{
sString=GetLowLevelToys();
}
else
{
sString=GetHighLevelToys();
}
}
else
{
if (nRandom<30)
{
sString=GetLowLevelToys();
}
else
{
sString=GetHighLevelToys();
}
}
return sString;
}
string GetSuitableCash(int nLevel)
{
string sString;
int nRandom=d100();
if (nLevel==1)
{
if (nRandom<70)
{
sString=GetLowLevelCash();
}
else
{
sString=GetMediumLevelCash();
}
}
else
if (nLevel==2)
{
if (nRandom<40)
{
sString=GetLowLevelCash();
}
else
if (nRandom<80)
{
sString=GetMediumLevelCash();
}
else
{
sString=GetHighLevelCash();
}
}
else
if (nLevel==3)
{
if (nRandom<20)
{
sString=GetLowLevelCash();
}
else
if (nRandom<75)
{
sString=GetMediumLevelCash();
}
else
{
sString=GetHighLevelCash();
}
}
else
{
if (nRandom<50)
{
sString=GetMediumLevelCash();
}
else
{
sString=GetHighLevelCash();
}
}
return sString;
}
string GetSuitablePotion(int nLevel)
{
string sString;
int nRandom=d100();
if (nLevel==1)
{
if (nRandom<70)
{
sString=GetLowLevelPotion();
}
else
{
sString=GetMediumLevelPotion();
}
}
else
if (nLevel==2)
{
if (nRandom<40)
{
sString=GetLowLevelPotion();
}
else
if (nRandom<80)
{
sString=GetMediumLevelPotion();
}
else
{
sString=GetHighLevelPotion();
}
}
else
if (nLevel==3)
{
if (nRandom<20)
{
sString=GetLowLevelPotion();
}
else
if (nRandom<75)
{
sString=GetMediumLevelPotion();
}
else
{
sString=GetHighLevelPotion();
}
}
else
{
if (nRandom<10)
{
sString=GetLowLevelPotion();
}
else
if (nRandom<70)
{
sString=GetMediumLevelPotion();
}
else
{
sString=GetHighLevelPotion();
}
}
return sString;
}
string GetSuitableScroll(int nLevel)
{
string sString;
int nRandom=d100();
if (nLevel==1)
{
if (nRandom<70)
{
sString=GetLowLevelScroll();
}
else
{
sString=GetMidLevelScroll();
}
}
else
if (nLevel==2)
{
if (nRandom<40)
{
sString=GetLowLevelScroll();
}
else
if (nRandom<80)
{
sString=GetMidLevelScroll();
}
else
{
sString=GetHighLevelScroll();
}
}
else
if (nLevel==3)
{
if (nRandom<20)
{
sString=GetLowLevelScroll();
}
else
if (nRandom<75)
{
sString=GetMidLevelScroll();
}
else
{
sString=GetHighLevelScroll();
}
}
else
{
if (nRandom<10)
{
sString=GetLowLevelScroll();
}
else
if (nRandom<70)
{
sString=GetMidLevelScroll();
}
else
{
sString=GetHighLevelScroll();
}
}
return sString;
}
string GetSuitableTechnique(int nLevel)
{
string sString;
int nRandom=d100();
if (nLevel==1)
{
sString=GetLevel3Technique();
}
else
if (nLevel==2)
{
if (nRandom<80)
{
sString=GetLevel3Technique();
}
else
{
sString=GetLevel4Technique();
}
}
else
if (nLevel==3)
{
if (nRandom<70)
{
sString=GetLevel3Technique();
}
else
if (nRandom<90)
{
sString=GetLevel4Technique();
}
else
{
sString=GetLevel5Technique();
}
}
else
{
if (nRandom<60)
{
sString=GetLevel3Technique();
}
else
if (nRandom<84)
{
sString=GetLevel4Technique();
}
else
if (nRandom<94)
{
sString=GetLevel5Technique();
}
else
if (nRandom<98)
{
sString=GetLevel6Technique();
}
else
{
sString=GetLevel7Technique();
}
}
return sString;
}
string GetLevel3Technique()
{
string sString;
int nRandom=Random(126)+1;
switch (nRandom)
{
case 1:
sString="jw_pat_wep_007";
break;
case 2:
sString="jw_pat_wep_011";
break;
case 3:
sString="jw_pat_wep_013";
break;
case 4:
sString="jw_pat_wep_014";
break;
case 5:
sString="jw_pat_wep_019";
break;
case 6:
sString="jw_pat_wep_021";
break;
case 7:
sString="jw_pat_wep_022";
break;
case 8:
sString="jw_pat_wep_025";
break;
case 9:
sString="jw_pat_wep_026";
break;
case 10:
sString="jw_pat_wep_028";
break;
case 11:
sString="jw_pat_wep_035";
break;
case 12:
sString="jw_pat_wep_037";
break;
case 13:
sString="jw_pat_wep_038";
break;
case 14:
sString="jw_pat_wep_041";
break;
case 15:
sString="jw_pat_wep_042";
break;
case 16:
sString="jw_pat_wep_044";
break;
case 17:
sString="jw_pat_wep_049";
break;
case 18:
sString="jw_pat_wep_050";
break;
case 19:
sString="jw_pat_wep_052";
break;
case 20:
sString="jw_pat_wep_056";
break;
case 21:
sString="jw_pat_wep_067";
break;
case 22:
sString="jw_pat_wep_069";
break;
case 23:
sString="jw_pat_wep_070";
break;
case 24:
sString="jw_pat_wep_073";
break;
case 25:
sString="jw_pat_wep_074";
break;
case 26:
sString="jw_pat_wep_076";
break;
case 27:
sString="jw_pat_wep_081";
break;
case 28:
sString="jw_pat_wep_082";
break;
case 29:
sString="jw_pat_wep_084";
break;
case 30:
sString="jw_pat_wep_088";
break;
case 31:
sString="jw_pat_wep_097";
break;
case 32:
sString="jw_pat_wep_098";
break;
case 33:
sString="jw_pat_wep_100";
break;
case 34:
sString="jw_pat_wep_104";
break;
case 35:
sString="jw_pat_wep_112";
break;
case 36:
sString="jw_pat_arm_011";
break;
case 37:
sString="jw_pat_arm_013";
break;
case 38:
sString="jw_pat_arm_014";
break;
case 39:
sString="jw_pat_arm_019";
break;
case 40:
sString="jw_pat_arm_021";
break;
case 41:
sString="jw_pat_arm_022";
break;
case 42:
sString="jw_pat_arm_025";
break;
case 43:
sString="jw_pat_arm_026";
break;
case 44:
sString="jw_pat_arm_028";
break;
case 45:
sString="jw_pat_arm_035";
break;
case 46:
sString="jw_pat_arm_037";
break;
case 47:
sString="jw_pat_arm_038";
break;
case 48:
sString="jw_pat_arm_041";
break;
case 49:
sString="jw_pat_arm_042";
break;
case 50:
sString="jw_pat_arm_044";
break;
case 51:
sString="jw_pat_arm_049";
break;
case 52:
sString="jw_pat_arm_050";
break;
case 53:
sString="jw_pat_arm_052";
break;
case 54:
sString="jw_pat_arm_056";
break;
case 55:
sString="jw_pat_arm_067";
break;
case 56:
sString="jw_pat_arm_069";
break;
case 57:
sString="jw_pat_arm_070";
break;
case 58:
sString="jw_pat_arm_073";
break;
case 59:
sString="jw_pat_arm_074";
break;
case 60:
sString="jw_pat_arm_076";
break;
case 61:
sString="jw_pat_arm_081";
break;
case 62:
sString="jw_pat_arm_082";
break;
case 63:
sString="jw_pat_arm_084";
break;
case 64:
sString="jw_pat_arm_088";
break;
case 65:
sString="jw_pat_arm_097";
break;
case 66:
sString="jw_pat_arm_098";
break;
case 67:
sString="jw_pat_arm_100";
break;
case 68:
sString="jw_pat_arm_104";
break;
case 69:
sString="jw_pat_arm_112";
break;
case 70:
sString="jw_pat_rin_007";
break;
case 71:
sString="jw_pat_rin_011";
break;
case 72:
sString="jw_pat_rin_013";
break;
case 73:
sString="jw_pat_rin_014";
break;
case 74:
sString="jw_pat_rin_019";
break;
case 75:
sString="jw_pat_rin_021";
break;
case 76:
sString="jw_pat_rin_022";
break;
case 77:
sString="jw_pat_rin_025";
break;
case 78:
sString="jw_pat_rin_026";
break;
case 79:
sString="jw_pat_rin_028";
break;
case 80:
sString="jw_pat_rin_035";
break;
case 81:
sString="jw_pat_rin_037";
break;
case 82:
sString="jw_pat_rin_038";
break;
case 83:
sString="jw_pat_rin_041";
break;
case 84:
sString="jw_pat_rin_042";
break;
case 85:
sString="jw_pat_rin_044";
break;
case 86:
sString="jw_pat_rin_049";
break;
case 87:
sString="jw_pat_rin_050";
break;
case 88:
sString="jw_pat_rin_052";
break;
case 89:
sString="jw_pat_rin_056";
break;
case 90:
sString="jw_pat_rin_067";
break;
case 91:
sString="jw_pat_rin_069";
break;
case 92:
sString="jw_pat_rin_070";
break;
case 93:
sString="jw_pat_rin_073";
break;
case 94:
sString="jw_pat_rin_074";
break;
case 95:
sString="jw_pat_rin_076";
break;
case 96:
sString="jw_pat_rin_081";
break;
case 97:
sString="jw_pat_rin_082";
break;
case 98:
sString="jw_pat_rin_084";
break;
case 99:
sString="jw_pat_rin_088";
break;
case 100:
sString="jw_pat_rin_097";
break;
case 101:
sString="jw_pat_rin_098";
break;
case 102:
sString="jw_pat_rin_100";
break;
case 103:
sString="jw_pat_rin_104";
break;
case 104:
sString="jw_pat_rin_112";
break;
case 105:
sString="jw_pat_clo_007";
break;
case 106:
sString="jw_pat_clo_011";
break;
case 107:
sString="jw_pat_clo_013";
break;
case 108:
sString="jw_pat_clo_014";
break;
case 109:
sString="jw_pat_clo_019";
break;
case 110:
sString="jw_pat_clo_021";
break;
case 111:
sString="jw_pat_clo_022";
break;
case 112:
sString="jw_pat_clo_025";
break;
case 113:
sString="jw_pat_clo_026";
break;
case 114:
sString="jw_pat_clo_028";
break;
case 115:
sString="jw_pat_clo_035";
break;
case 116:
sString="jw_pat_clo_037";
break;
case 117:
sString="jw_pat_clo_038";
break;
case 118:
sString="jw_pat_clo_041";
break;
case 119:
sString="jw_pat_clo_042";
break;
case 120:
sString="jw_pat_clo_044";
break;
case 121:
sString="jw_pat_clo_049";
break;
case 122:
sString="jw_pat_gau_007";
break;
case 123:
sString="jw_pat_gau_011";
break;
case 124:
sString="jw_pat_gau_013";
break;
case 125:
sString="jw_pat_gau_014";
break;
case 126:
sString="jw_pat_arm_007";
break;
}
return sString;
}
string GetLevel4Technique()
{
string sString;
int nRandom=Random(129)+1;
switch (nRandom)
{
case 1:
sString="jw_pat_wep_015";
break;
case 2:
sString="jw_pat_wep_023";
break;
case 3:
sString="jw_pat_wep_027";
break;
case 4:
sString="jw_pat_wep_029";
break;
case 5:
sString="jw_pat_wep_030";
break;
case 6:
sString="jw_pat_wep_039";
break;
case 7:
sString="jw_pat_wep_043";
break;
case 8:
sString="jw_pat_wep_045";
break;
case 9:
sString="jw_pat_wep_046";
break;
case 10:
sString="jw_pat_wep_051";
break;
case 11:
sString="jw_pat_wep_053";
break;
case 12:
sString="jw_pat_wep_054";
break;
case 13:
sString="jw_pat_wep_057";
break;
case 14:
sString="jw_pat_wep_058";
break;
case 15:
sString="jw_pat_wep_060";
break;
case 16:
sString="jw_pat_wep_071";
break;
case 17:
sString="jw_pat_wep_075";
break;
case 18:
sString="jw_pat_wep_077";
break;
case 19:
sString="jw_pat_wep_078";
break;
case 20:
sString="jw_pat_wep_083";
break;
case 21:
sString="jw_pat_wep_085";
break;
case 22:
sString="jw_pat_wep_086";
break;
case 23:
sString="jw_pat_wep_089";
break;
case 24:
sString="jw_pat_wep_090";
break;
case 25:
sString="jw_pat_wep_092";
break;
case 26:
sString="jw_pat_wep_099";
break;
case 27:
sString="jw_pat_wep_101";
break;
case 28:
sString="jw_pat_wep_102";
break;
case 29:
sString="jw_pat_wep_105";
break;
case 30:
sString="jw_pat_wep_106";
break;
case 31:
sString="jw_pat_wep_108";
break;
case 32:
sString="jw_pat_wep_113";
break;
case 33:
sString="jw_pat_wep_114";
break;
case 34:
sString="jw_pat_wep_115";
break;
case 35:
sString="jw_pat_wep_116";
break;
case 36:
sString="jw_pat_wep_120";
break;
case 37:
sString="jw_pat_arm_015";
break;
case 38:
sString="jw_pat_arm_023";
break;
case 39:
sString="jw_pat_arm_027";
break;
case 40:
sString="jw_pat_arm_029";
break;
case 41:
sString="jw_pat_arm_030";
break;
case 42:
sString="jw_pat_arm_039";
break;
case 43:
sString="jw_pat_arm_043";
break;
case 44:
sString="jw_pat_arm_045";
break;
case 45:
sString="jw_pat_arm_046";
break;
case 46:
sString="jw_pat_arm_051";
break;
case 47:
sString="jw_pat_arm_053";
break;
case 48:
sString="jw_pat_arm_054";
break;
case 49:
sString="jw_pat_arm_057";
break;
case 50:
sString="jw_pat_arm_058";
break;
case 51:
sString="jw_pat_arm_060";
break;
case 52:
sString="jw_pat_arm_071";
break;
case 53:
sString="jw_pat_arm_075";
break;
case 54:
sString="jw_pat_arm_077";
break;
case 55:
sString="jw_pat_arm_078";
break;
case 56:
sString="jw_pat_arm_083";
break;
case 57:
sString="jw_pat_arm_085";
break;
case 58:
sString="jw_pat_arm_086";
break;
case 59:
sString="jw_pat_arm_089";
break;
case 60:
sString="jw_pat_arm_090";
break;
case 61:
sString="jw_pat_arm_092";
break;
case 62:
sString="jw_pat_arm_099";
break;
case 63:
sString="jw_pat_arm_101";
break;
case 64:
sString="jw_pat_arm_102";
break;
case 65:
sString="jw_pat_arm_105";
break;
case 66:
sString="jw_pat_arm_106";
break;
case 67:
sString="jw_pat_arm_108";
break;
case 68:
sString="jw_pat_arm_113";
break;
case 69:
sString="jw_pat_arm_114";
break;
case 70:
sString="jw_pat_arm_115";
break;
case 71:
sString="jw_pat_arm_116";
break;
case 72:
sString="jw_pat_arm_120";
break;
case 73:
sString="jw_pat_rin_015";
break;
case 74:
sString="jw_pat_rin_023";
break;
case 75:
sString="jw_pat_rin_027";
break;
case 76:
sString="jw_pat_rin_029";
break;
case 77:
sString="jw_pat_rin_030";
break;
case 78:
sString="jw_pat_rin_039";
break;
case 79:
sString="jw_pat_rin_043";
break;
case 80:
sString="jw_pat_rin_045";
break;
case 81:
sString="jw_pat_rin_046";
break;
case 82:
sString="jw_pat_rin_051";
break;
case 83:
sString="jw_pat_rin_053";
break;
case 84:
sString="jw_pat_rin_054";
break;
case 85:
sString="jw_pat_rin_057";
break;
case 86:
sString="jw_pat_rin_058";
break;
case 87:
sString="jw_pat_rin_060";
break;
case 88:
sString="jw_pat_rin_071";
break;
case 89:
sString="jw_pat_rin_075";
break;
case 90:
sString="jw_pat_rin_077";
break;
case 91:
sString="jw_pat_rin_078";
break;
case 92:
sString="jw_pat_rin_083";
break;
case 93:
sString="jw_pat_rin_085";
break;
case 94:
sString="jw_pat_rin_086";
break;
case 95:
sString="jw_pat_rin_089";
break;
case 96:
sString="jw_pat_rin_090";
break;
case 97:
sString="jw_pat_rin_092";
break;
case 98:
sString="jw_pat_rin_099";
break;
case 99:
sString="jw_pat_rin_101";
break;
case 100:
sString="jw_pat_rin_102";
break;
case 101:
sString="jw_pat_rin_105";
break;
case 102:
sString="jw_pat_rin_106";
break;
case 103:
sString="jw_pat_rin_108";
break;
case 104:
sString="jw_pat_rin_113";
break;
case 105:
sString="jw_pat_rin_114";
break;
case 106:
sString="jw_pat_rin_115";
break;
case 107:
sString="jw_pat_rin_116";
break;
case 108:
sString="jw_pat_rin_120";
break;
case 109:
sString="jw_pat_clo_015";
break;
case 110:
sString="jw_pat_clo_023";
break;
case 111:
sString="jw_pat_clo_027";
break;
case 112:
sString="jw_pat_clo_029";
break;
case 113:
sString="jw_pat_clo_030";
break;
case 114:
sString="jw_pat_clo_039";
break;
case 115:
sString="jw_pat_clo_043";
break;
case 116:
sString="jw_pat_clo_045";
break;
case 117:
sString="jw_pat_clo_046";
break;
case 118:
sString="jw_pat_clo_051";
break;
case 119:
sString="jw_pat_clo_053";
break;
case 120:
sString="jw_pat_clo_054";
break;
case 121:
sString="jw_pat_clo_057";
break;
case 122:
sString="jw_pat_clo_058";
break;
case 123:
sString="jw_pat_clo_060";
break;
case 124:
sString="jw_pat_clo_071";
break;
case 125:
sString="jw_pat_clo_075";
break;
case 126:
sString="jw_pat_gau_015";
break;
case 127:
sString="jw_pat_gau_023";
break;
case 128:
sString="jw_pat_gau_027";
break;
case 129:
sString="jw_pat_gau_029";
break;
}
return sString;
}
string GetLevel5Technique()
{
string sString;
int nRandom=Random(72)+1;
switch (nRandom)
{
case 1:
sString="jw_pat_wep_031";
break;
case 2:
sString="jw_pat_wep_047";
break;
case 3:
sString="jw_pat_wep_055";
break;
case 4:
sString="jw_pat_wep_059";
break;
case 5:
sString="jw_pat_wep_061";
break;
case 6:
sString="jw_pat_wep_062";
break;
case 7:
sString="jw_pat_wep_079";
break;
case 8:
sString="jw_pat_wep_087";
break;
case 9:
sString="jw_pat_wep_091";
break;
case 10:
sString="jw_pat_wep_093";
break;
case 11:
sString="jw_pat_wep_094";
break;
case 12:
sString="jw_pat_wep_103";
break;
case 13:
sString="jw_pat_wep_107";
break;
case 14:
sString="jw_pat_wep_109";
break;
case 15:
sString="jw_pat_wep_110";
break;
case 16:
sString="jw_pat_wep_117";
break;
case 17:
sString="jw_pat_wep_118";
break;
case 18:
sString="jw_pat_wep_121";
break;
case 19:
sString="jw_pat_wep_122";
break;
case 20:
sString="jw_pat_wep_124";
break;
case 21:
sString="jw_pat_arm_031";
break;
case 22:
sString="jw_pat_arm_047";
break;
case 23:
sString="jw_pat_arm_055";
break;
case 24:
sString="jw_pat_arm_059";
break;
case 25:
sString="jw_pat_arm_061";
break;
case 26:
sString="jw_pat_arm_062";
break;
case 27:
sString="jw_pat_arm_079";
break;
case 28:
sString="jw_pat_arm_087";
break;
case 29:
sString="jw_pat_arm_091";
break;
case 30:
sString="jw_pat_arm_093";
break;
case 31:
sString="jw_pat_arm_094";
break;
case 32:
sString="jw_pat_arm_103";
break;
case 33:
sString="jw_pat_arm_107";
break;
case 34:
sString="jw_pat_arm_109";
break;
case 35:
sString="jw_pat_arm_110";
break;
case 36:
sString="jw_pat_arm_117";
break;
case 37:
sString="jw_pat_arm_118";
break;
case 38:
sString="jw_pat_arm_121";
break;
case 39:
sString="jw_pat_arm_122";
break;
case 40:
sString="jw_pat_arm_124";
break;
case 41:
sString="jw_pat_rin_031";
break;
case 42:
sString="jw_pat_rin_047";
break;
case 43:
sString="jw_pat_rin_055";
break;
case 44:
sString="jw_pat_rin_059";
break;
case 45:
sString="jw_pat_rin_061";
break;
case 46:
sString="jw_pat_rin_062";
break;
case 47:
sString="jw_pat_rin_079";
break;
case 48:
sString="jw_pat_rin_087";
break;
case 49:
sString="jw_pat_rin_091";
break;
case 50:
sString="jw_pat_rin_093";
break;
case 51:
sString="jw_pat_rin_094";
break;
case 52:
sString="jw_pat_rin_103";
break;
case 53:
sString="jw_pat_rin_107";
break;
case 54:
sString="jw_pat_rin_109";
break;
case 55:
sString="jw_pat_rin_110";
break;
case 56:
sString="jw_pat_rin_117";
break;
case 57:
sString="jw_pat_rin_118";
break;
case 58:
sString="jw_pat_rin_121";
break;
case 59:
sString="jw_pat_rin_122";
break;
case 60:
sString="jw_pat_rin_124";
break;
case 61:
sString="jw_pat_clo_031";
break;
case 62:
sString="jw_pat_clo_047";
break;
case 63:
sString="jw_pat_clo_055";
break;
case 64:
sString="jw_pat_clo_059";
break;
case 65:
sString="jw_pat_clo_061";
break;
case 66:
sString="jw_pat_clo_062";
break;
case 67:
sString="jw_pat_clo_079";
break;
case 68:
sString="jw_pat_clo_087";
break;
case 69:
sString="jw_pat_gau_031";
break;
case 70:
sString="jw_pat_gau_047";
break;
case 71:
sString="jw_pat_gau_055";
break;
case 72:
sString="jw_pat_gau_059";
break;
}
return sString;
}
string GetLevel6Technique()
{
string sString;
int nRandom=Random(27)+1;
switch (nRandom)
{
case 1:
sString="jw_pat_wep_063";
break;
case 2:
sString="jw_pat_wep_095";
break;
case 3:
sString="jw_pat_wep_111";
break;
case 4:
sString="jw_pat_wep_110";
break;
case 5:
sString="jw_pat_wep_123";
break;
case 6:
sString="jw_pat_wep_125";
break;
case 7:
sString="jw_pat_wep_126";
break;
case 8:
sString="jw_pat_arm_063";
break;
case 9:
sString="jw_pat_arm_095";
break;
case 10:
sString="jw_pat_arm_111";
break;
case 11:
sString="jw_pat_arm_110";
break;
case 12:
sString="jw_pat_arm_123";
break;
case 13:
sString="jw_pat_arm_125";
break;
case 14:
sString="jw_pat_arm_126";
break;
case 15:
sString="jw_pat_rin_063";
break;
case 16:
sString="jw_pat_rin_095";
break;
case 17:
sString="jw_pat_rin_111";
break;
case 18:
sString="jw_pat_rin_110";
break;
case 19:
sString="jw_pat_rin_123";
break;
case 20:
sString="jw_pat_rin_125";
break;
case 21:
sString="jw_pat_rin_126";
break;
case 22:
sString="jw_pat_clo_063";
break;
case 23:
sString="jw_pat_clo_095";
break;
case 24:
sString="jw_pat_clo_111";
break;
case 25:
sString="jw_pat_gau_063";
break;
case 26:
sString="jw_pat_gau_095";
break;
case 27:
sString="jw_pat_gau_111";
break;
}
return sString;
}
string GetLevel7Technique()
{
string sString;
int nRandom=Random(5)+1;
switch (nRandom)
{
case 1:
sString="jw_pat_wep_127";
break;
case 2:
sString="jw_pat_arm_127";
break;
case 3:
sString="jw_pat_rin_127";
break;
case 4:
sString="jw_pat_clo_127";
break;
case 5:
sString="jw_pat_gau_127";
break;
}
return sString;
}
string GetTrapComponent()
{
string sString;
int nRandom=Random(5)+1;
switch (nRandom)
{
case 1:
sString="etr_nature";
break;
case 2:
sString="etr_spike";
break;
case 3:
sString="etr_holy";
break;
case 4:
sString="etr_gas";
break;
case 5:
sString="etr_sonic";
break;
}
return sString;
}
string GetLowLevelScroll()
{
string sString;
// Level is 0 to 3
int nLevel=Random(4);
int nNumber;
if (nLevel==0)
{
nNumber=Random(10)+1;
}
else
if (nLevel==1)
{
nNumber=Random(40)+1;
}
else
if (nLevel==2)
{
nNumber=Random(41)+1;
}
else
if (nLevel==3)
{
nNumber=Random(50)+1;
}
sString="jw_scroll_"+IntToString(nLevel)+"_"+IntToString(nNumber);
return sString;
}
string GetMidLevelScroll()
{
string sString;
// Level is 4 to 6
int nLevel=Random(3)+4;
int nNumber;
if (nLevel==4)
{
nNumber=Random(29)+1;
}
else
if (nLevel==5)
{
nNumber=Random(29)+1;
}
else
if (nLevel==6)
{
nNumber=Random(29)+1;
}
sString="jw_scroll_"+IntToString(nLevel)+"_"+IntToString(nNumber);
return sString;
}
string GetHighLevelScroll()
{
string sString;
// Level is 7 to 9
int nLevel=Random(3)+7;
int nNumber;
if (nLevel==7)
{
nNumber=Random(17)+1;
}
else
if (nLevel==8)
{
nNumber=Random(19)+1;
}
else
if (nLevel==9)
{
nNumber=Random(21)+1;
}
sString="jw_scroll_"+IntToString(nLevel)+"_"+IntToString(nNumber);
return sString;
}
string GetLowLevelToys()
{
int nRandom=Random(17)+1;
string sString;
switch (nRandom)
{
case 1:
sString="jw_ioun_557";
break;
case 2:
sString="jw_ioun_558";
break;
case 3:
sString="jw_ioun_554";
break;
case 4:
sString="jw_ioun_555";
break;
case 5:
sString="jw_ioun_559";
break;
case 6:
sString="jw_ioun_560";
break;
case 7:
sString="jw_ioun_556";
break;
case 8:
sString="jw_dwarf_potio";
break;
case 9:
sString="jw_garrote1";
break;
case 10:
sString="jw_garrote2";
break;
case 11:
sString="jw_kaim";
break;
case 12:
sString="jw_blank_scroll";
break;
case 13:
sString="ccr0_xx_xx_bl_dq";
break;
case 14:
sString="NW_IT_PICKS001";
break;
case 15:
sString="NW_IT_PICKS002";
break;
case 16:
sString="jw_appraiser";
break;
case 17:
sString="ccr0_xx_xx_bl_dr";
break;
}
return sString;
}
string GetHighLevelToys()
{
int nRandom=Random(8)+1;
string sString;
switch (nRandom)
{
case 1:
sString="jw_garrote3";
break;
case 2:
sString="jw_garrote4";
break;
case 3:
sString="jw_branc_giv";
break;
case 4:
sString="ccr0_xx_xx_bl_dr";
break;
case 5:
sString="NW_IT_PICKS003";
break;
case 6:
sString="jw_barb_forceb";
break;
case 7:
sString="jw_elis_instr";
break;
case 8:
sString="ccr0_xx_xx_bl_ds";
break;
}
return sString;
}
string GetGolemItems()
{
if (Random(150)==1)
{
// The book
return "jw_golem_book";
}
string sString;
int nRandom=Random(3)+1;
switch (nRandom)
{
case 1:
sString="jw_golem_head";
break;
case 2:
sString="jw_golem_power";
break;
case 3:
sString="jw_golem_chest";
break;
}
return sString;
}
string GetLowLevelCash()
{
string sString;
int nRandom=Random(17)+1;
switch (nRandom)
{
case 1:
sString="NW_IT_GEM007";
break;
case 2:
sString="NW_IT_GEM007";
break;
case 3:
sString="NW_IT_GEM002";
break;
case 4:
sString="NW_IT_GEM014";
break;
case 5:
sString="NW_IT_GEM004";
break;
case 6:
sString="NW_IT_GEM003";
break;
case 7:
sString="NW_IT_GEM015";
break;
case 8:
sString="jw_loot_9";
break;
case 9:
sString="jw_loot_7";
break;
case 10:
sString="mrxtreasure039";
break;
case 11:
sString="mrxtreasure027";
break;
case 12:
sString="mrxtreasure095";
break;
case 13:
sString="mrxtreasure037";
break;
case 14:
sString="mrxtreasure049";
break;
case 15:
sString="mrxtreasure056";
break;
case 16:
sString="mrxtreasure070";
break;
case 17:
sString="mrxtreasure061";
break;
}
return sString;
}
string GetMediumLevelCash()
{
string sString;
int nRandom=Random(13)+1;
switch (nRandom)
{
case 1:
sString="NW_IT_GEM011";
break;
case 2:
sString="jw_loot_10";
break;
case 3:
sString="jw_loot_8";
break;
case 4:
sString="jw_loot_6";
break;
case 5:
sString="jw_loot_4";
break;
case 6:
sString="jw_loot_3";
break;
case 7:
sString="jw_loot_1";
break;
case 8:
sString="jw_100r_9";
break;
case 9:
sString="jw_100r_8";
break;
case 10:
sString="mrxtreasure013";
break;
case 11:
sString="mrxtreasure074";
break;
case 12:
sString="mrxtreasure067";
break;
case 13:
sString="mrxtreasure019";
break;
}
return sString;
}
string GetHighLevelCash()
{
string sString;
int nRandom=Random(7)+1;
switch (nRandom)
{
case 1:
sString="jw_700r_9";
break;
case 2:
sString="jw_loot_2";
break;
case 3:
sString="jw_loot_5";
break;
case 4:
sString="jw_loot_11";
break;
case 5:
sString="mrxtreasure020";
break;
case 6:
sString="mrxtreasure041";
break;
case 7:
sString="mrxtreasure021";
break;
}
return sString;
}
string GetLowLevelPotion()
{
string sString;
int nRandom=Random(12)+1;
switch (nRandom)
{
case 1:
sString="NW_IT_MPOTION020";
break;
case 2:
sString="NW_IT_MPOTION016";
break;
case 3:
sString="NW_IT_MPOTION020";
break;
case 4:
sString="NW_IT_MPOTION014";
break;
case 5:
sString="NW_IT_MPOTION010";
break;
case 6:
sString="NW_IT_MPOTION017";
break;
case 7:
sString="X2_IT_MPOTION001";
break;
case 8:
sString="NW_IT_MPOTION018";
break;
case 9:
sString="ptn_rogscunn";
break;
case 10:
sString="ptn_minelres";
break;
case 11:
sString="ptn_eavesdrop";
break;
case 12:
sString="ptn_drowsight";
break;
}
return sString;
}
string GetMediumLevelPotion()
{
string sString;
int nRandom=Random(10)+1;
switch (nRandom)
{
case 1:
sString="NW_IT_MPOTION002";
break;
case 2:
sString="NW_IT_MPOTION005";
break;
case 3:
sString="NW_IT_MPOTION009";
break;
case 4:
sString="NW_IT_MPOTION015";
break;
case 5:
sString="NW_IT_MPOTION007";
break;
case 6:
sString="X2_IT_MPOTION002";
break;
case 7:
sString="ptn_negprot";
break;
case 8:
sString="ptn_unfettered";
break;
case 9:
sString="ptn_burnretort";
break;
case 10:
sString="ptn_displace";
break;
}
return sString;
}
string GetHighLevelPotion()
{
string sString;
int nRandom=Random(5)+1;
switch (nRandom)
{
case 1:
sString="NW_IT_MPOTION013";
break;
case 2:
sString="NW_IT_MPOTION008";
break;
case 3:
sString="NW_IT_MPOTION004";
break;
case 4:
sString="ptn_firebreath";
break;
case 5:
sString="ptn_mystabs";
break;
}
return sString;
}
string GetGeneralJunk()
{
string sString;
int nRandom=Random(24)+1;
switch (nRandom)
{
case 1:
sString="jw_lantern";
break;
case 2:
sString="jw_candle";
break;
case 3:
sString="jw_bard_lute";
break;
case 4:
sString="jw_bard_flute";
break;
case 5:
sString="jw_bard_tamb";
break;
case 6:
sString="jw_book16";
break;
case 7:
sString="jw_book2";
break;
case 8:
sString="jw_book4";
break;
case 9:
sString="jw_wildm_book";
break;
case 10:
sString="jw_dwarf_book4";
break;
case 11:
sString="jw_book6";
break;
case 12:
sString="jw_book7";
break;
case 13:
sString="jw_dwarf_book6";
break;
case 14:
sString="jw_book8";
break;
case 15:
sString="jw_book5";
break;
case 16:
sString="jw_bright_book";
break;
case 17:
sString="jw_waukeen_book";
break;
case 18:
sString="jw_dragon_book";
break;
case 19:
sString="jw_book_taxcol";
break;
case 20:
sString="jw_lootbox1";
break;
case 21:
sString="jw_lootbox2";
break;
case 22:
sString="jw_lootbox3";
break;
case 23:
sString="jw_battles_book";
break;
case 24:
sString="ccr0_xx_xx_xx_b9"; // glass bottle
break;
}
return sString;
}
string GetDrink()
{
return "jw_drink_"+IntToString(Random(30)+1);
}
string GenerateOneChestTreasure(int nLevel)
{
string sString;
int nRandom=d100();
if (nRandom<5)
{
sString=GetSuitableTechnique(nLevel);
}
else
if (nRandom<10)
{
sString=GetGolemItems();
}
else
if (nRandom<14)
{
sString=GetTrapComponent();
}
else
if (nRandom<38)
{
sString=GetSuitableScroll(nLevel);
}
else
if (nRandom<47)
{
sString=GetSuitablePotion(nLevel);
}
else
if (nRandom<72)
{
sString=GetSuitableCash(nLevel);
}
else
if (nRandom<73)
{
sString=GetDrink();
}
else
if (nRandom<78)
{
sString=GetGeneralJunk();
}
else if (nRandom<93)
{
sString=GetSuitableToy(nLevel);
}
else
{
sString=GetShield();
}
return sString;
}
string GenerateOneMobTreasure(int nLevel)
{
string sString;
int nRandom=d100();
if (nRandom<10)
{
sString=GetTrapComponent();
}
else
if (nRandom<22)
{
sString=GetSuitableScroll(nLevel);
}
else
if (nRandom<45)
{
sString=GetSuitablePotion(nLevel);
}
else
if (nRandom<68)
{
sString=GetSuitableCash(nLevel);
}
else
if (nRandom<70)
{
sString=GetDrink();
}
else
if (nRandom<85)
{
sString=GetGeneralJunk();
}
else
{
sString=GetSuitableToy(nLevel);
}
return sString;
}
void GenerateChestOpenedTreasure(object oChest=OBJECT_SELF)
{
object oKiller = GetLastKiller();
if (GetIsObjectValid(oKiller) == TRUE)
{
// Create placeholder to stop a new chest spawning
object oPlace=CreateObject(OBJECT_TYPE_PLACEABLE,"jw_placeholder",GetLocation(oChest));
SetLocalObject(GetNearestObjectByTag("jw_place_box",oChest),"placeable",oPlace);
SetLocalInt(oPlace,"jw_hidden_int",TRUE);
}
if (GetLocalInt(oChest,"chest_done") == 1)
{
return;
//// This chest is done, forget it
}
object oPC=GetLastOpenedBy();
SetLocalInt(oChest,"chest_done",1);
if (d3()==1)
{
// empty sorry
if (!GetIsObjectValid(oKiller))
{
FloatingTextStringOnCreature("Empty",oPC);
}
return;
}
int nNumItems;
int nDestroyed=FALSE;
if (GetIsObjectValid(oKiller) == TRUE)
{
// * I was bashed!
nDestroyed=TRUE;
nNumItems=d3()+1;
}
else
{
nNumItems=d3()+3;
int nSkill=GetSkillRank(SKILL_SEARCH,oPC);
if (nSkill>0)
{
if (GetIsSkillSuccessful(oPC,SKILL_SEARCH,30))
{
nNumItems=nNumItems+d3();
}
}
}
// Finished this bit
int nLevel=GetLocalInt(GetArea(oChest),"areatype");
// Dungeon 1 is 8, dungeon 4 is 11
if ((nLevel<8)||(nLevel>11))
{
// We are not in a dungeon, so just return;
return;
}
// Turn this in to one to 4
nLevel=nLevel-7;
string sString;
object oLoot;
int nIdx;
for (nIdx=1;nIdx<=nNumItems;nIdx++)
{
sString=GenerateOneChestTreasure(nLevel);
oLoot=CreateItemOnObject(sString,oChest);
int nBase=GetBaseItemType(oLoot);
if (nBase==BASE_ITEM_SMALLSHIELD||nBase==BASE_ITEM_LARGESHIELD||nBase==BASE_ITEM_TOWERSHIELD)
{
oLoot=CreateRandomShield(oLoot);
}
if (!GetIsObjectValid(oLoot))
{
SendMessageToAllDMs("Error in chest loot script, item "+sString+" is invalid");
}
}
}
void GenerateMonsterTreasure(object oMob=OBJECT_SELF)
{
// Most mobs don't have loot
if (d3()!=1)
{
return;
}
int nRace=MyPRCGetRacialType(OBJECT_SELF);
if ((nRace==RACIAL_TYPE_ANIMAL)||(nRace==RACIAL_TYPE_BEAST)||(nRace==RACIAL_TYPE_OOZE)||(nRace==RACIAL_TYPE_VERMIN)||(nRace==RACIAL_TYPE_ELEMENTAL)||(nRace==RACIAL_TYPE_CONSTRUCT)||(nRace==RACIAL_TYPE_MAGICAL_BEAST))
{
return; // no loot
}
if (GetLocalInt(oMob,"blighted")==TRUE)
{
// Blighted have no loot
return;
}
int nLevel=FloatToInt(GetChallengeRating(oMob));
nLevel=nLevel-10;
nLevel=nLevel/2;
if (nLevel<1)
{
nLevel=1;
}
else
if (nLevel>4)
{
nLevel=4;
}
string sString;
object oLoot;
int nNumItems=d2();
int nIdx;
for (nIdx=1;nIdx<=nNumItems;nIdx++)
{
if (d4()==1)
{
GiveGoldToCreature(oMob,(d20()*nLevel));
}
else
{
sString=GenerateOneMobTreasure(nLevel);
oLoot=CreateItemOnObject(sString,oMob);
if (GetBaseItemType(oLoot)==BASE_ITEM_SPELLSCROLL)
{
SetIdentified(oLoot,FALSE);
}
if (!GetIsObjectValid(oLoot))
{
SendMessageToAllDMs("Error in monster loot script, item "+sString+" is invalid");
}
}
}
}
void TestCreatesRandomShield()
{
string sString=GetShield();
object oLoot=CreateItemOnObject(sString,OBJECT_SELF);
int nBase=GetBaseItemType(oLoot);
if (nBase==BASE_ITEM_SMALLSHIELD||nBase==BASE_ITEM_LARGESHIELD||nBase==BASE_ITEM_TOWERSHIELD)
{
oLoot=CreateRandomShield(oLoot);
}
}