206 lines
5.8 KiB
Plaintext
206 lines
5.8 KiB
Plaintext
// create loot for random encounter areas,
|
|
// mostly healing potions, kits, etc.
|
|
//
|
|
// -Brian Watson
|
|
|
|
void main()
|
|
{
|
|
int nTreas = GetLocalInt(OBJECT_SELF, "nTreasure");
|
|
|
|
if (nTreas == 0)
|
|
{
|
|
// set default var's
|
|
int nHD = 1;
|
|
int nStack = 1;
|
|
string sBP;
|
|
int nItem;
|
|
|
|
// determine who opened this container
|
|
object oOpener = GetLastOpenedBy();
|
|
if (!GetIsObjectValid(oOpener))
|
|
{
|
|
oOpener = GetLastKiller();
|
|
}
|
|
if (GetIsObjectValid(oOpener))
|
|
{
|
|
nHD = GetHitDice(oOpener);
|
|
}
|
|
|
|
// randomize level for variable item generation (-9 to +9 HD)
|
|
int nLevelAdj = (d10(2) - 11);
|
|
int nModHD = nHD + nLevelAdj;
|
|
|
|
// detemine random treasure item
|
|
int nRandom = d100(); // 10% chance of nothing
|
|
if (nRandom <= 40) // 40% chance of gold
|
|
{
|
|
sBP = "nw_it_gold001";
|
|
|
|
int nGoldHD = nModHD;
|
|
if (nGoldHD < 1) nGoldHD = 1;
|
|
|
|
nStack = d20(nGoldHD); // 1-20 gp per modified character level
|
|
}
|
|
else if (nRandom <= 70) // 30% chance of gems
|
|
{
|
|
int nRandGem;
|
|
int nRandType = d3(); // 1-3
|
|
|
|
if (nModHD < 6) // common gems
|
|
{
|
|
if (nRandType == 1) nRandGem = d4(); // 1-4
|
|
else if (nRandType == 2) nRandGem = 7;
|
|
else nRandGem = (13 + d2()); // 14-15
|
|
|
|
nStack = (d6(2) - 4); // common, 1-8 gems instead
|
|
}
|
|
else if (nModHD < 15) // rare
|
|
{
|
|
if (nRandType == 1) nRandGem = 10;
|
|
else if (nRandType == 2) nRandGem = 11;
|
|
else nRandGem = 13;
|
|
|
|
nStack = (d6() - 3); // rare, 1-3 (66% chance of 1)
|
|
}
|
|
else if (nModHD < 23)
|
|
{
|
|
if (nRandType == 1) nRandGem = 5;
|
|
else if (nRandType == 2) nRandGem = 8;
|
|
else nRandGem = 9;
|
|
|
|
nStack = (d6() - 4); // rare, 1-2 (83% chance of 1)
|
|
}
|
|
else
|
|
{
|
|
if (nRandType == 1) nRandGem = 6;
|
|
else if (nRandType == 2) nRandGem = 12;
|
|
else nRandGem = 5;
|
|
}
|
|
|
|
string sBaseBP = "nw_it_gem00";
|
|
if (nRandGem > 9)
|
|
{
|
|
sBaseBP = "nw_it_gem0";
|
|
}
|
|
sBP = (sBaseBP + IntToString(nRandGem));
|
|
}
|
|
else if (nRandom <= 90) // 20% chance of jewelry
|
|
{
|
|
nStack = (d6() - 3);
|
|
|
|
if (nModHD < 3)
|
|
{
|
|
sBP = "nw_it_mring021"; // copper ring
|
|
}
|
|
else if (nModHD < 8)
|
|
{
|
|
sBP = "nw_it_mneck020"; // copper necklace
|
|
}
|
|
else if (nModHD < 13)
|
|
{
|
|
sBP = "nw_it_mring022"; // silver ring
|
|
}
|
|
else if (nModHD < 18)
|
|
{
|
|
sBP = "nw_it_mneck021"; // silver necklace
|
|
|
|
}
|
|
else if (nModHD < 23)
|
|
{
|
|
sBP = "nw_it_mring023"; // gold ring
|
|
}
|
|
else
|
|
{
|
|
sBP = "nw_it_mneck022"; // gold necklace
|
|
}
|
|
}
|
|
|
|
if (sBP != "") // valid blueprint determined, create treasure
|
|
{
|
|
if (nStack < 1) nStack = 1;
|
|
|
|
CreateItemOnObject(sBP, OBJECT_SELF, nStack);
|
|
}
|
|
|
|
// determine random healing item
|
|
nRandom = d100(); // 10% chance of nothing
|
|
if (nRandom <= 40) // 40% chance of healing kit
|
|
{
|
|
if (nModHD < 5)
|
|
{
|
|
sBP = "nw_it_medkit001"; // +1
|
|
}
|
|
else if (nModHD < 15)
|
|
{
|
|
sBP = "nw_it_medkit002"; // +3
|
|
}
|
|
else if (nModHD < 25)
|
|
{
|
|
sBP = "nw_it_medkit003"; // +6
|
|
}
|
|
else
|
|
{
|
|
sBP = "nw_it_medkit004"; // +10
|
|
}
|
|
}
|
|
else if (nRandom <= 80) // 40% chance of healing potion
|
|
{
|
|
if (nModHD < 0)
|
|
{
|
|
sBP = "nw_it_mpotion001"; // cure light
|
|
}
|
|
else if (nModHD < 10)
|
|
{
|
|
sBP = "nw_it_mpotion020"; // cure moderate
|
|
}
|
|
else if (nModHD < 20)
|
|
{
|
|
sBP = "nw_it_mpotion002"; // cure serious
|
|
}
|
|
else
|
|
{
|
|
sBP = "nw_it_mpotion003"; // cure critical
|
|
}
|
|
}
|
|
else if (nRandom <= 90) // 10% chance of ANY standard potion
|
|
{
|
|
nItem = (d20() + d6() - 1); // # from 1-25 determines potion
|
|
if (nItem < 24)
|
|
{
|
|
if (nItem < 10)
|
|
{
|
|
sBP = ("nw_it_mpotion00" + IntToString(nItem));
|
|
}
|
|
else
|
|
{
|
|
sBP = ("nw_it_mpotion0" + IntToString(nItem));
|
|
}
|
|
}
|
|
else if (nItem == 24)
|
|
{
|
|
sBP = "x2_it_mpotion001";
|
|
}
|
|
else if (nItem == 25)
|
|
{
|
|
sBP = "x2_it_mpotion002";
|
|
}
|
|
else
|
|
{
|
|
sBP = "nw_it_mpotion002"; // default to cure serious wounds
|
|
}
|
|
}
|
|
|
|
if (sBP != "") // valid blueprint determined, create healing item
|
|
{
|
|
// determine stack size for healing/potion item
|
|
nStack = (d6() - 3);
|
|
if (nStack < 1) nStack = 1; // 1 to 3, with 1 most likely (66%)
|
|
|
|
CreateItemOnObject(sBP, OBJECT_SELF, nStack);
|
|
}
|
|
|
|
// don't do this again
|
|
SetLocalInt(OBJECT_SELF, "nTreasure", 1);
|
|
}
|
|
}
|