forked from Jaysyn/PRC8
Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
103 lines
3.6 KiB
Plaintext
103 lines
3.6 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Foe Hunter
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
Foe Hunter Death Attack Heartbeat script
|
|
Used the PnP Assassins death attack as reference
|
|
to setup a more PnP style death attack for the
|
|
Foe Hunter.
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Oni5115
|
|
//:: Created On: July 12, 2004
|
|
//:://////////////////////////////////////////////
|
|
|
|
#include "prc_inc_combat"
|
|
void main()
|
|
{
|
|
object oPC = OBJECT_SELF;
|
|
|
|
// Currently from the PnP rules they dont have to wait except for the study time
|
|
// So this fWaitTime is not being used at all
|
|
// Are we still counting down before they can do another DA?
|
|
float fWaitTime = GetLocalFloat(oPC, "PRC_FH_DEATHATTACK_WAITSEC");
|
|
if (fWaitTime > 0.0)
|
|
{
|
|
// The wait is over they can do another DA
|
|
DeleteLocalFloat(oPC, "PRC_FH_DEATHATTACK_WAITSEC");
|
|
return;
|
|
}
|
|
|
|
// We must be counting down until we can apply the slay property
|
|
// Assasain must not be seen
|
|
if (!((GetStealthMode(oPC) == STEALTH_MODE_ACTIVATED) ||
|
|
(PRCGetHasEffect(EFFECT_TYPE_INVISIBILITY,oPC)) ||
|
|
!(GetIsInCombat(oPC)) ||
|
|
(PRCGetHasEffect(EFFECT_TYPE_SANCTUARY,oPC))))
|
|
{
|
|
FloatingTextStringOnCreature("Your target is aware of you, you can not perform a death attack", OBJECT_SELF);
|
|
DeleteLocalFloat(oPC, "PRC_FH_DEATHATTACK_APPLY");
|
|
return;
|
|
}
|
|
|
|
float fApplyDATime = GetLocalFloat(oPC, "PRC_FH_DEATHATTACK_APPLY");
|
|
// We run every 6 seconds
|
|
fApplyDATime -= 6.0;
|
|
SetLocalFloat(oPC, "PRC_FH_DEATHATTACK_APPLY", fApplyDATime);
|
|
|
|
// Times up, perform the death attack
|
|
if (fApplyDATime <= 0.0)
|
|
{
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
object oWeapR = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
|
|
|
|
int bIsRangedAttack = GetWeaponRanged(oWeapR);
|
|
|
|
int bIsDeniedDex = GetIsDeniedDexBonusToAC(oTarget, oPC);
|
|
int iEnemyRace = MyPRCGetRacialType(oTarget);
|
|
|
|
effect eDeath;
|
|
string sSuccess = "";
|
|
string sMiss = "";
|
|
|
|
// If they are not within 10 ft, they can't do a melee attack.
|
|
if(!bIsRangedAttack && !GetIsInMeleeRange(oTarget, oPC) )
|
|
{
|
|
SendMessageToPC(oPC,"You are not close enough to your target to attack!");
|
|
return;
|
|
}
|
|
|
|
if(!bIsRangedAttack && GetLocalInt(oPC, "HatedFoe") == iEnemyRace )
|
|
{
|
|
sSuccess = "*Death Attack Hit*";
|
|
sMiss = "*Death Attack Miss*";
|
|
|
|
AssignCommand(oPC, ActionMoveToLocation(GetLocation(oTarget), TRUE) );
|
|
|
|
int iSaveDC = 10 + GetLevelByClass(CLASS_TYPE_FOE_HUNTER, oPC) + GetAbilityModifier(ABILITY_INTELLIGENCE, oPC);
|
|
int iSave = FortitudeSave(oTarget, iSaveDC, SAVING_THROW_TYPE_NONE, oPC);
|
|
if(iSave == 0)
|
|
{
|
|
eDeath = EffectDeath();
|
|
}
|
|
else
|
|
{
|
|
sSuccess = "*Death Attack Failed*";
|
|
}
|
|
}
|
|
|
|
if(GetLocalInt(oPC, "HatedFoe") != iEnemyRace )
|
|
{
|
|
sSuccess = "*Not Hated Foe: Death Attack Not Possible*";
|
|
}
|
|
|
|
PerformAttackRound(oTarget, oPC, eDeath, 0.0, 0, 0, 0, FALSE, sSuccess, sMiss);
|
|
}
|
|
else
|
|
{
|
|
SendMessageToPC(oPC,"Your are still studying your target. Please wait "+IntToString(FloatToInt(fApplyDATime))+ " seconds and you will perform the death attack");
|
|
// Run more heartbeats
|
|
DelayCommand(6.0,ExecuteScript("prc_fh_da_hb",oPC));
|
|
}
|
|
return;
|
|
} |