Weapon enhancements update
Posted: Thu Jun 24, 2004 10:47 am
This will allow flame weapon to be used on any item with an OnHit property (Flaming umbrellas anyone?)
The single line code change should work on all weapon enhancements
It's a one line change to Code:
object oMyWeapon = GetSpellTargetObject();
Here's the full code for Flame weapon
The single line code change should work on all weapon enhancements
It's a one line change to Code:
object oMyWeapon = GetSpellTargetObject();
Here's the full code for Flame weapon
Code: Select all
//::///////////////////////////////////////////////
//:: Flame Weapon
//:: x2_s0_flameweap.nss
//:: Last modded by Brent Hartmann (Hala/NT/COPAP) 24/6/04
//:://////////////////////////////////////////////
// Applies 1d4+ 1/level (to a maximum of +10) fire damage to melee weapons,
// arrows, or gloves/bracers.
// 1 hour per level
#include "x2_inc_spellhook"
void main()
{
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run
// this spell.
if (!X2PreSpellCastCode())
{
return;
}
//Declare major variables
effect eVis = EffectVisualEffect(VFX_IMP_PULSE_FIRE);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eLink = EffectLinkEffects(eVis, eDur);
object oTarget = GetSpellTargetObject();
int nDuration = 2 * GetCasterLevel(OBJECT_SELF);
int nMetaMagic = GetMetaMagicFeat();
int nCasterLvl = GetCasterLevel(OBJECT_SELF);
if (nMetaMagic == METAMAGIC_EXTEND)
{
nDuration = nDuration * 2; //Duration is +100%
}
// Handle spell cast on item....
if (GetObjectType(oTarget) == OBJECT_TYPE_ITEM && ! CIGetIsCraftFeatBaseItem(oTarget))
{
// Do not allow casting on not equippable items
if (!IPGetIsItemEquipable(oTarget))
{
// Item must be equipable...
FloatingTextStrRefOnCreature(83326,OBJECT_SELF);
return;
}
//Adds the base 1d4 damage
itemproperty ip = ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_FIRE, IP_CONST_DAMAGEBONUS_1d4);
//Adds the glow
itemproperty ip1 = ItemPropertyVisualEffect(ITEM_VISUAL_FIRE);
//Adds the extra damage
itemproperty ip2 = ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_FIRE, IP_CONST_DAMAGEBONUS_1);
//
//sets the damage for the different caster levels
if (nCasterLvl == 3)
{
ip2 = ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_FIRE, IP_CONST_DAMAGEBONUS_3);
}
if (nCasterLvl == 4)
{
ip2 = ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_FIRE, IP_CONST_DAMAGEBONUS_4);
}
if (nCasterLvl == 5)
{
ip2 = ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_FIRE, IP_CONST_DAMAGEBONUS_5);
}
if (nCasterLvl == 6)
{
ip2 = ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_FIRE, IP_CONST_DAMAGEBONUS_6);
}
if (nCasterLvl == 7)
{
ip2 = ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_FIRE, IP_CONST_DAMAGEBONUS_7);
}
if (nCasterLvl == 8)
{
ip2 = ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_FIRE, IP_CONST_DAMAGEBONUS_8);
}
if (nCasterLvl == 9)
{
ip2 = ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_FIRE, IP_CONST_DAMAGEBONUS_9);
}
if (nCasterLvl == 10)
{
ip2 = ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_FIRE, IP_CONST_DAMAGEBONUS_10);
}
if (nCasterLvl > 10)
{
ip2 = ItemPropertyDamageBonus (IP_CONST_DAMAGETYPE_FIRE, IP_CONST_DAMAGEBONUS_10);
}
if (GetItemHasItemProperty(oTarget, ITEM_PROPERTY_DAMAGE_BONUS))
{
IPRemoveMatchingItemProperties(oTarget,ITEM_PROPERTY_DAMAGE_BONUS,DURATION_TYPE_TEMPORARY);
}
nDuration = GetCasterLevel(OBJECT_SELF);
nMetaMagic = GetMetaMagicFeat();
//Enter Metamagic conditions
if (nMetaMagic == METAMAGIC_EXTEND)
{
nDuration = nDuration *2; //Duration is +100%
}
AddItemProperty(DURATION_TYPE_TEMPORARY,ip,oTarget,HoursToSeconds(nDuration));
AddItemProperty(DURATION_TYPE_TEMPORARY,ip1,oTarget,HoursToSeconds(nDuration));
AddItemProperty(DURATION_TYPE_TEMPORARY,ip2,oTarget,HoursToSeconds(nDuration));
}
else
{
///Put what you want to happen when an object isn't targeted directly down here.
}