Adding the dragon breath 'spells' to an item gives you the sound and a fire effect, but otherwise doesn't do any damage.
Below is a version of one of the dragon breath spell scripts (fire) that I've modified to work when cast from an item. Use it as a tag-based 'on activated' script (i_itemtag_ac). Unfortunately I can't get the main visual effect to work properly (see the comments in the script itself). It will damage any creature, placeable or door with a 'hostile' faction.
You may also want to alter the dragon age progression (based on hit dice). By default it goes up to 40, probably because it's been recycled from NWN1.
----
//::///////////////////////////////////////////////
//:: Dragon Breath Fire
//:: NW_S1_DragFire
//:: Copyright © 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Calculates the proper damage and DC Save for the
breath weapon based on the HD of the dragon.
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: May 9, 2001
//:: Modified By: Constant Gaw - 8/9/06
//:://////////////////////////////////////////////
//:: RPGplayer1 03/19/2008: Make damage roll for each target
//:: DannJ 17/05/2011: Modified for use as an OnActivate tag-based script
#include "NW_I0_SPELLS"
#include "x0_i0_spells"
void BreathFire(object oDragon, int nDamage, int nDC);
void main()
{
//Declare major variables
object oDragon = GetItemActivator();//Change all OBJECT_SELF to oDragon
int nAge = GetHitDice(oDragon);
int nDamage, nDC, nDamStrike;
float fDelay;
object oTarget;
effect eVis, eBreath;
//Use the HD of the creature to determine damage and save DC
if (nAge <= 6) //Wyrmling
{
nDamage = 2;
nDC = 15;
}
else if (nAge >= 7 && nAge <= 9) //Very Young
{
nDamage = 4;
nDC = 18;
}
else if (nAge >= 10 && nAge <= 12) //Young
{
nDamage = 6;
nDC = 19;
}
else if (nAge >= 13 && nAge <= 15) //Juvenile
{
nDamage = 8;
nDC = 22;
}
else if (nAge >= 16 && nAge <= 18) //Young Adult
{
nDamage = 10;
nDC = 24;
}
else if (nAge >= 19 && nAge <= 22) //Adult
{
nDamage = 12;
nDC = 25;
}
else if (nAge >= 23 && nAge <= 24) //Mature Adult
{
nDamage = 14;
nDC = 28;
}
else if (nAge >= 25 && nAge <= 27) //Old
{
nDamage = 16;
nDC = 30;
}
else if (nAge >= 28 && nAge <= 30) //Very Old
{
nDamage = 18;
nDC = 33;
}
else if (nAge >= 31 && nAge <= 33) //Ancient
{
nDamage = 20;
nDC = 35;
}
else if (nAge >= 34 && nAge <= 37) //Wyrm
{
nDamage = 22;
nDC = 38;
}
else if (nAge > 37) //Great Wyrm
{
nDamage = 24;
nDC = 40;
}
// effect eFireBreath = EffectNWN2SpecialEffectFile("fx_red_dragon_breath.sef");
// Can't get effect below to 'cone out'. VFX_DUR_CONE_FIRE works but is too small
effect eFireBreath = EffectVisualEffect(VFX_CONE_RED_DRAGON_FIRE);
PlayDragonBattleCry();
PlayCustomAnimation(oDragon, "Una_breathattack01", 0, 0.7f);
DelayCommand(0.5f, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eFireBreath, oDragon, 3.0f));
//Get first target in spell area
AssignCommand(oDragon, DelayCommand(0.7f, BreathFire(oDragon, nDamage, nDC)));
}
void BreathFire(object oDragon, int nDamage, int nDC)
{
float fDelay;
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M);
object oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 15.0, GetItemActivatedTargetLocation(), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
while(GetIsObjectValid(oTarget))
{
if(oTarget != oDragon && GetIsStandardHostileTarget(oTarget, oDragon))
{
//Reset the damage to full
int nDamStrike = d10(nDamage);
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(oDragon, SPELLABILITY_DRAGON_BREATH_FIRE));
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
if(MySavingThrow(SAVING_THROW_REFLEX, oTarget, nDC, SAVING_THROW_TYPE_FIRE))
{
nDamStrike = nDamStrike/2;
if(GetHasFeat(FEAT_EVASION, oTarget) || GetHasFeat(FEAT_IMPROVED_EVASION, oTarget))
{
nDamStrike = 0;
}
}
else if(GetHasFeat(FEAT_IMPROVED_EVASION, oTarget))
{
nDamStrike = nDamStrike/2;
}
effect eBreath = EffectDamage(nDamStrike, DAMAGE_TYPE_FIRE);
if (nDamStrike > 0)
{
//Determine effect delay
//fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20;
//Apply the VFX impact and effects
DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oTarget, 3.0f));
DelayCommand(2.0, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oTarget, 3.0f));
DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eBreath, oTarget));
}
}
//Get next target in spell area
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 15.0, GetItemActivatedTargetLocation(), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
}