////////////////////////////////////////////////////////////////////////////
//Script Name: spawn_boss_oe
// (Template Script - Save Under a Unique Name FIRST!)
///////////////////////////////////////////////////////////////////////////
//Created By: Genisys (Guile)
//Created On: 8/14/10
///////////////////////////////////////////////////////////////////////////
/*
NOTE: This script goes in the OnEnter event of a tracks trigger
This is a custom template for spawning bosses and lackeys based upon
the # of party members in the area, which allows for scaling the boss
encounter to make the encounter more balanced if the PC is alone
and to make the encounter more challenging for parties..
****IMPORTANT NOTE: You MUST use a unique tagname for EVERY Tracks Trigger You Create!!****
*/
/////////////////////////////////////////////////////////////////////////////
//////////////IMPORTANT SETTINGS - PLEASE ADJUST////////////////////////////
///////////////////////////////////////////////////////////////////////////
//Set this to how often you want the boss to spawn for ANYONE who was in
//the area when the Boss was spawned (by any party member in the area)
const float BOSS_SPAWN_TIME = 1800.0; //Default = 30 Minutes(1800 Seconds)
//Set this to the Multiplier of Henchment Spawned (BE CAREFUL)
//If you set this to 1 (1 henchmen / party member in the area will spawn)
//if you set this to 4 (4 henchmen / party member in the area will spawn)
const int HENCHMEN_MULTIPLIER = 1; //Default = 1 (1 Henchment / Party Member)
//Set this to the (resref)(NOT Tagname) of the Boss to be spawned..
const string BOSS_RESREF = "resref"; //Don't delete the "";
//Set this to the (resref) of the First Henchment to Spawn
const string HENCHMEN_RESREF = "resref";
//Set this to the Second (resref) of the Henchment to Spawn
const string HENCHEMENT_2_RESREF = "resref";
//IF you are spawning in 2 Different Henchmen for the boss, then set
//the following to TRUE, it's set to FALSE by default which means..
//The script will only use the First Henchmen
const int USE_2_HENCHMEN = FALSE; //Default = FALSE use only 1 Henchmen
//Set this to the VFX Constant you wish to use on the Boss which is spawning in
//You MUST use a constant! Example: VFX_FNF_HOWL_WAR_CRY
const int BOSS_SPAWN_VFX = VFX_FNF_SOUND_BURST;
//NOTE: This helps the PC see the boss too.
'>
///////////////////////////////////////////////////////////////////////////////
//////////WARNING: DON'T TOUCH ANYTHING BELOW THIS LINE//////////////////////
/////////////////////////////////////////////////////////////////////////////
//Required Include
#include "nw_i0_generic"
//Declare Custom Prototype
int GetPartyCount(object oPC);
////////////////////////////////////////////////////////////////////////////
//Main Script..
void main()
{
//Declare Major Variables..
object oPC = GetEnteringObject();
object oTarget;
object oSpawn;
location lTarget;
int nInt;
object oMe = OBJECT_SELF; //The Tracks Trigger
int i = 0;
string sTag = GetTag(oMe);
string sName = GetName(oPC);
//First check to see if the PC has spawn this trigger before!
int nSpawned = GetLocalInt(GetModule(),sTag + sName);
//If they have spawned the boss recently, stop here...
if(nSpawned == TRUE)
{
FloatingTextStringOnCreature("You already destroyed this boss, move along.", oPC, TRUE);
return;
}
//Next Set that the PC's have entered this trigger before & Get the party count! (In THIS Area)
int iParty = GetPartyCount(oPC);
//Always Spawn in the Boss & Always Use this VFX...
oTarget = oPC;
lTarget = GetLocation(oTarget);
oSpawn = CreateObject(OBJECT_TYPE_CREATURE, BOSS_RESREF, lTarget);
oTarget = oSpawn;
SetIsTemporaryEnemy(oPC, oTarget);
AssignCommand(oTarget, ActionAttack(oPC));
AssignCommand(oTarget, DetermineCombatRound(oPC));
//Apply the VFX to the boss
nInt = GetObjectType(oTarget);
if (nInt != OBJECT_TYPE_WAYPOINT) DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(BOSS_SPAWN_VFX), oTarget));
else DelayCommand(0.5, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(BOSS_SPAWN_VFX), GetLocation(oTarget)));
//If there is at least 2 party members in the area!
if(iParty >=2)
{
//Multiply the # of Henchmen we are going to spawn by the # of Party Members..
iParty = iParty * HENCHMEN_MULTIPLIER;
for(i=0; i<iParty; i++)
{
lTarget = GetLocation(OBJECT_SELF); //Spawn them somewhere on the Trigger..
oSpawn = CreateObject(OBJECT_TYPE_CREATURE, HENCHMEN_RESREF, lTarget);
oTarget = oSpawn;
SetIsTemporaryEnemy(oPC, oTarget);
AssignCommand(oTarget, ActionAttack(oPC));
AssignCommand(oTarget, DetermineCombatRound(oPC));
//If we are using 2 Seperate Henchment..
if(USE_2_HENCHMEN == TRUE)
{
lTarget = GetLocation(OBJECT_SELF); //Spawn them somewhere on the Trigger..
oSpawn = CreateObject(OBJECT_TYPE_CREATURE, HENCHEMENT_2_RESREF, lTarget);
oTarget = oSpawn;
SetIsTemporaryEnemy(oPC, oTarget);
AssignCommand(oTarget, ActionAttack(oPC));
AssignCommand(oTarget, DetermineCombatRound(oPC));
}
//End For Loop
}
//End if we have Multiple Party Members..
}
//Main Script End
}
//////////////////////////////////////////////////////////////////////////////
//Define Custom Prototype
int GetPartyCount(object oPC)
{
object oArea, oA2;
oArea = GetArea(oPC);
int i = 0;
object oP;
string sTag = GetTag(OBJECT_SELF); //The Tracks Trigger
string sID = GetName(oPC);
string sOP;
//First Tag the PC noting they have spawned the boss!
DelayCommand(0.5, SetLocalInt(GetModule(), sTag + sID, TRUE));
//Set this on the module so logging will not clear it!
DelayCommand(BOSS_SPAWN_TIME, SetLocalInt(GetModule(), sTag + sID, FALSE));
oP = GetFirstFactionMember(oPC, TRUE); //Don't Count Summons!
while(GetIsObjectValid(oP))
{
oA2 = GetArea(oP);
if(oA2 == oArea)
{
i += 1;
//Tag the Party Member in the area as having Spawned the Boss!
sOP = GetName(oP);
DelayCommand(0.5, SetLocalInt(GetModule(), sTag + sOP, TRUE));
DelayCommand(BOSS_SPAWN_TIME, SetLocalInt(GetModule(), sTag + sOP, FALSE));
}
oP = GetNextFactionMember(oPC, TRUE);
}
//Note, we don't count the original PC!
return i;
//Prototype End
}
///////////////////////////////////////////////////////////////////////////////
Modifié par Genisys, 16 août 2010 - 07:41 .