155 lines
4.2 KiB
Plaintext
155 lines
4.2 KiB
Plaintext
/*--------------------------------------------------------
|
|
Script Name: gen_treasure
|
|
----------------------------------------------------------
|
|
Created By: Genisys(Guile)
|
|
Created On: 4/19/09
|
|
----------------------------------------------------------
|
|
|
|
This is my default Treasure Include Script
|
|
|
|
To utilize simply place: #include "gen_treasure"
|
|
at the top of your script, and then use the following function
|
|
after the PC is defined, like it's shown below..
|
|
|
|
object oPC = GetLastUsedBy(); (for OnUsed Event of an object w/ inventory!)
|
|
object oPC = GetLastOpenedBy(); (for OnOpen of a chest/bag w/ ineventory!)
|
|
object oPC = GetLastKiller(); (for OnDeath of a creature)
|
|
|
|
GenerateTreasure(oPC); <--- This Function goes after oPC!
|
|
|
|
Please note that this script is level dependent!
|
|
You will need to create 4 chest in your module and give them
|
|
the following tagnames (in lower case letters!)
|
|
|
|
gen_treas_low (put low items in this chest)
|
|
gen_treas_med (put med level items in this chest)
|
|
gen_treas_high (put high level items in this chest)
|
|
gen_treas_rare (put your best items in this chest)
|
|
|
|
Depending upon which level the PC is they will get items
|
|
from the chest appropriate to their level...
|
|
----------------------------------------------------------*/
|
|
|
|
//Set this to the # of item you wish to spawn EVERY time!
|
|
const int NUMBER_OF_ITEMS = 1; //use 1 - 10 only !
|
|
|
|
//Make sure all chest have at least 10 items in them!
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
////////////////DON'T TOUCH ANYTHING BELOW THIS LINE!////////////////////
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//PROTOTYPE DEFINED
|
|
int GetInvCount(object oBox)
|
|
{
|
|
int i = 0;
|
|
object oGem = GetFirstItemInInventory(oBox);
|
|
while(GetIsObjectValid(oGem))
|
|
{
|
|
i+=1;
|
|
|
|
oGem = GetNextItemInInventory(oBox);
|
|
}
|
|
|
|
return i;
|
|
|
|
//PROTOTYPE END
|
|
}
|
|
|
|
void GetTreasureItem(object oBox, int nCount)
|
|
{
|
|
int i = 0;
|
|
object oItem;
|
|
oItem = GetFirstItemInInventory(oBox);
|
|
while(GetIsObjectValid(oItem))
|
|
{
|
|
//tell us which item we are looking at!
|
|
i +=1;
|
|
|
|
//If it's the item we are looking for, then copy it into the object!
|
|
if(i==nCount)
|
|
CopyItem(oItem, OBJECT_SELF, TRUE);
|
|
|
|
oItem = GetNextItemInInventory(oBox);
|
|
}
|
|
}
|
|
/////////////////////////////////////////////////////////////
|
|
//PROTOTYPE DEFINED
|
|
void GenerateTreasure(object oPC)
|
|
{
|
|
|
|
//Prevent script errors!
|
|
if(oPC == OBJECT_INVALID)
|
|
{return;}
|
|
|
|
//Prevent Cheating while looting!
|
|
if(GetHasSpellEffect(SPELL_INVISIBILITY, oPC) ||
|
|
GetHasSpellEffect(SPELL_INVISIBILITY_SPHERE, oPC) ||
|
|
GetHasSpellEffect(SPELL_ETHEREALNESS, oPC) ||
|
|
GetHasSpellEffect(SPELL_SANCTUARY, oPC) ||
|
|
GetHasSpellEffect(SPELL_IMPROVED_INVISIBILITY, oPC))
|
|
{
|
|
string sMsg = "You cannot loot treasure while invisible!";
|
|
effect eEffect;
|
|
//Scare the daylights out of the cheater!
|
|
eEffect = EffectVisualEffect(VFX_FNF_IMPLOSION, FALSE);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oPC, 0.0f);
|
|
//Warn them about cheating!
|
|
FloatingTextStringOnCreature(sMsg, oPC, TRUE);
|
|
SendMessageToAllDMs(GetName(oPC) + " ***Has been looting while invisible!***");
|
|
return;
|
|
}
|
|
|
|
|
|
//Declare All Major Variables..
|
|
|
|
//Prevent handing out Great treasure to low level players!
|
|
int nLvl = GetHitDice(oPC);
|
|
//Determine which box to look in...
|
|
object oBox;
|
|
object oItem;
|
|
|
|
//Define which box to look in...
|
|
if(nLvl <=10)
|
|
{
|
|
oBox = GetObjectByTag("gen_treas_low");
|
|
}
|
|
else if(nLvl>=11 && nLvl <=20)
|
|
{
|
|
oBox = GetObjectByTag("gen_treas_med");
|
|
}
|
|
else if(nLvl>=21 && nLvl <=30)
|
|
{
|
|
oBox = GetObjectByTag("gen_treas_high");
|
|
}
|
|
else if(nLvl>=31)
|
|
{
|
|
oBox = GetObjectByTag("gen_treas_rare");
|
|
}
|
|
else //Default!
|
|
{
|
|
oBox = GetObjectByTag("gen_treas_low");
|
|
}
|
|
|
|
//The object we are putting the treasure in!
|
|
object oMe = OBJECT_SELF;
|
|
//Count up the # of items in that chest...
|
|
int a = GetInvCount(oBox);
|
|
int b = a + 1; //Add 1 to a (this is paramount!)
|
|
int c = Random(b); //the item we are randomly choosing from the box
|
|
|
|
//Generate X items into the object we are running the script on...
|
|
int i;
|
|
for(i=0; i<NUMBER_OF_ITEMS; i++)
|
|
{
|
|
GetTreasureItem(oBox, c);
|
|
}
|
|
|
|
|
|
//PROTOTYPE END
|
|
}
|
|
|
|
|
|
////////////////////////////INCLUDE SCRIPT END/////////////////////////////
|