214 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			214 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
//::///////////////////////////////////////////////
 | 
						|
//:: Healing Sting
 | 
						|
//:: X2_S0_HealStng
 | 
						|
//:: Copyright (c) 2001 Bioware Corp.
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
//:: Updated by Rose, Dec. 6, 2015
 | 
						|
 | 
						|
// complete redesign now imbuing target held weapon with the power of lightning giving it 2d12 electrical Damage bonus.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 #include "x2_inc_spellhook"
 | 
						|
 | 
						|
/* This function has been replaced for optimization reasons
 | 
						|
void AddFlamingEffectToWeapon(object oTarget, float fDuration, int nCasterLvl)
 | 
						|
{
 | 
						|
 // If the spell is cast again, any previous itemproperties matching are removed.
 | 
						|
 IPSafeAddItemProperty(oTarget, ItemPropertyOnHitCastSpell(127,nCasterLvl), fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
 | 
						|
 | 
						|
 IPSafeAddItemProperty(oTarget, ItemPropertyVisualEffect(ITEM_VISUAL_FIRE), fDuration,X2_IP_ADDPROP_POLICY_REPLACE_EXISTING,FALSE,TRUE);
 | 
						|
 return;
 | 
						|
}
 | 
						|
*/
 | 
						|
 | 
						|
void AddFlamingEffectToWeapon( object oTarget, float fDuration, int nCasterLvl)
 | 
						|
{
 | 
						|
    IPSafeAddItemProperty(oTarget, ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL, IP_CONST_DAMAGEBONUS_2d8), fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
 | 
						|
 | 
						|
    IPSafeAddItemProperty(oTarget, ItemPropertyVisualEffect(ITEM_VISUAL_ELECTRICAL), fDuration,X2_IP_ADDPROP_POLICY_REPLACE_EXISTING,FALSE,TRUE);
 | 
						|
}
 | 
						|
 | 
						|
