Added Elite Troll creature
Added Elite Troll creature.
This commit is contained in:
@@ -15,34 +15,36 @@ void main()
|
||||
{
|
||||
object oNPC = OBJECT_SELF;
|
||||
object oAttacker;
|
||||
|
||||
|
||||
string sResRef = GetResRef(oNPC);
|
||||
|
||||
effect eSleep = EffectSleep();
|
||||
|
||||
//:: Handles troll regen
|
||||
if(sResRef == "ra_troll001" || sResRef == "TROLL_FEDORLA")
|
||||
{
|
||||
if(GetLocalInt(oNPC, "nSubDual") > 0)
|
||||
{
|
||||
SetLocalInt(oNPC, "nSubDual", GetLocalInt(oNPC, "nSubDual") - 5);
|
||||
effect eSleep = EffectSleep();
|
||||
|
||||
if(GetLocalInt(oNPC, "nSubDual") < GetCurrentHitPoints(oNPC))
|
||||
{
|
||||
RemoveEffect(oNPC, eSleep);
|
||||
}
|
||||
//:: Handles troll regen
|
||||
if(sResRef == "ra_troll001"
|
||||
|| sResRef == "ra_troll002"
|
||||
|| sResRef == "TROLL_FEDORLA")
|
||||
{
|
||||
if(GetLocalInt(oNPC, "nSubDual") > 0)
|
||||
{
|
||||
SetLocalInt(oNPC, "nSubDual", GetLocalInt(oNPC, "nSubDual") - 5);
|
||||
|
||||
if(GetLocalInt(oNPC, "nSubDual") < GetCurrentHitPoints(oNPC))
|
||||
{
|
||||
RemoveEffect(oNPC, eSleep);
|
||||
}
|
||||
|
||||
if(GetLocalInt(oNPC, "nSubDual") > GetCurrentHitPoints(oNPC))
|
||||
{
|
||||
SpeakString("I am still unconscious!");
|
||||
SetIsDestroyable(FALSE, TRUE, TRUE);
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSleep, OBJECT_SELF, 6.5f);
|
||||
}
|
||||
|
||||
//SpeakString("My Subdual is now " + IntToString(GetLocalInt(oNPC, "nSubDual")));
|
||||
|
||||
if(GetLocalInt(oNPC, "nSubDual") > GetCurrentHitPoints(oNPC))
|
||||
{
|
||||
SpeakString("I am still unconscious!");
|
||||
SetIsDestroyable(FALSE, TRUE, TRUE);
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSleep, OBJECT_SELF, 6.5f);
|
||||
}
|
||||
|
||||
SpeakString("My Subdual is now " + IntToString(GetLocalInt(oNPC, "nSubDual")));
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//:: Equips best armor
|
||||
if ((!GetIsInCombat(oNPC) && (GetItemInSlot(INVENTORY_SLOT_CHEST) == OBJECT_INVALID)))
|
||||
|
@@ -13,16 +13,16 @@
|
||||
|
||||
void main()
|
||||
{
|
||||
int nTotalDamage = GetTotalDamageDealt();
|
||||
int nFireDamage = 0;
|
||||
int nAcidDamage = 0;
|
||||
int nTotalHP = GetMaxHitPoints(OBJECT_SELF);
|
||||
|
||||
string sResRef = GetResRef(OBJECT_SELF);
|
||||
int nTotalDamage = GetTotalDamageDealt();
|
||||
int nFireDamage = 0;
|
||||
int nAcidDamage = 0;
|
||||
int nTotalHP = GetMaxHitPoints(OBJECT_SELF);
|
||||
|
||||
string sResRef = GetResRef(OBJECT_SELF);
|
||||
|
||||
effect eSleep = EffectSleep();
|
||||
effect eSlow = EffectSlow();
|
||||
|
||||
effect eSlow = EffectSlow();
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// GZ: 2003-10-16
|
||||
// Make Plot Creatures Ignore Attacks
|
||||
@@ -33,71 +33,73 @@ void main()
|
||||
}
|
||||
|
||||
//:: Handles troll regen
|
||||
if(sResRef == "ra_troll001" || sResRef == "TROLL_FEDORLA")
|
||||
{
|
||||
DelayCommand(0.0f, SpeakString("Max/Total HP: " + IntToString(nTotalHP)));
|
||||
|
||||
if(GetDamageDealtByType(DAMAGE_TYPE_FIRE) != -1)
|
||||
{
|
||||
nFireDamage = GetDamageDealtByType(DAMAGE_TYPE_FIRE);
|
||||
//DelayCommand(0.0f, SpeakString("Fire Damage: " + IntToString(nFireDamage)));
|
||||
}
|
||||
if(sResRef == "ra_troll001"
|
||||
|| sResRef == "ra_troll002"
|
||||
|| sResRef == "TROLL_FEDORLA")
|
||||
{
|
||||
DelayCommand(0.0f, SpeakString("Max/Total HP: " + IntToString(nTotalHP)));
|
||||
|
||||
if(GetDamageDealtByType(DAMAGE_TYPE_ACID) != -1)
|
||||
{
|
||||
nAcidDamage = GetDamageDealtByType(DAMAGE_TYPE_ACID);
|
||||
//DelayCommand(0.0f, SpeakString("Acid Damage: " + IntToString(nAcidDamage)));
|
||||
}
|
||||
|
||||
int nNoRegen = nFireDamage + nAcidDamage;
|
||||
int nSubDmg = nTotalDamage - nNoRegen;
|
||||
|
||||
//DelayCommand(0.0f, SpeakString("Real damage this attack: " + IntToString(nNoRegen)));
|
||||
|
||||
SetLocalInt(OBJECT_SELF, "NoRegen", nNoRegen + GetLocalInt(OBJECT_SELF, "NoRegen"));
|
||||
|
||||
nNoRegen = GetLocalInt(OBJECT_SELF, "NoRegen");
|
||||
|
||||
//DelayCommand(0.0f, SpeakString("Actual Damage Stored: " + IntToString(nNoRegen)));
|
||||
if(GetDamageDealtByType(DAMAGE_TYPE_FIRE) != -1)
|
||||
{
|
||||
nFireDamage = GetDamageDealtByType(DAMAGE_TYPE_FIRE);
|
||||
//DelayCommand(0.0f, SpeakString("Fire Damage: " + IntToString(nFireDamage)));
|
||||
}
|
||||
|
||||
effect eHeal = EffectHeal(nSubDmg);
|
||||
//DelayCommand(0.0f, SpeakString("Subdual damage healed: " + IntToString(nSubDmg)));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, OBJECT_SELF, 0.0f);
|
||||
|
||||
int nCurrentHP = GetCurrentHitPoints(OBJECT_SELF);
|
||||
DelayCommand(0.0f, SpeakString("Current HP: " + IntToString(nCurrentHP)));
|
||||
|
||||
if ((nTotalHP - nNoRegen) < nCurrentHP)
|
||||
{
|
||||
nCurrentHP = nTotalHP - nNoRegen;
|
||||
//DelayCommand(0.0f, SpeakString("Setting HP to: " + IntToString(nCurrentHP)));
|
||||
SetCurrentHitPoints(OBJECT_SELF, nCurrentHP);
|
||||
}
|
||||
|
||||
if(GetLocalInt(OBJECT_SELF, "nSubDual") <= GetCurrentHitPoints(OBJECT_SELF))
|
||||
{
|
||||
SetLocalInt(OBJECT_SELF, "nSubDual", nSubDmg + GetLocalInt(OBJECT_SELF, "nSubDual"));
|
||||
}
|
||||
if(GetDamageDealtByType(DAMAGE_TYPE_ACID) != -1)
|
||||
{
|
||||
nAcidDamage = GetDamageDealtByType(DAMAGE_TYPE_ACID);
|
||||
//DelayCommand(0.0f, SpeakString("Acid Damage: " + IntToString(nAcidDamage)));
|
||||
}
|
||||
|
||||
int nSD = GetLocalInt(OBJECT_SELF, "nSubDual");
|
||||
|
||||
//DelayCommand(0.0f, SpeakString("SD: " + IntToString(nSD)));
|
||||
//DelayCommand(0.0f, SpeakString("CH: " + IntToString(nCurrentHP)));
|
||||
//DelayCommand(0.0f, SpeakString("NoRegen: " + IntToString(nNoRegen)));
|
||||
int nNoRegen = nFireDamage + nAcidDamage;
|
||||
int nSubDmg = nTotalDamage - nNoRegen;
|
||||
|
||||
if(nSD > GetCurrentHitPoints(OBJECT_SELF))
|
||||
{
|
||||
//SpeakString("I am unconscious!");
|
||||
SetIsDestroyable(FALSE, TRUE, TRUE);
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSleep, OBJECT_SELF, 6.0f);
|
||||
}
|
||||
else if(nSD == GetCurrentHitPoints(OBJECT_SELF))
|
||||
{
|
||||
//SpeakString("I am staggered!");
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSlow, OBJECT_SELF, 6.0f);
|
||||
}
|
||||
|
||||
}
|
||||
//DelayCommand(0.0f, SpeakString("Real damage this attack: " + IntToString(nNoRegen)));
|
||||
|
||||
SetLocalInt(OBJECT_SELF, "NoRegen", nNoRegen + GetLocalInt(OBJECT_SELF, "NoRegen"));
|
||||
|
||||
nNoRegen = GetLocalInt(OBJECT_SELF, "NoRegen");
|
||||
|
||||
//DelayCommand(0.0f, SpeakString("Actual Damage Stored: " + IntToString(nNoRegen)));
|
||||
|
||||
effect eHeal = EffectHeal(nSubDmg);
|
||||
//DelayCommand(0.0f, SpeakString("Subdual damage healed: " + IntToString(nSubDmg)));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, OBJECT_SELF, 0.0f);
|
||||
|
||||
int nCurrentHP = GetCurrentHitPoints(OBJECT_SELF);
|
||||
//DelayCommand(0.0f, SpeakString("Current HP: " + IntToString(nCurrentHP)));
|
||||
|
||||
if ((nTotalHP - nNoRegen) < nCurrentHP)
|
||||
{
|
||||
nCurrentHP = nTotalHP - nNoRegen;
|
||||
//DelayCommand(0.0f, SpeakString("Setting HP to: " + IntToString(nCurrentHP)));
|
||||
SetCurrentHitPoints(OBJECT_SELF, nCurrentHP);
|
||||
}
|
||||
|
||||
if(GetLocalInt(OBJECT_SELF, "nSubDual") <= GetCurrentHitPoints(OBJECT_SELF))
|
||||
{
|
||||
SetLocalInt(OBJECT_SELF, "nSubDual", nSubDmg + GetLocalInt(OBJECT_SELF, "nSubDual"));
|
||||
}
|
||||
|
||||
int nSD = GetLocalInt(OBJECT_SELF, "nSubDual");
|
||||
|
||||
//DelayCommand(0.0f, SpeakString("SD: " + IntToString(nSD)));
|
||||
//DelayCommand(0.0f, SpeakString("CH: " + IntToString(nCurrentHP)));
|
||||
//DelayCommand(0.0f, SpeakString("NoRegen: " + IntToString(nNoRegen)));
|
||||
|
||||
if(nSD > GetCurrentHitPoints(OBJECT_SELF))
|
||||
{
|
||||
//SpeakString("I am unconscious!");
|
||||
SetIsDestroyable(FALSE, TRUE, TRUE);
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSleep, OBJECT_SELF, 6.0f);
|
||||
}
|
||||
else if(nSD == GetCurrentHitPoints(OBJECT_SELF))
|
||||
{
|
||||
//SpeakString("I am staggered!");
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSlow, OBJECT_SELF, 6.0f);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//:: Execute the CODI AI NPC OnDamaged script
|
||||
ExecuteScript("no_ai_dam", OBJECT_SELF);
|
||||
|
Reference in New Issue
Block a user