200 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			200 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
 | 
						|
//::///////////////////////////////////////////////
 | 
						|
//:: Bless Weapon
 | 
						|
//:: X2_S0_BlssWeap
 | 
						|
//:: Copyright (c) 2003 Bioware Corp.
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
/*
 | 
						|
 | 
						|
 If cast on a crossbow bolt, it adds the ability to
 | 
						|
 slay rakshasa's on hit
 | 
						|
 | 
						|
 If cast on a melee weapon, it will add the
 | 
						|
 grants a +1 enhancement bonus.
 | 
						|
 grants a +2d6 damage divine to undead
 | 
						|
 | 
						|
 will add a holy vfx when command becomes available
 | 
						|
 | 
						|
 If cast on a creature it will pick the first
 | 
						|
 melee weapon without these effects
 | 
						|
 | 
						|
*/
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
//:: Created By: Andrew Nobbs
 | 
						|
//:: Created On: Nov 28, 2002
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
//:: Updated by Rose Dec. 6, 2015
 | 
						|
 | 
						|
 | 
						|
#include "nw_i0_spells"
 | 
						|
//#include "x2_i0_spells" #include "prc_inc_spells"
 | 
						|
 | 
						|
#include "x2_inc_spellhook"
 | 
						|
 | 
						|
void AddFlamingEffectToWeapon( object oTarget, float fDuration, int nCasterLvl)
 | 
						|
{
 | 
						|
 IPSafeAddItemProperty(oTarget, ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_DIVINE, IP_CONST_DAMAGEBONUS_2d8), fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
void AddBlessEffectToWeapon(object oTarget, float fDuration)
 | 
						|
{
 | 
						|
 // If the spell is cast again, any previous enhancement boni are kept
 | 
						|
 IPSafeAddItemProperty(oTarget, ItemPropertyEnhancementBonus(3), fDuration, X2_IP_ADDPROP_POLICY_KEEP_EXISTING,TRUE);
 | 
						|
 // Replace existing temporary anti undead boni
 | 
						|
 //IPSafeAddItemProperty(oTarget, ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD, IP_CONST_DAMAGETYPE_DIVINE, IP_CONST_DAMAGEBONUS_1d4), fDuration,X2_IP_ADDPROP_POLICY_REPLACE_EXISTING );
 | 
						|
 IPSafeAddItemProperty(oTarget, ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_DIVINE, IP_CONST_DAMAGEBONUS_2d12), fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
 | 
						|
 IPSafeAddItemProperty(oTarget, ItemPropertyVisualEffect(ITEM_VISUAL_HOLY), fDuration,X2_IP_ADDPROP_POLICY_REPLACE_EXISTING,FALSE,TRUE );
 | 
						|
 return;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
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_SUPER_HEROISM);
 | 
						|
 effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
 | 
						|
 object oTarget = GetSpellTargetObject();
 | 
						|
 int nDuration = 2 * GetCasterLevel(OBJECT_SELF);
 | 
						|
 int nCasterLvl = GetCasterLevel(OBJECT_SELF);
 | 
						|
 int nMetaMagic = GetMetaMagicFeat();
 | 
						|
 if (nMetaMagic == METAMAGIC_EXTEND)
 | 
						|
 {
 | 
						|
     nDuration = nDuration * 2; //Duration is +100%
 | 
						|
 }
 | 
						|
 | 
						|
 // ---------------- TARGETED ON BOLT -------------------
 | 
						|
 if(GetIsObjectValid(oTarget) && GetObjectType(oTarget) == OBJECT_TYPE_ITEM)
 | 
						|
 {
 | 
						|
     // special handling for blessing crossbow bolts that can slay rakshasa's
 | 
						|
     if (GetBaseItemType(oTarget) == BASE_ITEM_BOLT)
 | 
						|
     {
 | 
						|
         SignalEvent(GetItemPossessor(oTarget), EventSpellCastAt(OBJECT_SELF, GetSpellId(), FALSE));
 | 
						|
         IPSafeAddItemProperty(oTarget, ItemPropertyOnHitCastSpell(123,1), RoundsToSeconds(nDuration), X2_IP_ADDPROP_POLICY_KEEP_EXISTING );
 | 
						|
         ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, GetItemPossessor(oTarget));
 | 
						|
         ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur, GetItemPossessor(oTarget), RoundsToSeconds(nDuration));
 | 
						|
         return;
 | 
						|
     }
 | 
						|
 }
 | 
						|
 | 
						|
 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);
 | 
						|
        }
 | 
						|
    }
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        SendMessageToPC(OBJECT_SELF, "You must target a creature!");
 | 
						|
        return;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 |