Jaysyn904 5197ad9a4d Initial upload
Initial upload
2023-09-25 20:24:01 -04:00

164 lines
4.9 KiB
Plaintext

//scriptname: respawnhigh
///////////////////////////////////////
//Original Creator: AW_Olorin
//Modified by Guile 8/02/08
///////////////////////////////////////
//
//This script generates treasure and
//respawns the chest automatically after
//a set amount of time. (See below)
/////////////////////////////////////////////////////
//NOTE: I this script is almost identical to the respawnmed script, however
//the % chance of a high level item spawning should be much higher!!
///////////////////////////////////////////////////////////////////////////////
//This script MUST go in the OnOpen Event!
//IMPORTANT SETTINGS:
//////////////////////////////////////////////////////////////////////////////
//The # below represents a % chance of a High level item spawning
//if the opener does not get this % they get a Medium level item instead.
//Change the # below (default 40) to the % chance you want unique items spawned.
const int nPercentChance = 40; //40%
//Determine how many minutes you want to pass before the treasure chest respawn
//Enter 10 for 10 minute or 30 for 30 minutes, etc..
const int nMinutes = 30; //Default = 30 minutes
///////////////////////////////////////////////////////////////////////////////
//DO NOT TOUCH ANYTHING BELOW!!
#include "NW_O2_CONINCLUDE"
#include "x0_i0_treasure"
//PROROTYPE
void RespawnObject(string sTag, int iType, location lLoc)
{
// ResRef Name must be derivable from Tag Name
string sResRef = GetStringLowerCase(GetStringLeft(sTag, 16));
CreateObject(iType, sResRef, lLoc);
}
//PROTOTYPE
void DestroyTreasure(object oMe)
{
object o = GetFirstItemInInventory(oMe);
while(GetIsObjectValid(o))
{
SetPlotFlag(o, FALSE);
DestroyObject(o, 0.0f);
o =GetNextItemInInventory(oMe);
}
}
void main()
{
//Prevents spam looting.
if (GetLocalInt(OBJECT_SELF,"NW_DO_ONCE") != 0)
{
return;
}
object oLastOpener = GetLastOpener();
//GenerateLowTreasure(oLastOpener, OBJECT_SELF);
SetLocalInt(OBJECT_SELF,"NW_DO_ONCE",1);
ShoutDisturbed();
float fMultiplier = 60.0 * IntToFloat(nMinutes);
location lLoc = GetLocation(OBJECT_SELF);
string sTag = GetTag(OBJECT_SELF);
int iType = GetObjectType(OBJECT_SELF);
float fDelay = fMultiplier; // 30 Minute delay
//A fancy sunbeam effect OnOpen.
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SUNBEAM), OBJECT_SELF);
SetPlotFlag(OBJECT_SELF, FALSE);
DestroyObject(OBJECT_SELF, 0.0);
//Note this only works for placeables
//Creatures use a different script, which is in the OnDeath Event
AssignCommand(GetArea(OBJECT_SELF), DelayCommand(fDelay, RespawnObject(sTag, iType, lLoc)));
//Prevent Cheating!!
effect eEffect = EffectDamage(6666, DAMAGE_TYPE_POSITIVE, DAMAGE_POWER_NORMAL);
effect eVis = EffectVisualEffect(VFX_FNF_GREATER_RUIN);
object oPC = GetLastOpener();
string sMsg;
if(GetHasSpellEffect(SPELL_ETHEREALNESS, oPC) ||
GetHasSpellEffect(SPELL_IMPROVED_INVISIBILITY, oPC) ||
GetHasSpellEffect(SPELL_INVISIBILITY, oPC) ||
GetHasSpellEffect(SPELL_INVISIBILITY_SPHERE, oPC) ||
GetHasSpellEffect(SPELL_SANCTUARY, oPC))
{
if(GetLocalInt(oPC, "GS_LOOTER")==2)
{
sMsg = "You cannot be invisible while looting for treasure, YOU WILL RECIEVE NO MORE WARNINGS!";
FloatingTextStringOnCreature(sMsg, oPC, TRUE);
DestroyTreasure(OBJECT_SELF);
CreateItemOnObject("gslootlib", oPC, 1);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC, 0.0f);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oPC, 2.5f);
return;
}
else
{
DestroyTreasure(OBJECT_SELF);
CreateItemOnObject("gslootlib", oPC, 1);
SetLocalInt(oPC, "GS_LOOTER", 2);
sMsg = "You cannot be invisible while looting for treasure, YOU HAVE BEEN WARNED!";
FloatingTextStringOnCreature(sMsg, oPC, TRUE);
return;
}
}
///////////////////////////////////////////////////////////
//Special treasure system..
ExecuteScript("gen_geg_treas", OBJECT_SELF);
//////////////GENERATE GENERIC TREASURE////////////////////
//Do not touch this line below as it's necessary!
if (!(CTG_GetIsTreasureGenerated(OBJECT_SELF)))
{
//Let's choose between one of 3 treasures, depending upon a % of the roll..
int bInt = d100(1);
//Roll a d6 dice then determine which treasure table(s) to use..
//% Chance of the High level item spawning (set above!)
if(bInt<nPercentChance)
{
//This script will put any high level item into the chest.
CTG_CreateTreasure(TREASURE_TYPE_HIGH, GetLastOpener(), OBJECT_SELF);
}
//Otherwise they just get a Medium level item..
else
{
//This script will put any high level item into the chest.
CTG_CreateTreasure(TREASURE_TYPE_MED, GetLastOpener(), OBJECT_SELF);
}
//Always spawn gold into the chest..
//ADJUST This to your likings..
int nInt = d20(5);// 5-100 (The Multiplyer of nXGp)
int nXtra = d100(1); // 1-100 GP
int nXGp = nInt * 100; // 500 - 10,000 GP
int nGP = nXGp + nXtra; // + 1 - 100 GP
//501 minimum - 10,100 max
CreateItemOnObject("nw_it_gold001", OBJECT_SELF, nGP);
//This makes sure we aren't regenerating treasure!
CTG_SetIsTreasureGenerated(OBJECT_SELF);
}
//The end :)
}