void main()
 | 
						|
{
 | 
						|
 | 
						|
 /*
 | 
						|
 Spellcast Hook Code
 | 
						|
 Added 2003-07-07 by Georg Zoeller
 | 
						|
 If you want to make changes to all spells,
 | 
						|
 check x2_inc_spellhook.nss to find out more
 | 
						|
 | 
						|
 */
 | 
						|
     if (!X2PreSpellCastCode())
 | 
						|
 {
 | 
						|
     // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
 | 
						|
     return;
 | 
						|
 }
 | 
						|
 // End of Spell Cast Hook
 | 
						|
 | 
						|
 | 
						|
 //Declare major variables
 | 
						|
 effect eVis = EffectVisualEffect(VFX_IMP_PULSE_FIRE);
 | 
						|
 eVis = EffectLinkEffects(EffectVisualEffect(VFX_IMP_FLAME_M),eVis);
 | 
						|
 effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
 | 
						|
 int nDuration = 2 * GetCasterLevel(OBJECT_SELF);
 | 
						|
 int nMetaMagic = GetMetaMagicFeat();
 | 
						|
 int nCasterLvl = GetCasterLevel(OBJECT_SELF);
 | 
						|
 | 
						|
 //Limit nCasterLvl to 10, so it max out at +10 to the damage.
 | 
						|
 //Bugfix: Limiting nCasterLvl to *20* - the damage calculation
 | 
						|
 // divides it by 2.
 | 
						|
 if(nCasterLvl > 20)
 | 
						|
 {
 | 
						|
     nCasterLvl = 20;
 | 
						|
 }
 | 
						|
 | 
						|
 if (nMetaMagic == METAMAGIC_EXTEND)
 | 
						|
 {
 | 
						|
     nDuration = nDuration * 2; //Duration is +100%
 | 
						|
 }
 | 
						|
 | 
						|
 object oTarget = GetSpellTargetObject();
 | 
						|
 if(GetIsObjectValid(oTarget) && GetObjectType(oTarget) == OBJECT_TYPE_CREATURE)
 | 
						|
 {
 | 
						|
    // Alter the right hand weapon equipped by the creature.
 | 
						|
    object oWeapon1 = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
 | 
						|
    if(GetIsObjectValid(oWeapon1))
 | 
						|
    {
 | 
						|
        // If the PC has a melee weapon equipped.
 | 
						|
        if ( IPGetIsMeleeWeapon(oWeapon1))
 | 
						|
        {
 | 
						|
            SignalEvent(oWeapon1, EventSpellCastAt(OBJECT_SELF, GetSpellId(), FALSE));
 | 
						|
 | 
						|
            if (nDuration>0)
 | 
						|
            {
 | 
						|
                // haaaack: store caster level on item for the on hit spell to work properly
 | 
						|
                ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, GetItemPossessor(oWeapon1));
 | 
						|
                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur, GetItemPossessor(oWeapon1), TurnsToSeconds(nDuration));
 | 
						|
                AddFlamingEffectToWeapon(oWeapon1, TurnsToSeconds(nDuration),nCasterLvl);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            FloatingTextStrRefOnCreature(83615, OBJECT_SELF);
 | 
						|
        }
 | 
						|
    }
 | 
						|
    // Alter the left hand weapon equipped by the creature.
 | 
						|
    object oWeapon2 = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget);
 | 
						|
    if(GetIsObjectValid(oWeapon2))
 | 
						|
    {
 | 
						|
        // If the PC has a melee weapon equipped.
 | 
						|
        if ( IPGetIsMeleeWeapon(oWeapon2))
 | 
						|
        {
 | 
						|
            SignalEvent(oWeapon2, EventSpellCastAt(OBJECT_SELF, GetSpellId(), FALSE));
 | 
						|
 | 
						|
            if (nDuration>0)
 | 
						|
            {
 | 
						|
                // haaaack: store caster level on item for the on hit spell to work properly
 | 
						|
                ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, GetItemPossessor(oWeapon2));
 | 
						|
                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur, GetItemPossessor(oWeapon2), TurnsToSeconds(nDuration));
 | 
						|
                AddFlamingEffectToWeapon(oWeapon2, TurnsToSeconds(nDuration),nCasterLvl);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            FloatingTextStrRefOnCreature(83615, OBJECT_SELF);
 | 
						|
        }
 | 
						|
    }
 | 
						|
    // Alter the right claw equipped by the creature.
 | 
						|
    object oWeapon3 = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oTarget);
 | 
						|
    if(GetIsObjectValid(oWeapon3))
 | 
						|
    {
 | 
						|
        SignalEvent(oWeapon3, EventSpellCastAt(OBJECT_SELF, GetSpellId(), FALSE));
 | 
						|
 | 
						|
        if (nDuration>0)
 | 
						|
        {
 | 
						|
            // haaaack: store caster level on item for the on hit spell to work properly
 | 
						|
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, GetItemPossessor(oWeapon3));
 | 
						|
            ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur, GetItemPossessor(oWeapon3), TurnsToSeconds(nDuration));
 | 
						|
            AddFlamingEffectToWeapon(oWeapon3, TurnsToSeconds(nDuration),nCasterLvl);
 | 
						|
        }
 | 
						|
    }
 | 
						|
    // Alter the left claw equipped by the creature.
 | 
						|
    object oWeapon4 = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oTarget);
 | 
						|
    if(GetIsObjectValid(oWeapon4))
 | 
						|
    {
 | 
						|
        SignalEvent(oWeapon4, EventSpellCastAt(OBJECT_SELF, GetSpellId(), FALSE));
 | 
						|
 | 
						|
        if (nDuration>0)
 | 
						|
        {
 | 
						|
            // haaaack: store caster level on item for the on hit spell to work properly
 | 
						|
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, GetItemPossessor(oWeapon4));
 | 
						|
            ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur, GetItemPossessor(oWeapon4), TurnsToSeconds(nDuration));
 | 
						|
            AddFlamingEffectToWeapon(oWeapon4, TurnsToSeconds(nDuration),nCasterLvl);
 | 
						|
        }
 | 
						|
    }
 | 
						|
    // Alter the bite equipped by the creature.
 | 
						|
    object oWeapon5 = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oTarget);
 | 
						|
    if(GetIsObjectValid(oWeapon5))
 | 
						|
    {
 | 
						|
        SignalEvent(oWeapon5, EventSpellCastAt(OBJECT_SELF, GetSpellId(), FALSE));
 | 
						|
 | 
						|
        if (nDuration>0)
 | 
						|
        {
 | 
						|
            // haaaack: store caster level on item for the on hit spell to work properly
 | 
						|
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, GetItemPossessor(oWeapon5));
 | 
						|
            ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur, GetItemPossessor(oWeapon5), TurnsToSeconds(nDuration));
 | 
						|
            AddFlamingEffectToWeapon(oWeapon5, TurnsToSeconds(nDuration),nCasterLvl);
 | 
						|
        }
 | 
						|
    }
 | 
						|
    // Alter the right hand weapon equipped by the creature.
 | 
						|
    object oWeapon6 = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, OBJECT_SELF);
 | 
						|
    if(GetIsObjectValid(oWeapon6))
 | 
						|
    {
 | 
						|
        // If the PC has a melee weapon equipped.
 | 
						|
        if ( IPGetIsMeleeWeapon(oWeapon6))
 | 
						|
        {
 | 
						|
            SignalEvent(oWeapon6, EventSpellCastAt(OBJECT_SELF, GetSpellId(), FALSE));
 | 
						|
 | 
						|
            if (nDuration>0)
 | 
						|
            {
 | 
						|
                // haaaack: store caster level on item for the on hit spell to work properly
 | 
						|
                ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, GetItemPossessor(oWeapon6));
 | 
						|
                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur, GetItemPossessor(oWeapon6), TurnsToSeconds(nDuration));
 | 
						|
                AddFlamingEffectToWeapon(oWeapon6, TurnsToSeconds(nDuration),nCasterLvl);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            FloatingTextStrRefOnCreature(83615, OBJECT_SELF);
 | 
						|
        }
 | 
						|
    }
 | 
						|
    // Alter the left hand weapon equipped by the creature.
 | 
						|
    object oWeapon7 = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, OBJECT_SELF);
 | 
						|
    if(GetIsObjectValid(oWeapon7))
 | 
						|
    {
 | 
						|
        // If the PC has a melee weapon equipped.
 | 
						|
        if ( IPGetIsMeleeWeapon(oWeapon7))
 | 
						|
        {
 | 
						|
            SignalEvent(oWeapon7, EventSpellCastAt(OBJECT_SELF, GetSpellId(), FALSE));
 | 
						|
 | 
						|
            if (nDuration>0)
 | 
						|
            {
 | 
						|
                // haaaack: store caster level on item for the on hit spell to work properly
 | 
						|
                ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, GetItemPossessor(oWeapon7));
 | 
						|
                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur, GetItemPossessor(oWeapon7), TurnsToSeconds(nDuration));
 | 
						|
                AddFlamingEffectToWeapon(oWeapon7, TurnsToSeconds(nDuration),nCasterLvl);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            FloatingTextStrRefOnCreature(83615, OBJECT_SELF);
 | 
						|
        }
 | 
						|
    }
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        SendMessageToPC(OBJECT_SELF, "You must target a creature!");
 | 
						|
        return;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
 |