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
172 lines
5.3 KiB
Plaintext
172 lines
5.3 KiB
Plaintext
#include "prc_class_const"
|
|
#include "prc_feat_const"
|
|
#include "prc_spell_const"
|
|
#include "inc_item_props"
|
|
//#include "prc_misc_const"
|
|
#include "inc_utility"
|
|
|
|
int GetIsBladesongWeapon(object oWeapon)
|
|
{
|
|
if(!GetIsObjectValid(oWeapon))
|
|
return FALSE;
|
|
|
|
int nType = GetBaseItemType(oWeapon);
|
|
|
|
return nType == BASE_ITEM_RAPIER
|
|
|| nType == BASE_ITEM_LONGSWORD
|
|
|| nType == BASE_ITEM_ELVEN_LIGHTBLADE
|
|
|| nType == BASE_ITEM_ELVEN_THINBLADE;
|
|
}
|
|
|
|
void RemoveSpellEffectSong(object oPC)
|
|
{
|
|
effect eff = GetFirstEffect(oPC);
|
|
|
|
while(GetIsEffectValid(eff))
|
|
{
|
|
if(GetEffectSpellId(eff) == SPELL_SONG_OF_FURY)
|
|
RemoveEffect(oPC, eff);
|
|
|
|
eff = GetNextEffect(oPC);
|
|
}
|
|
}
|
|
|
|
void OnEquip(object oPC,object oSkin)
|
|
{
|
|
object oChest = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
|
|
int nBaseAC = GetBaseAC(oChest);
|
|
int nWeight = GetWeight(oChest);
|
|
|
|
//:: 1 longsword/rapier & light armour
|
|
if (!GetIsBladesongWeapon(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC))
|
|
|| GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC))
|
|
|| (nBaseAC > 3 && !(nBaseAC == 4 && nWeight < 160)))
|
|
{
|
|
if (GetHasFeatEffect(FEAT_SONG_OF_FURY, oPC))
|
|
RemoveSpellEffectSong(oPC);
|
|
|
|
SetCompositeBonus(oSkin, "BladesAC", 0, ITEM_PROPERTY_AC_BONUS);
|
|
SetCompositeBonus(oSkin, "BladesCon", 0, ITEM_PROPERTY_SKILL_BONUS, SKILL_CONCENTRATION);
|
|
return;
|
|
}
|
|
//:: Bonus Lvl BladeSinger Max Bonus Int
|
|
int BladeLv = PRCMin(GetLevelByClass(CLASS_TYPE_BLADESINGER, oPC), GetAbilityModifier(ABILITY_INTELLIGENCE, oPC));
|
|
SetCompositeBonus(oSkin, "BladesAC", BladeLv, ITEM_PROPERTY_AC_BONUS);
|
|
|
|
if (GetHasFeat(FEAT_LESSER_SPELLSONG, oPC))
|
|
SetCompositeBonus(oSkin, "BladesCon", 5, ITEM_PROPERTY_SKILL_BONUS, SKILL_CONCENTRATION);
|
|
}
|
|
|
|
/* void OnEquip(object oPC,object oSkin)
|
|
{
|
|
// 1 longsword/rapier & light armour
|
|
if(!GetIsBladesongWeapon(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC))
|
|
|| GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC))
|
|
//:: Handles Mithral Chain Shirt
|
|
|| GetBaseAC(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC)) > 3 || GetBaseAC(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC)) == 4 && GetWeight(GetItemInSlot(INVENTORY_SLOT_CHEST)) < 160)
|
|
{
|
|
if(GetHasFeatEffect(FEAT_SONG_OF_FURY, oPC))
|
|
RemoveSpellEffectSong(oPC);
|
|
|
|
SetCompositeBonus(oSkin, "BladesAC", 0, ITEM_PROPERTY_AC_BONUS);
|
|
SetCompositeBonus(oSkin, "BladesCon", 0, ITEM_PROPERTY_SKILL_BONUS,SKILL_CONCENTRATION);
|
|
return;
|
|
}
|
|
|
|
|
|
// Bonus Lvl BladeSinger Max Bonus Int
|
|
int BladeLv = PRCMin(GetLevelByClass(CLASS_TYPE_BLADESINGER, oPC), GetAbilityModifier(ABILITY_INTELLIGENCE,oPC));
|
|
|
|
SetCompositeBonus(oSkin, "BladesAC", BladeLv, ITEM_PROPERTY_AC_BONUS);
|
|
|
|
if(GetHasFeat(FEAT_LESSER_SPELLSONG,oPC))
|
|
SetCompositeBonus(oSkin, "BladesCon", 5, ITEM_PROPERTY_SKILL_BONUS, SKILL_CONCENTRATION);
|
|
} */
|
|
|
|
void OnUnEquip(object oPC,object oSkin)
|
|
{
|
|
object oItem=GetItemLastUnequipped();
|
|
|
|
object oArmor=GetItemInSlot(INVENTORY_SLOT_CHEST,oPC);
|
|
object oWeapL=GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC);
|
|
object oWeapR=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
|
|
|
|
if (GetBaseAC(oArmor)>3)
|
|
{
|
|
if (GetHasFeatEffect(FEAT_SONG_OF_FURY,oPC))
|
|
{
|
|
RemoveSpellEffectSong(oPC);
|
|
}
|
|
|
|
SetCompositeBonus(oSkin, "BladesAC", 0, ITEM_PROPERTY_AC_BONUS);
|
|
SetCompositeBonus(oSkin, "BladesCon", 0, ITEM_PROPERTY_SKILL_BONUS,SKILL_CONCENTRATION);
|
|
return;
|
|
}
|
|
|
|
|
|
if (
|
|
(GetIsObjectValid(oWeapL) && GetIsObjectValid(oWeapR) ) ||
|
|
(!GetIsObjectValid(oWeapL) && !GetIsObjectValid(oWeapR) )
|
|
)
|
|
{
|
|
if (GetHasFeatEffect(FEAT_SONG_OF_FURY,oPC))
|
|
{
|
|
RemoveSpellEffectSong(oPC);
|
|
}
|
|
|
|
SetCompositeBonus(oSkin, "BladesAC", 0, ITEM_PROPERTY_AC_BONUS);
|
|
SetCompositeBonus(oSkin, "BladesCon", 0, ITEM_PROPERTY_SKILL_BONUS,SKILL_CONCENTRATION);
|
|
return;
|
|
}
|
|
|
|
|
|
if (!(GetBaseItemType(oWeapL)==BASE_ITEM_RAPIER ||
|
|
GetBaseItemType(oWeapR)==BASE_ITEM_RAPIER ||
|
|
GetBaseItemType(oWeapL)==BASE_ITEM_ELVEN_THINBLADE ||
|
|
GetBaseItemType(oWeapR)==BASE_ITEM_ELVEN_THINBLADE ||
|
|
GetBaseItemType(oWeapL)==BASE_ITEM_ELVEN_LIGHTBLADE ||
|
|
GetBaseItemType(oWeapR)==BASE_ITEM_ELVEN_LIGHTBLADE ||
|
|
GetBaseItemType(oWeapL)==BASE_ITEM_LONGSWORD ||
|
|
GetBaseItemType(oWeapR)==BASE_ITEM_LONGSWORD) )
|
|
{
|
|
if (GetHasFeatEffect(FEAT_SONG_OF_FURY,oPC))
|
|
{
|
|
RemoveSpellEffectSong(oPC);
|
|
}
|
|
|
|
SetCompositeBonus(oSkin, "BladesAC", 0, ITEM_PROPERTY_AC_BONUS);
|
|
SetCompositeBonus(oSkin, "BladesCon", 0, ITEM_PROPERTY_SKILL_BONUS,SKILL_CONCENTRATION);
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
int BladeLv=GetLevelByClass(CLASS_TYPE_BLADESINGER,oPC);
|
|
int Intb=GetAbilityModifier(ABILITY_INTELLIGENCE,oPC);
|
|
|
|
if ( BladeLv>Intb)
|
|
BladeLv=Intb;
|
|
|
|
SetCompositeBonus(oSkin, "BladesAC", BladeLv, ITEM_PROPERTY_AC_BONUS);
|
|
|
|
if ( GetHasFeat(FEAT_LESSER_SPELLSONG,oPC))
|
|
SetCompositeBonus(oSkin, "BladesCon", 5, ITEM_PROPERTY_SKILL_BONUS,SKILL_CONCENTRATION);
|
|
|
|
}
|
|
|
|
|
|
void main()
|
|
{
|
|
|
|
//Declare main variables.
|
|
object oPC = OBJECT_SELF;
|
|
object oSkin = GetPCSkin(oPC);
|
|
OnEquip(oPC,oSkin);
|
|
//int iEquip = GetLocalInt(oPC,"ONEQUIP");
|
|
|
|
// if (iEquip !=1) OnEquip(oPC,oSkin);
|
|
// if (iEquip ==1) OnUnEquip(oPC,oSkin);
|
|
|
|
}
|