Added Elven blades to Weaponmaster prereqs Fixed Beckon the Frozen Fixed bug with Fire Brand Fixed duration bug with Improved Invisibility Added Soul Eater to Shifter prereqs Fixed ability based class prereqs in prc_prereq.nss Update Eye of Gruumsh for epic levels Update Ur-Priest for epic levels Update Forsaker for epic levels Update Anima Mage for epic levels Update Serene Guardian for epic levels Bladesinger abilities can use chain shirts Fixed Elemental Abjuration Fixed bug with prc cache creature. Forsakers can use non-magic items (heal kits, alchemy, etc) Updated ruleset.2da for NWNEE update Updated AotS bonus feats -Notes Added 3.5e Template index Added 3.5e update booklet Removed release archive
184 lines
7.0 KiB
Plaintext
184 lines
7.0 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: PRC OnItemUnequipped
|
|
//:: prc_unequip
|
|
//:: (c) 2003 Bioware Corp.
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
Put into: OnUnEquip Event
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Georg Zoeller
|
|
//:: Created On: 2003-07-16
|
|
//:://////////////////////////////////////////////
|
|
#include "prc_inc_function"
|
|
#include "inc_timestop"
|
|
#include "prc_inc_itmrstr"
|
|
#include "prc_inc_combat"
|
|
#include "prc_inc_template"
|
|
|
|
void PrcFeats(object oPC, object oItem)
|
|
{
|
|
SetLocalInt(oPC,"ONEQUIP",1);
|
|
EvalPRCFeats(oPC);
|
|
|
|
//this is to remove effect-related itemproperties
|
|
//in here to take advantage of the local
|
|
//I didnt put it in EvalPRCfeats cos I cant be bothered to wait for the compile
|
|
//Ill probably move it at some point, dont worry
|
|
//Primogenitor
|
|
CheckPRCLimitations(oItem, oPC);
|
|
|
|
DeleteLocalInt(oPC,"ONEQUIP");
|
|
}
|
|
|
|
void DoNaturalWeaponEffect(object oPC)
|
|
{
|
|
if (DEBUG) DoDebug("GetIsUsingPrimaryNaturalWeapons "+IntToString(GetIsUsingPrimaryNaturalWeapons(oPC))+" PrimaryNaturalWeapEffect "+IntToString(GetLocalInt(oPC, "PrimaryNaturalWeapEffect")));
|
|
if (GetIsUsingPrimaryNaturalWeapons(oPC) && GetLocalInt(oPC, "PrimaryNaturalWeapEffect"))
|
|
{
|
|
SetPrimaryNaturalWeaponAttacks(oPC, 0);
|
|
DeleteLocalInt(oPC, "PrimaryNaturalWeapEffect");
|
|
}
|
|
}
|
|
|
|
void DoWeaponUnequip(object oPC, object oItem);
|
|
|
|
//Added hook into EvalPRCFeats event
|
|
// Aaon Graywolf - 6 Jan 2004
|
|
//Added delay to EvalPRCFeats event to allow module setup to take priority
|
|
// Aaon Graywolf - Jan 6, 2004
|
|
void main()
|
|
{
|
|
object oItem = GetItemLastUnequipped();
|
|
object oPC = GetItemLastUnequippedBy();
|
|
|
|
//if(DEBUG) DoDebug("Running OnUnEquip, creature = '" + GetName(oPC) + "' is PC: " + DebugBool2String(GetIsPC(oPC)) + "; Item = '" + GetName(oItem) + "' - '" + GetTag(oItem) + "'");
|
|
|
|
DoTimestopUnEquip(oPC, oItem);
|
|
|
|
if (GetResRef(oItem) == "prc_crown_might") DestroyObject(oItem);
|
|
if (GetResRef(oItem) == "prc_crown_prot") DestroyObject(oItem);
|
|
|
|
// Delay a bit to prevent TMI due to polymorph effect being braindead and running the unequip script for each and
|
|
// bloody every item the character has equipped at the moment of effect application. Without detaching the script
|
|
// executions from the script that does the effect application. So no instruction counter resets.
|
|
// This will probably smash some scripts to pieces, at least when multiple unequips happen at once. Hatemail
|
|
// to nwbugs@bioware.com please.
|
|
|
|
DelayCommand(0.0f, PrcFeats(oPC, oItem));
|
|
|
|
/* Does not seem to work, the effect is not listed yet when the unequip scripts get run
|
|
if(PRCGetHasEffect(EFFECT_TYPE_POLYMORPH, oPC))
|
|
{
|
|
DoDebug("prc_unequip: delayed call");
|
|
DelayCommand(0.0f, PrcFeats(oPC));
|
|
}
|
|
else
|
|
{
|
|
DoDebug("prc_unequip: direct call");
|
|
PrcFeats(oPC);
|
|
}*/
|
|
|
|
DoWeaponUnequip(oPC, oItem);
|
|
// No weapons equipped, restore
|
|
|
|
DelayCommand(0.15, DoNaturalWeaponEffect(oPC));
|
|
|
|
//:: Saint / Holy Touch doesn't work w/ ranged weapons
|
|
if (GetHasTemplate(TEMPLATE_SAINT, oPC))
|
|
{
|
|
//:: Setup Holy Touch extra damage vs evil
|
|
effect eEffect1 = VersusAlignmentEffect(EffectDamageIncrease(7, DAMAGE_TYPE_DIVINE), 0, ALIGNMENT_EVIL);
|
|
effect eEffect2 = VersusAlignmentEffect(EffectDamageIncrease(DAMAGE_BONUS_2, DAMAGE_TYPE_DIVINE), 0, ALIGNMENT_EVIL);
|
|
eEffect2 = VersusRacialTypeEffect(eEffect2, RACIAL_TYPE_OUTSIDER);
|
|
effect eEffect3 = VersusAlignmentEffect(EffectDamageIncrease(DAMAGE_BONUS_2, DAMAGE_TYPE_DIVINE), 0, ALIGNMENT_EVIL);
|
|
eEffect3 = VersusRacialTypeEffect(eEffect3, RACIAL_TYPE_UNDEAD);
|
|
effect eLink = EffectLinkEffects(eEffect1, eEffect2);
|
|
eLink = EffectLinkEffects(eLink, eEffect3);
|
|
eLink = SupernaturalEffect(eLink);
|
|
eLink = TagEffect(eLink, "EffectHolyTouch");
|
|
|
|
//:: Clear the effect to be safe and prevent stacking
|
|
effect eCheckEffect = GetFirstEffect(oPC);
|
|
|
|
while (GetIsEffectValid(eCheckEffect))
|
|
{
|
|
if (GetEffectTag(eCheckEffect) == "EffectHolyTouch")
|
|
{
|
|
RemoveEffect(oPC, eCheckEffect);
|
|
|
|
}
|
|
|
|
eCheckEffect = GetNextEffect(oPC);
|
|
|
|
}
|
|
|
|
//:: check if equipped with a ranged weapon and apply effect again if not
|
|
if (!GetWeaponRanged(oItem))
|
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oPC);
|
|
}
|
|
|
|
// Execute scripts hooked to this event for the player triggering it
|
|
ExecuteAllScriptsHookedToEvent(oPC, EVENT_ONPLAYERUNEQUIPITEM);
|
|
ExecuteAllScriptsHookedToEvent(oItem, EVENT_ITEM_ONPLAYERUNEQUIPITEM);
|
|
|
|
// Tag-based scripting hook for PRC items
|
|
SetUserDefinedItemEventNumber(X2_ITEM_EVENT_UNEQUIP);
|
|
ExecuteScript("is_"+GetTag(oItem), OBJECT_SELF);
|
|
}
|
|
|
|
void DoWeaponUnequip(object oPC, object oItem)
|
|
{
|
|
//initialize variables
|
|
int nRealSize = PRCGetCreatureSize(oPC); //size for Finesse/TWF
|
|
int nSize = nRealSize; //size for equipment restrictions
|
|
int nWeaponSize = GetWeaponSize(oItem);
|
|
|
|
//Powerful Build bonus
|
|
if(GetHasFeat(FEAT_RACE_POWERFUL_BUILD, oPC))
|
|
nSize++;
|
|
//Monkey Grip
|
|
if(GetHasFeat(FEAT_MONKEY_GRIP, oPC))
|
|
{
|
|
nSize++;
|
|
// If you try and use the big weapons
|
|
if (nWeaponSize > nRealSize)
|
|
{
|
|
SetCompositeAttackBonus(oPC, "MonkeyGripL", 0, ATTACK_BONUS_OFFHAND);
|
|
SetCompositeAttackBonus(oPC, "MonkeyGripR", 0, ATTACK_BONUS_ONHAND);
|
|
}
|
|
}
|
|
|
|
// if(DEBUG) DoDebug("prc_restwpnsize - OnUnEquip"); // <-script no longer exists
|
|
|
|
// remove any TWF penalties
|
|
//if weapon was a not light, and there's still something equipped in the main hand(meaning that an offhand item was de-equipped)
|
|
if(nWeaponSize == nRealSize && GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC) != OBJECT_INVALID)
|
|
{
|
|
//remove any effects added
|
|
SetCompositeAttackBonus(oPC, "OTWFPenalty", 0);
|
|
}
|
|
//remove any simulated finesse
|
|
if(GetHasFeat(FEAT_WEAPON_FINESSE, oPC) && nWeaponSize != -1)
|
|
{
|
|
//if left hand unequipped, clear
|
|
//if right hand unequipped, left hand weapon goes to right hand, so should still be cleared
|
|
SetCompositeAttackBonus(oPC, "ElfFinesseLH", 0, ATTACK_BONUS_OFFHAND);
|
|
//if right hand weapon unequipped
|
|
if(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC) == oItem)
|
|
SetCompositeAttackBonus(oPC, "ElfFinesseRH", 0, ATTACK_BONUS_ONHAND);
|
|
}
|
|
|
|
//remove any two-handed weapon bonus
|
|
SetCompositeDamageBonusT(oItem, "THFBonus", 0);
|
|
|
|
//No longer needed due to new weapon feats via Beamdog
|
|
/*DoWeaponFeatUnequip(oPC, oItem, ATTACK_BONUS_OFFHAND);
|
|
if(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC) == oItem)
|
|
DoWeaponFeatUnequip(oPC, oItem, ATTACK_BONUS_ONHAND);*/
|
|
|
|
//clean any nonproficient penalties
|
|
SetCompositeAttackBonus(oPC, "Unproficient" + IntToString(ATTACK_BONUS_OFFHAND), 0, ATTACK_BONUS_OFFHAND);
|
|
if(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC) == oItem)
|
|
SetCompositeAttackBonus(oPC, "Unproficient" + IntToString(ATTACK_BONUS_ONHAND), 0, ATTACK_BONUS_ONHAND);
|
|
} |