Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
96 lines
3.1 KiB
Plaintext
96 lines
3.1 KiB
Plaintext
/*:://////////////////////////////////////////////
|
|
//:: Spell Name Flame Arrow
|
|
//:: Spell FileName PHS_S_FlameArrow
|
|
//:://////////////////////////////////////////////
|
|
//:: In Game Spell desctiption
|
|
//:://////////////////////////////////////////////
|
|
50 projectiles are given 1d6 fire damage for 10min/level.
|
|
//:://////////////////////////////////////////////
|
|
//:: Spell Effects Applied / Notes
|
|
//:://////////////////////////////////////////////
|
|
Using the hordes functions, and checking inventory, it applies 10 minutes/level
|
|
worth of damage increase.
|
|
|
|
Only works on ones which don't have it already, normally base items.
|
|
|
|
Searches:
|
|
- If the target is a projectile
|
|
- Ammo slot for an equipped ranged weapon
|
|
- First valid ammo slot
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Jasperre
|
|
//::////////////////////////////////////////////*/
|
|
|
|
#include "PHS_INC_SPELLS"
|
|
#include "prc_x2_itemprop"
|
|
|
|
// Adds 1d6 damage to oItem, fire damage.
|
|
void AddDamageToItem(object oItem, float fDuration);
|
|
|
|
void main()
|
|
{
|
|
// Spell Hook Check.
|
|
if(!PHS_SpellHookCheck(PHS_SPELL_FLAME_ARROW)) return;
|
|
|
|
// Declare Major Variables
|
|
object oCaster = OBJECT_SELF;
|
|
object oTarget = GetSpellTargetObject(); // Should be an item!
|
|
object oPossessor = GetItemPossessor(oTarget);
|
|
int nAmmoType = GetBaseItemType(oTarget);
|
|
int nCasterLevel = PHS_GetCasterLevel();
|
|
int nMetaMagic = PHS_GetMetaMagicFeat();
|
|
itemproperty IP_COMPARE = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE, IP_CONST_DAMAGEBONUS_1d6);
|
|
|
|
// Duration is 10 minutes a level
|
|
float fDuration = PHS_GetDuration(PHS_MINUTES, nCasterLevel * 10, nMetaMagic);
|
|
|
|
if(GetIsObjectValid(oPossessor))
|
|
{
|
|
// Signal event
|
|
PHS_SignalSpellCastAt(oPossessor, PHS_SPELL_FLAME_ARROW, FALSE);
|
|
}
|
|
|
|
// Should target the projectiles to change
|
|
if(GetIsObjectValid(oTarget) &&
|
|
(nAmmoType == BASE_ITEM_ARROW ||
|
|
nAmmoType == BASE_ITEM_BULLET ||
|
|
nAmmoType == BASE_ITEM_BOLT) &&
|
|
!PHS_IP_GetIsEnchanted(oTarget) /* && Is not enchanted*/)
|
|
{
|
|
// Enchant item
|
|
AddDamageToItem(oTarget, fDuration);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Adds 1d6 damage to oItem, fire damage.
|
|
void AddDamageToItem(object oItem, float fDuration)
|
|
{
|
|
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
|
|
object oPossessor = GetItemPossessor(oItem);
|
|
if(GetIsObjectValid(oPossessor))
|
|
{
|
|
PHS_ApplyVFX(oPossessor, eVis);
|
|
}
|
|
else
|
|
{
|
|
PHS_ApplyLocationVFX(GetLocation(oItem), eVis);
|
|
}
|
|
// Split stack size
|
|
int nStack = GetItemStackSize(oItem);
|
|
int nCreateNew = nStack - 50;
|
|
object oNew;
|
|
if(nCreateNew > 0)
|
|
{
|
|
// Split the CopyItemitems if we have over 50 in a stack
|
|
oNew = CopyItem(oItem, oPossessor, TRUE);
|
|
SetItemStackSize(oNew, nCreateNew);
|
|
// Set orignal to 50
|
|
SetItemStackSize(oItem, 50);
|
|
}
|
|
// Apply effects using Bioware's way
|
|
itemproperty IP_Fire = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE, IP_CONST_DAMAGEBONUS_1d6);
|
|
// Add new one
|
|
IPSafeAddItemProperty(oItem, IP_Fire, fDuration, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, TRUE);
|
|
}
|