PRC8/nwn/nwnprc/trunk/include/inc_spirit_weapn.nss
Jaysyn904 7a4dc4dffc Fixed Sigmata radials
Fixed Sigmata radials.  Added spiritual weapon sanity checks.  Forsaker & Vow of Poverty fixes by @Fencas.  Updated Saint template.  Fixed minor TLK updates.  Updated release archive.
2024-12-28 22:43:13 -05:00

1108 lines
61 KiB
Plaintext

//::///////////////////////////////////////////////
//:: [Spiritual Weapon]
//:: [inc_spirit_weapn.nss]
//:: [Jaysyn 2024-08-23 07:58:14]
//::
//:: Include script for Spiritual Weapon
//::
//::///////////////////////////////////////////////
/**@ Spiritual Weapon
(Player's Handbook v.3.5, p. 283)
Evocation [Force]
Level: Cleric 2, Knight of the Chalice 2, War 2, Mysticism 2,
Components: V, S, DF,
Casting Time: 1 standard action
Range: Medium (100 ft. + 10 ft./level)
Effect: Magic weapon of force
Duration: 1 round/level (D)
Saving Throw: None
Spell Resistance: Yes
A weapon made of pure force springs into existence and attacks
opponents at a distance, as you direct it, dealing 1d8 force
damage per hit, +1 point per three caster levels (maximum +5
at 15th level). The weapon takes the shape of a weapon
favored by your deity or a weapon with some spiritual
significance or symbolism to you (see below) and has the
same threat range and critical multipliers as a real weapon
of its form. It strikes the opponent you designate, starting
with one attack in the round the spell is cast and continuing
each round thereafter on your turn. It uses your base attack
bonus (possibly allowing it multiple attacks per round in
subsequent rounds) plus your Wisdom modifier as its attack
bonus. It strikes as a spell, not as a weapon, so, for
example, it can damage creatures that have damage
reduction. As a force effect, it can strike incorporeal
creatures without the normal miss chance associated with
incorporeality. The weapon always strikes from your
direction. It does not get a flanking bonus or help a
combatant get one. Your feats (such as Weapon Focus)
or combat actions (such as charge) do not affect the
weapon. If the weapon goes beyond the spell range, if
it goes out of your sight, or if you are not directing
it, the weapon returns to you and hovers.
Each round after the first, you can use a move action to
redirect the weapon to a new target. If you do not,
the weapon continues to attack the previous round's
target. On any round that the weapon switches targets,
it gets one attack. Subsequent rounds of attacking that
target allow the weapon to make multiple attacks if your
base attack bonus would allow it to. Even if the spiritual
weapon is a ranged weapon, use the spell's range, not the
weapon's normal range increment, and switching targets
still is a move action.
A spiritual weapon cannot be attacked or harmed by
physical attacks, but dispel magic, disintegrate, a
sphere of annihilation, or a rod of cancellation affects it.
A spiritual weapon's AC against touch attacks is 12 (10 +
size bonus for Tiny object).
If an attacked creature has spell resistance, you make a
caster level check (1d20 + caster level) against that
spell resistance the first time the spiritual weapon
strikes it. If the weapon is successfully resisted, the
spell is dispelled. If not, the weapon has its normal
full effect on that creature for the duration of the spell.
*///////////////////////////////////////////////////////////
#include "inc_rand_equip"
#include "prc_inc_spells"
void NullifyAppearance(object oSummon, int nThrowHands = FALSE)
{
// Ensure the object is valid and is not a player or DM
if (!GetIsObjectValid(oSummon) || GetIsPC(oSummon) || GetIsDM(oSummon))
{
return;
}
// Nullify all body parts
SetCreatureBodyPart(CREATURE_PART_HEAD, 0, oSummon);
SetCreatureBodyPart(CREATURE_PART_TORSO, 0, oSummon);
SetCreatureBodyPart(CREATURE_PART_BELT, 0, oSummon);
SetCreatureBodyPart(CREATURE_PART_PELVIS, 0, oSummon);
SetCreatureBodyPart(CREATURE_PART_RIGHT_THIGH, 0, oSummon);
SetCreatureBodyPart(CREATURE_PART_LEFT_THIGH, 0, oSummon);
SetCreatureBodyPart(CREATURE_PART_RIGHT_FOOT, 0, oSummon);
SetCreatureBodyPart(CREATURE_PART_LEFT_FOOT, 0, oSummon);
SetCreatureBodyPart(CREATURE_PART_RIGHT_FOREARM, 0, oSummon);
SetCreatureBodyPart(CREATURE_PART_LEFT_FOREARM, 0, oSummon);
SetCreatureBodyPart(CREATURE_PART_RIGHT_HAND, 0, oSummon);
SetCreatureBodyPart(CREATURE_PART_LEFT_HAND, 0, oSummon);
if(nThrowHands)
{
// Keep hands and forearms visible
SetCreatureBodyPart(CREATURE_PART_RIGHT_FOREARM, 1, oSummon);
SetCreatureBodyPart(CREATURE_PART_LEFT_FOREARM, 1, oSummon);
SetCreatureBodyPart(CREATURE_PART_RIGHT_HAND, 1, oSummon);
SetCreatureBodyPart(CREATURE_PART_LEFT_HAND, 1, oSummon);
}
}
void RegisterSummonEvents(object oCreature)
{
// Explicitly re-register the event for the next spell cast at the summon.
AddEventScript(oCreature, EVENT_NPC_ONSPELLCASTAT, "sp_spiritweapon", TRUE);
AddEventScript(oCreature, EVENT_NPC_ONSPELLCASTAT, "sp_spiritweapon", TRUE);
SendMessageToPC(GetFirstPC(), "inc_spirit_weapn: Event re-registered for next spell cast.");
}
// Returns the alignment component with the most points towards it.
// Possible returns: ALIGNMENT_LAWFUL, ALIGNMENT_CHAOTIC, ALIGNMENT_GOOD, ALIGNMENT_EVIL, or ALIGNMENT_NEUTRAL.
int GetDominantAlignment(object oCreature)
{
int nLawChaos = GetLawChaosValue(oCreature);
int nGoodEvil = GetGoodEvilValue(oCreature);
int nDominant = ALIGNMENT_NEUTRAL;
// Check Law vs Chaos
if (nLawChaos > 50)
{
nDominant = ALIGNMENT_LAWFUL;
}
else if (nLawChaos < 50)
{
nDominant = ALIGNMENT_CHAOTIC;
}
// Check Good vs Evil
if (nGoodEvil > 50)
{
if (nLawChaos == 50 || nGoodEvil > nLawChaos) // Tie or Good is stronger
{
nDominant = ALIGNMENT_GOOD;
}
}
else if (nGoodEvil < 50)
{
if (nLawChaos == 50 || nGoodEvil < nLawChaos) // Tie or Evil is stronger
{
nDominant = ALIGNMENT_EVIL;
}
}
return nDominant;
}
void SetDeityByClass(object oCreature)
{
if(GetLevelByClass(CLASS_TYPE_RAVAGER, oCreature) > 0) SetDeity(oCreature, "Erythnul");
if(GetLevelByClass(CLASS_TYPE_TEMPUS, oCreature) > 0) SetDeity(oCreature, "Tempus");
if(GetLevelByClass(CLASS_TYPE_BLACK_BLOOD_CULTIST, oCreature) > 0) SetDeity(oCreature, "Malar");
if(GetLevelByClass(CLASS_TYPE_CELEBRANT_SHARESS, oCreature) > 0) SetDeity(oCreature, "Sharess");
if(GetLevelByClass(CLASS_TYPE_COC, oCreature) > 0) SetDeity(oCreature, "Corellon Larethian");
if(GetLevelByClass(CLASS_TYPE_VASSAL, oCreature) > 0) SetDeity(oCreature, "Bahamut");
if(GetLevelByClass(CLASS_TYPE_ORCUS, oCreature) > 0 ) SetDeity(oCreature, "Orcus");
if(GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCreature) > 0 ) SetDeity(oCreature, "Talona");
if(GetLevelByClass(CLASS_TYPE_STORMLORD, oCreature) > 0 ) SetDeity(oCreature, "Talos");
if(GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCreature) > 0 ) SetDeity(oCreature, "Tiamat");
if(GetLevelByClass(CLASS_TYPE_SOLDIER_OF_LIGHT, oCreature) > 0 ) SetDeity(oCreature, "Elishar");
if(GetLevelByClass(CLASS_TYPE_SLAYER_OF_DOMIEL, oCreature) > 0 ) SetDeity(oCreature, "Domiel");
if(GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCreature) > 0 ) SetDeity(oCreature, "Heironeous");
if(GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCreature) > 0 ) SetDeity(oCreature, "Wee Jas");
if(GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCreature) > 0 ) SetDeity(oCreature, "Lathander");
if(GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCreature) > 0 ) SetDeity(oCreature, "Kord");
if(GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCreature) > 0 ) SetDeity(oCreature, "Sune");
if(GetLevelByClass(CLASS_TYPE_HEXTOR, oCreature) > 0 ) SetDeity(oCreature, "Hextor");
if(GetLevelByClass(CLASS_TYPE_PRC_EYE_OF_GRUUMSH, oCreature) > 0 ) SetDeity(oCreature, "Gruumsh");
//if(GetLevelByClass(CLASS_TYPE_JUDICATOR, oCreature) > 0 ) SetDeity(oCreature, "Selvetarm");
if(GetLevelByClass(CLASS_TYPE_JUDICATOR, oCreature) > 0 ) SetDeity(oCreature, "Lolth");
if(GetLevelByClass(CLASS_TYPE_OCULAR, oCreature) > 0 ) SetDeity(oCreature, "Great Mother");
if(GetLevelByClass(CLASS_TYPE_KNIGHT_WEAVE, oCreature) > 0 ) SetDeity(oCreature, "Mystra");
}
string GetSpiritualWeaponTypeByDeity(object oCreature)
{
SetDeityByClass(oCreature);
string sDeity = GetStringLowerCase(GetDeity(oCreature));
string sResRef;
int nDomAlignment = GetDominantAlignment(oCreature);
if(GetStringRight(sDeity, 12) == GetStringLowerCase("glittergold") || GetStringRight(sDeity, 5) == GetStringLowerCase("auril")
|| GetStringRight(sDeity, 7) == GetStringLowerCase("balinor") || GetStringRight(sDeity, 11) == GetStringLowerCase("smoothhands")
|| GetStringRight(sDeity, 11) == GetStringLowerCase("silverbeard") || GetStringRight(sDeity, 6) == GetStringLowerCase("duerra")
|| GetStringRight(sDeity, 7) == GetStringLowerCase("gulthyn") || GetStringRight(sDeity, 8) == GetStringLowerCase("iallanis")
|| GetStringRight(sDeity, 5) == GetStringLowerCase("llerg") || GetStringRight(sDeity, 10) == GetStringLowerCase("maglubiyet")
|| GetStringRight(sDeity, 6) == GetStringLowerCase("tempus") || GetStringRight(sDeity, 6) == GetStringLowerCase("uthgar")
|| GetStringRight(sDeity, 6) == GetStringLowerCase("valkar") || GetStringRight(sDeity, 5) == GetStringLowerCase("vatun"))
sResRef = "nw_waxbt001"; //:: Battleaxe
else if(GetStringRight(sDeity, 6) == GetStringLowerCase("boccob") || GetStringRight(sDeity, 10) == GetStringLowerCase("fharlanghn")
|| GetStringRight(sDeity, 3) == GetStringLowerCase("hai") || GetStringRight(sDeity, 6) == GetStringLowerCase("faenya")
|| GetStringRight(sDeity, 6) == GetStringLowerCase("aureon") || GetStringRight(sDeity, 5) == GetStringLowerCase("azuth")
|| GetStringRight(sDeity, 5) == GetStringLowerCase("bralm") || GetStringRight(sDeity, 11) == GetStringLowerCase("cyrrollalee")
|| GetStringRight(sDeity, 8) == GetStringLowerCase("liothiel") || GetStringRight(sDeity, 9) == GetStringLowerCase("incabulos")
|| GetStringRight(sDeity, 3) == GetStringLowerCase("geb") || GetStringRight(sDeity, 7) == GetStringLowerCase("enoreth")
|| GetStringRight(sDeity, 6) == GetStringLowerCase("joramy") || GetStringRight(sDeity, 9) == GetStringLowerCase("panzuriel")
|| GetStringRight(sDeity, 9) == GetStringLowerCase("rallathil") || GetStringRight(sDeity, 7) == GetStringLowerCase("pholtus")
|| GetStringRight(sDeity, 3) == GetStringLowerCase("hai") || GetStringRight(sDeity, 10) == GetStringLowerCase("fharlanghn")
|| GetStringRight(sDeity, 7) == GetStringLowerCase("moonbow") || GetStringRight(sDeity, 8) == GetStringLowerCase("shiallia")
|| GetStringRight(sDeity, 7) == GetStringLowerCase("solanil") || GetStringRight(sDeity, 7) == GetStringLowerCase("tarmuid")
|| GetStringRight(sDeity, 6) == GetStringLowerCase("shadow") || GetStringRight(sDeity, 5) == GetStringLowerCase("thoth")
|| GetStringRight(sDeity, 10) == GetStringLowerCase("velsharoon") || GetStringRight(sDeity, 7) == GetStringLowerCase("ventila"))
sResRef = "nw_wdbqs001"; //:: Quarterstaff
else if(GetStringRight(sDeity, 9) == GetStringLowerCase("larethian") || GetStringRight(sDeity, 7) == GetStringLowerCase("ehlonna")
|| GetStringRight(sDeity, 10) == GetStringLowerCase("heironeous") || GetStringRight(sDeity, 5) == GetStringLowerCase("altua")
|| GetStringRight(sDeity, 9) == GetStringLowerCase("barachiel") || GetStringRight(sDeity, 10) == GetStringLowerCase("heironeous")
|| GetStringRight(sDeity, 5) == GetStringLowerCase("cyric") || GetStringRight(sDeity, 4) == GetStringLowerCase("dorn")
|| GetStringRight(sDeity, 7) == GetStringLowerCase("garagos") || GetStringRight(sDeity, 7) == GetStringLowerCase("glautru")
|| GetStringRight(sDeity, 7) == GetStringLowerCase("ilneval") || GetStringRight(sDeity, 6) == GetStringLowerCase("lendys")
|| GetStringRight(sDeity, 4) == GetStringLowerCase("mask") || GetStringRight(sDeity, 10) == GetStringLowerCase("merrshaulk")
|| GetStringRight(sDeity, 5) == GetStringLowerCase("oghma") || GetStringRight(sDeity, 8) == GetStringLowerCase("pyremius")
|| GetStringRight(sDeity, 10) == GetStringLowerCase("red knight") || GetStringRight(sDeity, 3) == GetStringLowerCase("tyr")
|| GetStringRight(sDeity, 9) == GetStringLowerCase("vergadain") || GetStringRight(sDeity, 7) == GetStringLowerCase("elishar"))
sResRef = "nw_wswls001"; //:: Longsword
else if(GetStringRight(sDeity, 8) == GetStringLowerCase("erythnul") || GetStringRight(sDeity, 6) == GetStringLowerCase("arawai")
|| GetStringRight(sDeity, 4) == GetStringLowerCase("bane") || GetStringRight(sDeity, 7) == GetStringLowerCase("hruggek")
|| GetStringRight(sDeity, 6) == GetStringLowerCase("ngatha") || GetStringRight(sDeity, 6) == GetStringLowerCase("memnor")
|| GetStringRight(sDeity, 7) == GetStringLowerCase("wathaku"))
sResRef = "nw_wblms001"; //:: Morningstar
else if(GetStringRight(sDeity, 8) == GetStringLowerCase("gruumsh") || GetStringRight(sDeity, 10) == GetStringLowerCase("angharradh")
|| GetStringRight(sDeity, 5) == GetStringLowerCase("annam") || GetStringRight(sDeity, 10) == GetStringLowerCase("aventernus")
|| GetStringRight(sDeity, 13) == GetStringLowerCase("wildwanderer") || GetStringRight(sDeity, 7) == GetStringLowerCase("boldrei")
|| GetStringRight(sDeity, 9) == GetStringLowerCase("celestian") || GetStringRight(sDeity, 5) == GetStringLowerCase("eadro")
|| GetStringRight(sDeity, 7) == GetStringLowerCase("geshtai") || GetStringRight(sDeity, 6) == GetStringLowerCase("hiatea")
|| GetStringRight(sDeity, 10) == GetStringLowerCase("kaelthiere") || GetStringRight(sDeity, 6) == GetStringLowerCase("kithin")
|| GetStringRight(sDeity, 9) == GetStringLowerCase("kurtulmak") || GetStringRight(sDeity, 5) == GetStringLowerCase("lurue")
|| GetStringRight(sDeity, 6) == GetStringLowerCase("procan") || GetStringRight(sDeity, 5) == GetStringLowerCase("sebek")
|| GetStringRight(sDeity, 3) == GetStringLowerCase("set") || GetStringRight(sDeity, 7) == GetStringLowerCase("skerrit")
|| GetStringRight(sDeity, 5) == GetStringLowerCase("talos") || GetStringRight(sDeity, 7) == GetStringLowerCase("telchur")
|| GetStringRight(sDeity, 10) == GetStringLowerCase("trithereon") || GetStringRight(sDeity, 6) == GetStringLowerCase("ulutiu"))
sResRef = "nw_wplss001"; //:: Spear
else if(GetStringRight(sDeity, 6) == GetStringLowerCase("hextor") || GetStringRight(sDeity, 11) == GetStringLowerCase("patient one"))
sResRef = "nw_wblfl001"; //:: Light Flail
else if(GetStringRight(sDeity, 5) == GetStringLowerCase("akadi") || GetStringRight(sDeity, 8) == GetStringLowerCase("lliendil")
|| GetStringRight(sDeity, 6) == GetStringLowerCase("osiris") || GetStringRight(sDeity, 8) == GetStringLowerCase("urogalan"))
sResRef = "nw_wblfh001"; //:: Heavy Flail
else if(GetStringRight(sDeity, 6) == GetStringLowerCase("domiel") || GetStringRight(sDeity, 9) == GetStringLowerCase("windstrom")
|| GetStringRight(sDeity, 9) == GetStringLowerCase("brightaxe") || GetStringRight(sDeity, 3) == GetStringLowerCase("iuz")
|| GetStringRight(sDeity, 4) == GetStringLowerCase("kord") || GetStringRight(sDeity, 10) == GetStringLowerCase("shaundakul")
|| GetStringRight(sDeity, 5) == GetStringLowerCase("surtr") || GetStringRight(sDeity, 14) == GetStringLowerCase("lord of blades")
|| GetStringRight(sDeity, 4) == GetStringLowerCase("torm") || GetStringRight(sDeity, 6) == GetStringLowerCase("typhos")
|| GetStringRight(sDeity, 5) == GetStringLowerCase("zarus"))
sResRef = "nw_wswgs001"; //:: Greatsword
else if(GetStringRight(sDeity, 7) == GetStringLowerCase("aulasha") || GetStringRight(sDeity, 9) == GetStringLowerCase("steelskin")
|| GetStringRight(sDeity, 8) == GetStringLowerCase("ironhand") || GetStringRight(sDeity, 7) == GetStringLowerCase("grumbar")
|| GetStringRight(sDeity, 4) == GetStringLowerCase("gond") || GetStringRight(sDeity, 8) == GetStringLowerCase("istishia")
|| GetStringRight(sDeity, 8) == GetStringLowerCase("laduguer") || GetStringRight(sDeity, 5) == GetStringLowerCase("lyris")
|| GetStringRight(sDeity, 7) == GetStringLowerCase("moradin") || GetStringRight(sDeity, 6) == GetStringLowerCase("onatar")
|| GetStringRight(sDeity, 10) == GetStringLowerCase("stonebones") || GetStringRight(sDeity, 9) == GetStringLowerCase("stronmaus"))
sResRef = "nw_wblhw001"; //:: Warhammer
else if(GetStringRight(sDeity, 8) == GetStringLowerCase("chauntea") || GetStringRight(sDeity, 11) == GetStringLowerCase("chronepsis")
|| GetStringRight(sDeity, 7) == GetStringLowerCase("duthila") || GetStringRight(sDeity, 8) == GetStringLowerCase("iborighu")
|| GetStringRight(sDeity, 6) == GetStringLowerCase("jergal") || GetStringRight(sDeity, 6) == GetStringLowerCase("nerull")
|| GetStringRight(sDeity, 6) == GetStringLowerCase("keeper") || GetStringRight(sDeity, 5) == GetStringLowerCase("zuggtmoy"))
sResRef = "nw_wplsc001"; //:: Scythe
else if(GetStringRight(sDeity, 6) == GetStringLowerCase("halmyr") || GetStringRight(sDeity, 6) == GetStringLowerCase("halmyr")
|| GetStringRight(sDeity, 8) == GetStringLowerCase("levistus") || GetStringRight(sDeity, 4) == GetStringLowerCase("lirr")
|| GetStringRight(sDeity, 5) == GetStringLowerCase("milil") || GetStringRight(sDeity, 10) == GetStringLowerCase("olidammara")
|| GetStringRight(sDeity, 8) == GetStringLowerCase("the fury"))
sResRef = "nw_wswrp001"; //:: Rapier
else if(GetStringRight(sDeity, 8) == GetStringLowerCase("cuthbert") || GetStringRight(sDeity, 5) == GetStringLowerCase("pelor")
|| GetStringRight(sDeity, 10) == GetStringLowerCase("truesilver") || GetStringRight(sDeity, 8) == GetStringLowerCase("kikanuti")
|| GetStringRight(sDeity, 6) == GetStringLowerCase("korran") || GetStringRight(sDeity, 9) == GetStringLowerCase("lathander")
|| GetStringRight(sDeity, 4) == GetStringLowerCase("duin") || GetStringRight(sDeity, 5) == GetStringLowerCase("orcus")
|| GetStringRight(sDeity, 11) == GetStringLowerCase("earthcaller") || GetStringRight(sDeity, 6) == GetStringLowerCase("selune")
|| GetStringRight(sDeity, 9) == GetStringLowerCase("selvetarm") || GetStringRight(sDeity, 6) == GetStringLowerCase("syeret")
|| GetStringRight(sDeity, 6) == GetStringLowerCase("syreth") || GetStringRight(sDeity, 7) == GetStringLowerCase("urbanus"))
sResRef = "prc_wxblmh001"; //:: Heavy Mace
else if(GetStringRight(sDeity, 3) == GetStringLowerCase("rao") || GetStringRight(sDeity, 9) == GetStringLowerCase("siamorphe"))
sResRef = "nw_wblml001"; //:: Light Mace
else if(GetStringRight(sDeity, 3) == GetStringLowerCase("jas") || GetStringRight(sDeity, 5) == GetStringLowerCase("vecna")
|| GetStringRight(sDeity, 8) == GetStringLowerCase("lorfiril") || GetStringRight(sDeity, 11) == GetStringLowerCase("cloakshadow")
|| GetStringRight(sDeity, 8) == GetStringLowerCase("abbathor") || GetStringRight(sDeity, 11) == GetStringLowerCase("brandobaris")
|| GetStringRight(sDeity, 5) == GetStringLowerCase("thaun") || GetStringRight(sDeity, 6) == GetStringLowerCase("deneir")
|| GetStringRight(sDeity, 8) == GetStringLowerCase("diirinka") || GetStringRight(sDeity, 5) == GetStringLowerCase("glory")
|| GetStringRight(sDeity, 9) == GetStringLowerCase("mestarine") || GetStringRight(sDeity, 8) == GetStringLowerCase("gargauth")
|| GetStringRight(sDeity, 7) == GetStringLowerCase("celanil") || GetStringRight(sDeity, 5) == GetStringLowerCase("istus")
|| GetStringRight(sDeity, 11) == GetStringLowerCase("kiaransalee") || GetStringRight(sDeity, 6) == GetStringLowerCase("savras")
|| GetStringRight(sDeity, 11) == GetStringLowerCase("shekinester") || GetStringRight(sDeity, 9) == GetStringLowerCase("tharizdun")
|| GetStringRight(sDeity, 6) == GetStringLowerCase("of vol") || GetStringRight(sDeity, 5) == GetStringLowerCase("zagyg"))
sResRef = "nw_wswdg001"; //:: Dagger
else if(GetStringRight(sDeity, 6) == GetStringLowerCase("afflux") || GetStringRight(sDeity, 8) == GetStringLowerCase("arvoreen")
|| GetStringRight(sDeity, 12) == GetStringLowerCase("brightmantle") || GetStringRight(sDeity, 7) == GetStringLowerCase("ilesere")
|| GetStringRight(sDeity, 6) == GetStringLowerCase("hathor") || GetStringRight(sDeity, 4) == GetStringLowerCase("hlal")
|| GetStringRight(sDeity, 8) == GetStringLowerCase("nadirech") || GetStringRight(sDeity, 8) == GetStringLowerCase("shargaas")
|| GetStringRight(sDeity, 5) == GetStringLowerCase("sixin") || GetStringRight(sDeity, 8) == GetStringLowerCase("vhaeraun")
|| GetStringRight(sDeity, 8) == GetStringLowerCase("yondalla"))
sResRef = "nw_wswss001"; //:: Shortsword
else if(GetStringRight(sDeity, 8) == GetStringLowerCase("kelemvor") || GetStringRight(sDeity, 4) == GetStringLowerCase("helm")
|| GetStringRight(sDeity, 10) == GetStringLowerCase("wyvernspur") || GetStringRight(sDeity, 10) == GetStringLowerCase("eilistraee")
|| GetStringRight(sDeity, 8) == GetStringLowerCase("aengrist"))
sResRef = "nw_wswbs001"; //:: Bastard Sword
else if(GetStringRight(sDeity, 11) == GetStringLowerCase("aasterinian") || GetStringRight(sDeity, 9) == GetStringLowerCase("astilabor")
|| GetStringRight(sDeity, 8) == GetStringLowerCase("doresain") || GetStringRight(sDeity, 8) == GetStringLowerCase("falazure")
|| GetStringRight(sDeity, 4) == GetStringLowerCase("haku") || GetStringRight(sDeity, 8) == GetStringLowerCase("mielikki")
|| GetStringRight(sDeity, 8) == GetStringLowerCase("nilthina") || GetStringRight(sDeity, 8) == GetStringLowerCase("soorinek")
|| GetStringRight(sDeity, 6) == GetStringLowerCase("tamara") || GetStringRight(sDeity, 8) == GetStringLowerCase("traveler")
|| GetStringRight(sDeity, 13) == GetStringLowerCase("undying court"))
sResRef = "nw_wswsc001"; //:: Scimitar
else if(GetStringRight(sDeity, 19) == GetStringLowerCase("spirits of the past"))
sResRef = "prc_wxdbsc001"; //:: Double Scimitar
else if(GetStringRight(sDeity, 6) == GetStringLowerCase("mouqol"))
sResRef = "nw_wbwxl001"; //:: Light Crossbow
else if(GetStringRight(sDeity, 6) == GetStringLowerCase("cyndor"))
sResRef = "nw_wbwsl001"; //:: Sling
else if(GetStringRight(sDeity, 4) == GetStringLowerCase("isis"))
sResRef = "prc_wswdp001"; //:: Katar (punching dagger)
else if(GetStringRight(sDeity, 5) == GetStringLowerCase("arrah"))
sResRef = "nw_wplhb001"; //:: Halberd
else if(GetStringRight(sDeity, 5) == GetStringLowerCase("delleb"))
sResRef = "nw_wthdt001"; //:: Dart
else if(GetStringRight(sDeity, 12) == GetStringLowerCase("great mother") || GetStringRight(sDeity, 8) == GetStringLowerCase("sulerian")
|| GetStringRight(sDeity, 5) == GetStringLowerCase("thrym"))
sResRef = "nw_waxgr001"; //:: Greataxe
else if(GetStringRight(sDeity, 9) == GetStringLowerCase("tem-et-nu") || GetStringRight(sDeity, 7) == GetStringLowerCase("mockery"))
sResRef = "nw_wspka001"; //:: Kama
else if(GetStringRight(sDeity, 9) == GetStringLowerCase("dumathoin") || GetStringRight(sDeity, 8) == GetStringLowerCase("silvanus"))
sResRef = "prc_wxblma001"; //:: Maul
else if(GetStringRight(sDeity, 9) == GetStringLowerCase("shevarash") || GetStringRight(sDeity, 10) == GetStringLowerCase("thelandira")
|| GetStringRight(sDeity, 12) == GetStringLowerCase("silver flame") || GetStringRight(sDeity, 10) == GetStringLowerCase("gilmadrith"))
sResRef = "nw_wbwln001"; //:: Long Bow
else if(GetStringRight(sDeity, 11) == GetStringLowerCase("cyrrollalee") || GetStringRight(sDeity, 9) == GetStringLowerCase("grolantor")
|| GetStringRight(sDeity, 8) == GetStringLowerCase("konkresh") || GetStringRight(sDeity, 5) == GetStringLowerCase("kyuss")
|| GetStringRight(sDeity, 8) == GetStringLowerCase("semuanya") || GetStringRight(sDeity, 6) == GetStringLowerCase("vaprak")
|| GetStringRight(sDeity, 12) == GetStringLowerCase("whale mother"))
sResRef = "nw_wblcl001"; //:: Club
else if(GetStringRight(sDeity, 6) == GetStringLowerCase("ishtus") || GetStringRight(sDeity, 4) == GetStringLowerCase("azul")
|| GetStringRight(sDeity, 5) == GetStringLowerCase("lolth") || GetStringRight(sDeity, 8) == GetStringLowerCase("nephthys")
|| GetStringRight(sDeity, 10) == GetStringLowerCase("sharindlar") || GetStringRight(sDeity, 6) == GetStringLowerCase("sune"))
sResRef = "x2_it_wpwhip"; //:: Whip
else if(GetStringRight(sDeity, 7) == GetStringLowerCase("bahamut") || GetStringRight(sDeity, 8) == GetStringLowerCase("nobanion")
|| GetStringRight(sDeity, 12) == GetStringLowerCase("dragon below") || GetStringRight(sDeity, 6) == GetStringLowerCase("tiamat")
|| GetStringRight(sDeity, 5) == GetStringLowerCase("ubtao"))
sResRef = "prc_wblph001"; //:: Heavy Pick
else if(GetStringRight(sDeity, 9) == GetStringLowerCase("waukeen") || GetStringRight(sDeity, 6) == GetStringLowerCase("zouken"))
sResRef = "prc_wblnn001"; //:: Nunchaku
else if(GetStringRight(sDeity, 5) == GetStringLowerCase("garyx") || GetStringRight(sDeity, 7) == GetStringLowerCase("olladra")
|| GetStringRight(sDeity, 8) == GetStringLowerCase("peryroyl"))
sResRef = "nw_wspsc001"; //:: Sickle
else if(GetStringRight(sDeity, 6) == GetStringLowerCase("lliira") || GetStringRight(sDeity, 6) == GetStringLowerCase("mystra")
|| GetStringRight(sDeity, 6) == GetStringLowerCase("tymora"))
sResRef = "nw_wthsh001"; //:: Throwing Stars
else if(GetStringRight(sDeity, 8) == GetStringLowerCase("sashelas") || GetStringRight(sDeity, 5) == GetStringLowerCase("hleid")
|| GetStringRight(sDeity, 6) == GetStringLowerCase("osprem") || GetStringRight(sDeity, 8) == GetStringLowerCase("sekolah")
|| GetStringRight(sDeity, 8) == GetStringLowerCase("devourer") || GetStringRight(sDeity, 8) == GetStringLowerCase("umberlee")
|| GetStringRight(sDeity, 7) == GetStringLowerCase("yeathan"))
sResRef = "nw_wpltr001"; //:: Trident
else if(GetStringRight(sDeity, 7) == GetStringLowerCase("ilmater") || GetStringRight(sDeity, 9) == GetStringLowerCase("ilsensine")
|| GetStringRight(sDeity, 6) == GetStringLowerCase("sophia") || GetStringRight(sDeity, 6) == GetStringLowerCase("talona")
|| GetStringRight(sDeity, 13) == GetStringLowerCase("path of light") || GetStringRight(sDeity, 7) == GetStringLowerCase("yurtrus")
|| GetStringRight(sDeity, 7) == GetStringLowerCase("sharess") || GetStringRight(sDeity, 7) == GetStringLowerCase("malar"))
{ //sResRef = "nw_wpltr001";
sResRef = "prc_sprtwpn_slam"; //:: Unarmed Strike
}
else if(sDeity == "" && nDomAlignment == ALIGNMENT_EVIL)
sResRef = "nw_wblfl001"; //:: Light Flail
else if(sDeity == "" && nDomAlignment == ALIGNMENT_CHAOTIC)
sResRef = "nw_waxbt001"; //:: Battleaxe
else if(sDeity == "" && nDomAlignment == ALIGNMENT_GOOD)
sResRef = "nw_wblhw001"; //:: Warhammer
else if(sDeity == "" && nDomAlignment == ALIGNMENT_LAWFUL)
sResRef = "nw_wswgs001"; //:: Greatsword
else if(sDeity == "" && nDomAlignment == ALIGNMENT_NEUTRAL)
sResRef = "nw_wswsc001"; //:: Scimitar
return sResRef;
}
object CreateDeityWeapon(object oCreature)
{
string sWeapon = GetSpiritualWeaponTypeByDeity(oCreature);
if(sWeapon == "")
return OBJECT_INVALID;
object oWeapon = CreateItemOnObject(sWeapon, oCreature);
EquipDebugString(GetName(oCreature) + " has Deity weapon "+GetName(oWeapon));
return oWeapon;
}
//:: Creates the weapon that the creature will be using.
void CreateSpiritualWeapon(object oCaster, float fDuration, int nClass)
{
//:: Declare major variables
int iCasterLvL = PRCGetCasterLevel(oCaster);
int nBAB = GetBaseAttackBonus(oCaster);
int nAttNumber = 1+(nBAB / 4);
int nDamBonus = min(5, iCasterLvL / 3);
int nPenetr = iCasterLvL + SPGetPenetr();
int nStat = nClass == CLASS_TYPE_INVALID ?
GetAbilityModifier(ABILITY_CHARISMA, oCaster) ://:: if cast from items use charisma by default
GetDCAbilityModForClass(nClass, oCaster);
object oWeapon;
object oArmor;
object oAmmo1;
object oAmmo2;
string sWeapon = GetSpiritualWeaponTypeByDeity(oCaster);
object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oCaster);
SendMessageToPC(oCaster, "inc_spirit_weapn: Hooking Event.");
RegisterSummonEvents(oSummon);
int i = 1;
while(GetIsObjectValid(oSummon) && !GetIsPC(oSummon) && ! GetIsDM(oSummon))
{
NullifyAppearance(oSummon);
if(GetResRef(oSummon) == "prc_spirit_weapn") //:: Unarmed / "Claw Bracer"
{
SetBaseAttackBonus(nAttNumber, oSummon);
SendMessageToPC(oCaster, "inc_spirit_weapn:" +GetName(oCaster)+"'s BAB is: "+IntToString(nBAB));
//EffectModifyAttacks(nAttNumber);
SendMessageToPC(oCaster, "inc_spirit_weapn: Adding "+IntToString(nAttNumber)+" attacks / round.");
SetLocalInt(oSummon, "X2_L_NUMBER_OF_ATTACKS", nAttNumber);
SendMessageToPC(oCaster, "inc_spirit_weapn: Storing caster as: " + GetName(oCaster));
DelayCommand(0.0f, SetLocalObject(oSummon, "MY_CASTER", oCaster));
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_DUR_GHOST_SMOKE_2), oSummon);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_DUR_GHOST_TRANSPARENT), oSummon);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectAttackIncrease(nBAB+nStat), oSummon);
if(!GetIsObjectValid(GetItemPossessedBy(oSummon, sWeapon)))
{
//Create item on the creature, equip it and add properties.
oWeapon = CreateItemOnObject(sWeapon, oSummon);
//Add event scripts
AddEventScript(oWeapon, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE);
SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on weapon");
AddEventScript(oWeapon, EVENT_ONHIT, "prc_evnt_spirwep", TRUE, FALSE);
SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on weapon");
AddEventScript(oWeapon, EVENT_ITEM_ONUNAQUIREITEM, "prc_evnt_spirwep", TRUE, FALSE);
SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onUnacquire event script on weapon");
AddEventScript(oWeapon, EVENT_ITEM_ONPLAYERUNEQUIPITEM, "prc_evnt_spirwep", TRUE, FALSE);
SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onUnequip event script on weapon");
// GZ: Fix for weapon being dropped when killed
SetDroppableFlag(oWeapon, FALSE);
SetItemCursedFlag(oWeapon, TRUE);
if(sWeapon == "prc_sprtwpn_slam")
{
NullifyAppearance(oSummon, TRUE);
oArmor = CreateItemOnObject("prc_sprtwp_armor", oSummon);
ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_CWEAPON_R);
ForceEquip(oSummon, oArmor, INVENTORY_SLOT_CHEST);
SetItemCursedFlag(oArmor, TRUE);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_DUR_GLOW_WHITE), oSummon);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon);
itemproperty ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
}
else if(sWeapon == "nw_wbwln001") //:: Longbow
{
NullifyAppearance(oSummon);
oAmmo1 = CreateItemOnObject("nw_wambo001", oSummon);
SetItemStackSize(oAmmo1, 99);
SetDroppableFlag(oAmmo1, FALSE);
SetItemCursedFlag(oAmmo1, TRUE);
AddEventScript(oAmmo1, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE);
SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on ammo");
oAmmo2 = CreateItemOnObject("nw_wambo001", oSummon);
SetItemStackSize(oAmmo2, 99);
SetDroppableFlag(oAmmo2, FALSE);
SetItemCursedFlag(oAmmo2, TRUE);
AddEventScript(oAmmo2, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE);
SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on ammo");
ForceEquip(oSummon, oAmmo1, INVENTORY_SLOT_ARROWS);
ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_RIGHTHAND);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon);
itemproperty ipDamage1 = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oAmmo1, ipDamage1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipViz1 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipViz1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipHit1 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipHit1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipNoDam1 = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipNoDam1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipDamage2 = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oAmmo2, ipDamage2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipHit2 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipHit2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipViz2 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipViz2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipNoDam2 = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipNoDam2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipHit3 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipViz3 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipViz3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipNoDam3 = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipNoDam3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
}
else if(sWeapon == "nw_wbwxl001") //:: Light crossbow
{
NullifyAppearance(oSummon);
oAmmo1 = CreateItemOnObject("nw_wambo001", oSummon);
SetItemStackSize(oAmmo1, 99);
SetDroppableFlag(oAmmo1, FALSE);
SetItemCursedFlag(oAmmo1, TRUE);
AddEventScript(oAmmo1, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE);
SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on ammo");
oAmmo2 = CreateItemOnObject("nw_wambo001", oSummon);
SetItemStackSize(oAmmo2, 99);
SetDroppableFlag(oAmmo2, FALSE);
SetItemCursedFlag(oAmmo2, TRUE);
AddEventScript(oAmmo2, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE);
SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on ammo");
ForceEquip(oSummon, oAmmo1, INVENTORY_SLOT_BOLTS);
ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_RIGHTHAND);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon);
itemproperty ipDamage1 = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oAmmo1, ipDamage1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipViz1 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipViz1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipHit1 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipHit1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipNoDam1 = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipNoDam1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipDamage2 = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oAmmo2, ipDamage2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipHit2 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipHit2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipViz2 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipViz2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipNoDam2 = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipNoDam2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipHit3 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipViz3 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipViz3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipNoDam3 = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipNoDam3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
}
else if(sWeapon == "nw_wthsh001") //:: Throwing Stars
{
NullifyAppearance(oSummon);
SetItemStackSize(oWeapon, 50);
SetDroppableFlag(oWeapon, FALSE);
SetItemCursedFlag(oWeapon, TRUE);
AddEventScript(oWeapon, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE);
SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on weapon");
object oWeapon2 = CreateItemOnObject("nw_wthsh001", oSummon);
SetItemStackSize(oWeapon2, 50);
SetDroppableFlag(oWeapon2, FALSE);
SetItemCursedFlag(oWeapon2, TRUE);
AddEventScript(oWeapon2, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE);
SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on weapon");
object oWeapon3 = CreateItemOnObject("nw_wthsh001", oSummon);
SetItemStackSize(oWeapon3, 50);
SetDroppableFlag(oWeapon3, FALSE);
SetItemCursedFlag(oWeapon3, TRUE);
AddEventScript(oWeapon3, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE);
SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on weapon");
ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_RIGHTHAND);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon);
itemproperty ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipNoDam = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon2, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipNoDam = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
}
else if(sWeapon == "nw_wthdt001") //:: Darts
{
NullifyAppearance(oSummon);
SetItemStackSize(oWeapon, 50);
SetDroppableFlag(oWeapon, FALSE);
SetItemCursedFlag(oWeapon, TRUE);
AddEventScript(oWeapon, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE);
SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on weapon");
object oWeapon2 = CreateItemOnObject("nw_wthdt001", oSummon);
SetItemStackSize(oWeapon2, 50);
SetDroppableFlag(oWeapon2, FALSE);
SetItemCursedFlag(oWeapon2, TRUE);
AddEventScript(oWeapon2, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE);
SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on weapon");
object oWeapon3 = CreateItemOnObject("nw_wthdt001", oSummon);
SetItemStackSize(oWeapon3, 50);
SetDroppableFlag(oWeapon3, FALSE);
SetItemCursedFlag(oWeapon3, TRUE);
AddEventScript(oWeapon3, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE);
SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on weapon");
ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_RIGHTHAND);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon);
itemproperty ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipNoDam = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon2, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipNoDam = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon3, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon3, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon3, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipNoDam = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon3, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
}
else //:: Covers all other weapons
{
NullifyAppearance(oSummon);
ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_RIGHTHAND);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon);
itemproperty ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipNoDam = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
}
}
}
i++;
oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oCaster, i);
}
}
void HandleSpiritualWeaponUnequipEvent()
{
// Get the creature who unequipped the item
object oSummon = GetPCItemLastUnequippedBy();
object oCaster = GetLocalObject(oSummon, "MY_CASTER");
// Get the item that was unequipped
object oWeapon = GetPCItemLastUnequipped();
if(GetIsPC(oSummon) == TRUE)
{
return;
}
int nCasterLevel = PRCGetCasterLevel(oCaster);
int nDuration = nCasterLevel;
int nPenetr = nCasterLevel + SPGetPenetr();
int nDamBonus = min(5, nCasterLevel / 3);
float fDuration = IntToFloat(nDuration);
// Log the event for debugging
SendMessageToPC(oCaster, "prc_spirweap_tbs: Item OnUnEquip Event running.");
// Check if the item is valid
if (GetIsObjectValid(oWeapon))
{
// Log the item destruction for debugging
SendMessageToPC(oCaster, "prc_spirweap_tbs: Unequipped item detected. Destroying item.");
// Destroy the unequipped item
DestroyObject(oWeapon);
string sWeapon = GetSpiritualWeaponTypeByDeity(oCaster);
object oArmor;
if(!GetIsObjectValid(GetItemPossessedBy(oSummon, sWeapon)))
{
//Create item on the creature, equip it and add properties.
oWeapon = CreateItemOnObject(sWeapon, oSummon);
//Add event scripts
AddEventScript(oWeapon, EVENT_ITEM_ONHIT, "prc_evnt_spirwep", TRUE, FALSE);
SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on weapon");
AddEventScript(oWeapon, EVENT_ONHIT, "prc_evnt_spirwep", TRUE, FALSE);
SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onHit event script on weapon");
AddEventScript(oWeapon, EVENT_ITEM_ONUNAQUIREITEM, "prc_evnt_spirwep", TRUE, FALSE);
SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onUnacquire event script on weapon");
AddEventScript(oWeapon, EVENT_ITEM_ONPLAYERUNEQUIPITEM, "prc_evnt_spirwep", TRUE, FALSE);
SendMessageToPC(oCaster, "inc_spirit_weapn: Setting onUnequip event script on weapon");
// GZ: Fix for weapon being dropped when killed
SetDroppableFlag(oWeapon, FALSE);
SetItemCursedFlag(oWeapon, TRUE);
if(sWeapon == "prc_sprtwpn_slam")
{
NullifyAppearance(oSummon, TRUE);
oArmor = CreateItemOnObject("prc_sprtwp_armor", oSummon);
ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_CWEAPON_R);
ForceEquip(oSummon, oArmor, INVENTORY_SLOT_CHEST);
SetItemCursedFlag(oArmor, TRUE);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_DUR_GLOW_WHITE), oSummon);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon);
itemproperty ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
}
else if(sWeapon == "nw_wbwln001") //:: Longbow
{
NullifyAppearance(oSummon);
object oAmmo1 = CreateItemOnObject("nw_wamar001", oSummon);
SetItemStackSize(oAmmo1, 99);
SetDroppableFlag(oAmmo1, FALSE);
SetItemCursedFlag(oAmmo1, TRUE);
object oAmmo2 = CreateItemOnObject("nw_wamar001", oSummon);
SetItemStackSize(oAmmo2, 99);
SetDroppableFlag(oAmmo2, FALSE);
SetItemCursedFlag(oAmmo2, TRUE);
ForceEquip(oSummon, oAmmo1, INVENTORY_SLOT_ARROWS);
ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_RIGHTHAND);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon);
itemproperty ipDamage1 = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oAmmo1, ipDamage1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipViz1 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipViz1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipHit1 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipHit1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipNoDam1 = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipNoDam1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipDamage2 = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oAmmo2, ipDamage2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipHit2 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipHit2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipViz2 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipViz2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipNoDam2 = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipNoDam2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipHit3 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipViz3 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipViz3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipNoDam3 = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipNoDam3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
}
else if(sWeapon == "nw_wbwxl001") //:: Light crossbow
{
NullifyAppearance(oSummon);
object oAmmo1 = CreateItemOnObject("nw_wambo001", oSummon);
SetItemStackSize(oAmmo1, 99);
SetDroppableFlag(oAmmo1, FALSE);
SetItemCursedFlag(oAmmo1, TRUE);
object oAmmo2 = CreateItemOnObject("nw_wambo001", oSummon);
SetItemStackSize(oAmmo2, 99);
SetDroppableFlag(oAmmo2, FALSE);
SetItemCursedFlag(oAmmo2, TRUE);
ForceEquip(oSummon, oAmmo1, INVENTORY_SLOT_BOLTS);
ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_RIGHTHAND);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon);
itemproperty ipDamage1 = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oAmmo1, ipDamage1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipViz1 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipViz1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipHit1 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipHit1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipNoDam1 = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo1, ipNoDam1, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipDamage2 = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oAmmo2, ipDamage2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipHit2 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipHit2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipViz2 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipViz2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipNoDam2 = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oAmmo2, ipNoDam2, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipHit3 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipViz3 = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipViz3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipNoDam3 = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipNoDam3, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
}
else if(sWeapon == "nw_wthsh001") //:: Throwing Stars
{
NullifyAppearance(oSummon);
SetItemStackSize(oWeapon, 50);
SetDroppableFlag(oWeapon, FALSE);
SetItemCursedFlag(oWeapon, TRUE);
object oWeapon2 = CreateItemOnObject("nw_wthsh001", oSummon);
SetItemStackSize(oWeapon2, 50);
SetDroppableFlag(oWeapon2, FALSE);
SetItemCursedFlag(oWeapon2, TRUE);
object oWeapon3 = CreateItemOnObject("nw_wthsh001", oSummon);
SetItemStackSize(oWeapon3, 50);
SetDroppableFlag(oWeapon3, FALSE);
SetItemCursedFlag(oWeapon3, TRUE);
ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_RIGHTHAND);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon);
itemproperty ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipNoDam = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon2, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipNoDam = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon3, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon3, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon3, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipNoDam = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon3, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
}
else if(sWeapon == "nw_wthdt001") //:: Darts
{
NullifyAppearance(oSummon);
SetItemStackSize(oWeapon, 50);
SetDroppableFlag(oWeapon, FALSE);
SetItemCursedFlag(oWeapon, TRUE);
object oWeapon2 = CreateItemOnObject("nw_wthdt001", oSummon);
SetItemStackSize(oWeapon2, 50);
SetDroppableFlag(oWeapon2, FALSE);
SetItemCursedFlag(oWeapon2, TRUE);
object oWeapon3 = CreateItemOnObject("nw_wthdt001", oSummon);
SetItemStackSize(oWeapon3, 50);
SetDroppableFlag(oWeapon3, FALSE);
SetItemCursedFlag(oWeapon3, TRUE);
ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_RIGHTHAND);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon);
itemproperty ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipNoDam = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon2, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipNoDam = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon2, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon3, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon3, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon3, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
ipNoDam = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon3, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
}
else //:: Covers all other weapons
{
NullifyAppearance(oSummon);
ForceEquip(oSummon, oWeapon, INVENTORY_SLOT_RIGHTHAND);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageIncrease(nDamBonus, DAMAGE_TYPE_MAGICAL), oSummon);
itemproperty ipDamage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_1d8);
DelayCommand(0.0f, IPSafeAddItemProperty(oWeapon, ipDamage, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipViz = ItemPropertyVisualEffect(ITEM_VISUAL_SONIC);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipViz, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipHit = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, nPenetr);
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipHit, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
itemproperty ipNoDam = ItemPropertyNoDamage();
DelayCommand(0.0f,IPSafeAddItemProperty(oWeapon, ipNoDam, fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING));
}
}
else
{
SendMessageToPC(oCaster, "prc_spirweap_tbs: No valid item to destroy.");
}
return;
}
}
//:: void main(){}