#include "prc_inc_combat" void main() { object oTarget = PRCGetSpellTargetObject(); object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, OBJECT_SELF); int iBonusA; //check for non-ranged weapon if (!GetWeaponRanged(oWeap)) { SendMessageToPC(OBJECT_SELF, "You can only use Pinpoint Accuracy with a ranged weapon"); return; } //arrow vfx effect eArrow = EffectVisualEffect(NORMAL_ARROW); ApplyEffectToObject(DURATION_TYPE_INSTANT, eArrow, oTarget); //spell ID determines level of effect int nSpellId = GetSpellId(); switch (nSpellId) { case SPELL_PINPOINTACCURACY2: iBonusA = 2; break; case SPELL_PINPOINTACCURACY4: iBonusA = 4; break; case SPELL_PINPOINTACCURACY6: iBonusA = 6; break; } //Perfect shot adds extra damage int nDamage; int nLostAttacks = GetMainHandAttacks(OBJECT_SELF)-1; if(GetHasFeat(FEAT_PERFECTSHOT2)) nDamage = d6(nLostAttacks); else if(GetHasFeat(FEAT_PERFECTSHOT)) nDamage = d4(nLostAttacks); //killing shot increases critical range by 2 //this is fudged into the main combat functions if(GetHasFeat(FEAT_KILLINGSHOT)) { SetLocalInt(OBJECT_SELF, "KillingShotCritical", TRUE); DelayCommand(0.1, DeleteLocalInt(OBJECT_SELF, "KillingShotCritical")); } effect eInvalid; PerformAttack(oTarget, OBJECT_SELF, eInvalid, 0.0, iBonusA, nDamage, DAMAGE_TYPE_PIERCING, "*Pinpoint Accuracy Hit*", "*Pinpoint Accuracy Miss*"); }