forked from Jaysyn/PRC8
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.
141 lines
3.8 KiB
Plaintext
141 lines
3.8 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)
|
|
{
|
|
// 1 longsword/rapier & light armour
|
|
if(!GetIsBladesongWeapon(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC))
|
|
|| GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC))
|
|
|| GetBaseAC(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC)) > 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;
|
|
}
|
|
|
|
|
|
// Bonus Lvl BladeSinger Max Bonus Int
|
|
int BladeLv = min(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_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);
|
|
|
|
}
|