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.
65 lines
2.1 KiB
Plaintext
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);
|
|
} |