PRC8/nwn/nwnprc/trunk/scripts/prc_at_isa.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
2024-02-11 14:01:05 -05:00

65 lines
2.1 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Arcane Trickster
//:://////////////////////////////////////////////
/*
Script to Simulate the Impromptu Sneak Attack
*/
//:://////////////////////////////////////////////
//:: Created By: Oni5115
//:: Created On: Mar 11, 2004
//:: Updated by Oni5115 9/23/2004 to use new combat engine
//:://////////////////////////////////////////////
#include "prc_inc_combat"
void main()
{
object oTarget = PRCGetSpellTargetObject();
object oPC = OBJECT_SELF;
if(oPC == oTarget)
{
SendMessageToPC(oPC,"You cannot attack yourself...");
return;
}
// might need to modify the enemies bonus AC due to other class abilities
// things like Canny Defense which are typically lost when a player loses dex bonus to AC
int iEnemydexBonus = GetAbilityModifier(ABILITY_DEXTERITY, oTarget);
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
int iDamageType = GetWeaponDamageType(oWeap);
int iDamagePower = GetDamagePowerConstant(oWeap, oTarget, oPC);
int iSneakAttackDice = GetTotalSneakAttackDice(oPC);
int iSneakDamage = 0;
effect eSneakDamage;
string sSuccess = "";
string sMiss = "";
iSneakDamage = d6(iSneakAttackDice);
// gain no bonus damage if immune to criticals
if(GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT, OBJECT_INVALID) )
{
iSneakDamage = 0;
sSuccess = "*Enemy Immune to Impromptu Sneak Attack*";
}
// if enemy is more than 30 feet away
if(GetDistanceBetween(oTarget, oPC) >= FeetToMeters(30.0))
{
iSneakDamage = 0;
sSuccess = "*Enemy is to far away for Impromptu Sneak Attack*";
}
else
{
sSuccess = "*Impromptu Sneak Attack Hit*";
sMiss = "*Impromptu Sneak Attack Missed*";
}
// if using a melee weapon, make them run into melee range
eSneakDamage = EffectDamage(iSneakDamage, iDamageType, iDamagePower);
PerformAttackRound(oTarget, oPC, eSneakDamage, 0.0, iEnemydexBonus, 0, 0, FALSE, sSuccess, sMiss);
}