109 lines
3.2 KiB
Plaintext
109 lines
3.2 KiB
Plaintext
//:: Note: This function modified by Loki Hakanin.
|
|
//:: See notes after Bioware's code for details.
|
|
//::///////////////////////////////////////////////
|
|
//:: Name x2_def_userdef
|
|
//:: Copyright (c) 2001 Bioware Corp.
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
Default On User Defined Event script
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Keith Warner
|
|
//:: Created On: June 11/03
|
|
//:://////////////////////////////////////////////
|
|
|
|
//::////////////////////////////////////////////////////
|
|
//:: Summary of Modifications by Loki:
|
|
//:: =================================
|
|
//:: Code added to OnHeartbeat to cause the Demilich
|
|
//:: to de-spawn itself and go into "rest" mode if
|
|
//:: nothing interesting is happening nearby. This
|
|
//:: spawns two placables at the demilich's location,
|
|
//:: a pile of bones and a dust plume. If these
|
|
//:: objects are disturbed, the demilich will once
|
|
//:: more spawn and attack any hostiles nearby, then
|
|
//:: rest again. These placables can be found in the
|
|
//:: Dungeon->Tombs, Grave Markers section of the Palette.
|
|
//:: Note also that due to the self-contained nature
|
|
//:: of the implementation of the Demilich's soulgems,
|
|
//:: we use the Heartbeat to re-kill any soulgem victims
|
|
//:: who have been re-slain, figuring they can't have been
|
|
//:: up and flailing around for too long. This will
|
|
//:: play some animations and explain this fact that
|
|
//:: the person's soul will not return any observers
|
|
//:: to their body while the demilich lives.
|
|
//:: It's a slightly kludgy implementation, but it's the
|
|
//:: only way we can do things without using module events
|
|
//:: and aras and the like.
|
|
//::////////////////////////////////////////////////////
|
|
|
|
|
|
const int EVENT_USER_DEFINED_PRESPAWN = 1510;
|
|
const int EVENT_USER_DEFINED_POSTSPAWN = 1511;
|
|
|
|
|
|
#include "zep_inc_demi"
|
|
|
|
void main()
|
|
{
|
|
int nUser = GetUserDefinedEventNumber();
|
|
|
|
if(nUser == EVENT_HEARTBEAT ) //HEARTBEAT
|
|
{
|
|
//First thing's first, re-kill any pesky soulgem victims
|
|
ZEPDemilichReSlaySoulGemVictims(OBJECT_SELF);
|
|
|
|
//If we're not fighting and we're 20 meters from any hostiles
|
|
//we want the Demlich to go into "rest" mode, and spawn the
|
|
//appropriate skull placables.
|
|
if (!GetIsInCombat() &&
|
|
GetDistanceBetween(OBJECT_SELF,GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY)) > 20.0)
|
|
{
|
|
//Note FALSE flag on following function call-this sets
|
|
//the bones into REST mode, vs REGENERATION mode.
|
|
ZEPDemilichSpawnBones(OBJECT_SELF,FALSE);
|
|
DestroyObject(OBJECT_SELF,1.0);
|
|
}
|
|
}
|
|
else if(nUser == EVENT_PERCEIVE) // PERCEIVE
|
|
{
|
|
|
|
}
|
|
else if(nUser == EVENT_END_COMBAT_ROUND) // END OF COMBAT
|
|
{
|
|
|
|
}
|
|
else if(nUser == EVENT_DIALOGUE) // ON DIALOGUE
|
|
{
|
|
|
|
}
|
|
else if(nUser == EVENT_ATTACKED) // ATTACKED
|
|
{
|
|
|
|
}
|
|
else if(nUser == EVENT_DAMAGED) // DAMAGED
|
|
{
|
|
|
|
}
|
|
else if(nUser == 1007) // DEATH - do not use for critical code, does not fire reliably all the time
|
|
{
|
|
|
|
}
|
|
else if(nUser == EVENT_DISTURBED) // DISTURBED
|
|
{
|
|
|
|
}
|
|
else if (nUser == EVENT_USER_DEFINED_PRESPAWN)
|
|
{
|
|
|
|
}
|
|
else if (nUser == EVENT_USER_DEFINED_POSTSPAWN)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|