//::///////////////////////////////////////////////
//:: Name Drow Judicator Warstrike
//:: FileName prc_dj_warstrike
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
This is the spell effect of the Warstrike ability
of the Drow Judicator prestige class.
*/
//:://////////////////////////////////////////////
//:: Created By: PsychicToaster
//:: Created On: 7-24-04
//:: Updated by Oni5115 9/23/2004 to use new combat engine
//:://////////////////////////////////////////////

#include "prc_inc_combat"

void main()
{

//Setup Variables
object oPC      = OBJECT_SELF;
object oTarget  = PRCGetSpellTargetObject();

if(oPC == oTarget)
{
     SendMessageToPC(oPC,"You cannot attack yourself...");
     return;
}
        
object oWeapR   = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);

int bIsRangedAttack = GetWeaponRanged(oWeapR);
int    nClass   = GetLevelByClass(CLASS_TYPE_JUDICATOR);
int    nChaMod  = GetAbilityModifier(ABILITY_CHARISMA);
int    nFortDC  = 10+nClass+nChaMod;
int    nCon     = d6(2);

//Roll Fortitude Saving Throw
if(FortitudeSave(oTarget, nFortDC, SAVING_THROW_FORT, oPC))
{
    nCon = nCon/2;
			if (GetHasMettle(oTarget, SAVING_THROW_FORT))
			// This script does nothing if it has Mettle, bail
				return;      
    //Debug
    //SpeakString("Debug Save Succeeded.  Damage Dealt ="+IntToString(nCon));
}

effect eVis = EffectVisualEffect(VFX_IMP_POISON_L);
effect eCon  = EffectAbilityDecrease(ABILITY_CONSTITUTION,nCon);
effect eLink = EffectLinkEffects(eVis, eCon);

//ApplyEffectToObject(DURATION_TYPE_PERMANENT, MagicalEffect(eLink), oTarget);
//Debug
//SpeakString("Damage Dealt ="+IntToString(nCon));


     // script now uses combat system to hit and apply effect if appropriate
     string sSuccess = "";
     string sMiss = "";
     float fDistance = GetDistanceBetween(oPC, oTarget);
        
     // 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)
     {
           AssignCommand(oPC, ActionMoveToLocation(GetLocation(oTarget), TRUE) );
           sSuccess = "*War Strike Hit*";
           sMiss    = "*War Strike Miss*";
           
     }        
     
     PerformAttackRound(oTarget, oPC, eLink, 0.0, 0, 0, 0, FALSE, sSuccess, sMiss);
}