Initial commit
Adding all of the current content for Anphillia Unlimited.
This commit is contained in:
104
_module/nss/ee_ent_ondmg.nss
Normal file
104
_module/nss/ee_ent_ondmg.nss
Normal file
@@ -0,0 +1,104 @@
|
||||
/************************************************************************
|
||||
* script name : eE_ent_OnDmg
|
||||
* created by : eyesolated
|
||||
* date : 2018/7/17
|
||||
*
|
||||
* description : OnDamaged script for entities (creatures/placeables) spawned
|
||||
* using eyesolated Encounters
|
||||
*
|
||||
* changes : 2018/7/17 - eyesolated - Initial creation
|
||||
************************************************************************/
|
||||
#include "ee_inc"
|
||||
#include "x0_i0_enemy"
|
||||
|
||||
void main()
|
||||
{
|
||||
// Retrieve necessary eE Variables for this creature
|
||||
object oEncounter = eE_GetEntityEncounter(OBJECT_SELF);
|
||||
|
||||
// If anyone called this from the wrong place, oEncounter is not a valid
|
||||
// object and therefor we exit this function.
|
||||
if (!GetIsObjectValid(oEncounter))
|
||||
{
|
||||
if (eE_SCRIPT_CREATURE_ONDAMAGED != "")
|
||||
ExecuteScript(eE_SCRIPT_CREATURE_ONDAMAGED, OBJECT_SELF);
|
||||
else
|
||||
ExecuteScript(GetLocalString(OBJECT_SELF, eE_VAR_ENTITY_AI_ONDAMAGED), OBJECT_SELF);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Retrieve the eE Event Object Tag for this creatures OnDamaged
|
||||
string sEventTag = eE_GetEntityEventTag(OBJECT_SELF, eE_VAR_ENTITY_ONDAMAGED);
|
||||
|
||||
int nCurrentHitPoints = GetCurrentHitPoints();
|
||||
int nRestriction = GetLocalInt(OBJECT_SELF, eE_VAR_RESTRICT_DAMAGERANGE);
|
||||
if (nRestriction != 0 &&
|
||||
nCurrentHitPoints > 0)
|
||||
{
|
||||
object oLastDamager = GetLastDamager();
|
||||
float fDistance = GetDistanceToObject(oLastDamager);
|
||||
|
||||
int nUndoDamage = FALSE;
|
||||
string sMessage;
|
||||
switch (nRestriction)
|
||||
{
|
||||
case eE_RESTRICT_DAMAGERANGE_MELEE:
|
||||
if (fDistance > MELEE_DISTANCE)
|
||||
{
|
||||
sMessage = "You are too far away to damage " + GetName(OBJECT_SELF);
|
||||
nUndoDamage = TRUE;
|
||||
}
|
||||
break;
|
||||
case eE_RESTRICT_DAMAGERANGE_RANGE:
|
||||
if (fDistance <= MELEE_DISTANCE)
|
||||
{
|
||||
sMessage = "You are too close to deal damage to " + GetName(OBJECT_SELF);
|
||||
nUndoDamage = TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (nUndoDamage)
|
||||
{
|
||||
int nDamageDealt = GetTotalDamageDealt();
|
||||
effect eHeal = EffectHeal(nDamageDealt);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, OBJECT_SELF);
|
||||
|
||||
// Tell the player the attack didn't work
|
||||
SendMessageToPC(oLastDamager, sMessage);
|
||||
}
|
||||
}
|
||||
|
||||
// Find out our current HP
|
||||
int nMaxHitPoints = GetMaxHitPoints();
|
||||
float fPercentage = IntToFloat(nCurrentHitPoints) / IntToFloat(nMaxHitPoints) * 100;
|
||||
int nPercentage = FloatToInt(fPercentage);
|
||||
if (IntToFloat(nPercentage) < fPercentage)
|
||||
nPercentage++;
|
||||
|
||||
// If the EventTag is not empty, handle the Events
|
||||
if (sEventTag != "")
|
||||
{
|
||||
// Find out what Dmg Threshold got executed last
|
||||
int nLastExecuted = GetLocalInt(OBJECT_SELF, eE_VAR_ONDAMAGED_EXECUTED) - 1;
|
||||
if (nLastExecuted == -1) // No execution yet
|
||||
nLastExecuted = 100;
|
||||
|
||||
// Handle all events that we missed
|
||||
int nExecute;
|
||||
for (nExecute = nLastExecuted; nExecute >= nPercentage; nExecute--)
|
||||
eE_HandleEvents(oEncounter, sEventTag + "_" + IntToString(nExecute));
|
||||
|
||||
// Save the new value for handled Events on the Creature
|
||||
SetLocalInt(OBJECT_SELF, eE_VAR_ONDAMAGED_EXECUTED, nExecute);
|
||||
}
|
||||
|
||||
// Now execute the standard NWN thingie if this is a creature or placeable
|
||||
int nObjectType = GetObjectType(OBJECT_SELF);
|
||||
if (nObjectType == OBJECT_TYPE_CREATURE ||
|
||||
nObjectType == OBJECT_TYPE_PLACEABLE)
|
||||
{
|
||||
ExecuteScript(GetLocalString(OBJECT_SELF, eE_VAR_ENTITY_AI_ONDAMAGED), OBJECT_SELF);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user