#include "prc_inc_spells" //DAMAGE_TYPE_BASE_WEAPON //GetAbilityModifier(ABILITY_INTELLIGENCE, oPC) //Add INT bonus to damage inflicted, when they are in light armor or less. //Still need to remove bonus when they are encumbered. //Need to add an onhit to see if the target is Crit or Sneak immune, and heal the INT bonus back. //Need to add in Weakening and Wounding criticals (on crit, deal 2 STR and 2 Con, respectively). //Applies Reflex Save bonus is the character is in light armor or less. //Still need to remove bonus when they are encumbered. void Grace(object oPC, object oSkin) { object oArmor=GetItemInSlot(INVENTORY_SLOT_CHEST,oPC); int iBase = GetBaseAC(oArmor); int iMax = 3; int nGrace; int nClass = GetLevelByClass(CLASS_TYPE_SWASHBUCKLER, oPC); if (GetHasFeat(FEAT_DARING_OUTLAW, oPC)) nClass += GetLevelByClass(CLASS_TYPE_ROGUE, oPC); if (nClass > 37) nGrace = 5; else if (nClass > 28) nGrace = 4; else if (nClass > 19) nGrace = 3; else if (nClass > 10) nGrace = 2; else nGrace = 1; // Default if (GetBaseAC(oArmor)>iMax ) SetCompositeBonus(oSkin,"SwashGrace",0,ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC,IP_CONST_SAVEBASETYPE_REFLEX); else SetCompositeBonus(oSkin,"SwashGrace",nGrace,ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC,IP_CONST_SAVEBASETYPE_REFLEX); } //Applies a Dodge AC boost when they are wearing light armor or less. //Still need to remove bonus when they are encumbered. void Dodge(object oPC, object oSkin,int sDodge) { object oArmor=GetItemInSlot(INVENTORY_SLOT_CHEST,oPC); int iBase = GetBaseAC(oArmor); int iMax = 3; if (GetBaseAC(oArmor)>iMax ) SetCompositeBonus(oSkin,"SwashAC",0,ITEM_PROPERTY_AC_BONUS); else SetCompositeBonus(oSkin,"SwashAC",sDodge,ITEM_PROPERTY_AC_BONUS); } //Adds Int bonus to damage. //Make a special on-hit that heals your INT bonus if the target is immune to Sneak or Crits //Make this only apply to weapons useable with weapon finesse //make this not apply if you are wearing medium or heavy armor, or are encumbered. void SmartWound(object oPC, object oSkin, int iStrike, int iEquip) { object oArmor=GetItemInSlot(INVENTORY_SLOT_CHEST,oPC); int iBase = GetBaseAC(oArmor); int iMax = 3; int iLight = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC))==BASE_ITEM_DAGGER ? 1 : 0; iLight = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC))==BASE_ITEM_HANDAXE ? 1 : iLight; iLight = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC))==BASE_ITEM_KAMA ? 1 : iLight; iLight = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC))==BASE_ITEM_KUKRI ? 1 : iLight; iLight = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC))==BASE_ITEM_LIGHTHAMMER ? 1 : iLight; iLight = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC))==BASE_ITEM_LIGHTMACE ? 1 : iLight; iLight = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC))==BASE_ITEM_RAPIER ? 1 : iLight; iLight = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC))==BASE_ITEM_SHORTSWORD ? 1 : iLight; iLight = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC))==BASE_ITEM_SICKLE ? 1 : iLight; iLight = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC))==BASE_ITEM_WHIP ? 1 : iLight; iLight = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC))==BASE_ITEM_ELVEN_COURTBLADE ? 1 : iLight; iLight = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC))==BASE_ITEM_ELVEN_LIGHTBLADE ? 1 : iLight; iLight = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC))==BASE_ITEM_ELVEN_THINBLADE ? 1 : iLight; if (GetLevelByClass(CLASS_TYPE_IAIJUTSU_MASTER) > 0) { iLight = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC))==BASE_ITEM_KATANA ? 1 : iLight; } if (GetBaseAC(oArmor)>iMax ) PRCRemoveEffectsFromSpell(oPC, SPELL_SWASH_DAMAGE); else if (iLight<1) PRCRemoveEffectsFromSpell(oPC, SPELL_SWASH_DAMAGE); else { if (GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC))) { ActionCastSpellOnSelf(SPELL_SWASH_DAMAGE); } else { PRCRemoveEffectsFromSpell(oPC, SPELL_SWASH_DAMAGE); } } } //This makes a unique on hit which calls on the "prc_swashweak" scripts //to simulate a critical hit roll percentage. On success, it deals //2 STR damage (and 2 CON damage at level 19) void CritSTR(object oPC, object oSkin,int iStrike, int iEquip) { object oItem ; object oItemb ; if (iEquip==2) { oItem=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC); if ( GetLocalInt(oItem,"CritHarm")) return; AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER,1),oItem,9999.0); SetLocalInt(oItem,"CritHarm",1); } else if (iEquip==1) { oItem=GetItemLastUnequipped(); RemoveSpecificProperty(oItem,ITEM_PROPERTY_ONHITCASTSPELL,IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER,0,1,"",-1,DURATION_TYPE_TEMPORARY); DeleteLocalInt(oItem,"CritHarm"); } else { oItem=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC); if (!GetLocalInt(oItem,"CritHarm")) { AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER,1),oItem,9999.0); SetLocalInt(oItem,"CritHarm",1); } } if (iEquip==2) { oItemb=GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC); if ( GetLocalInt(oItemb,"CritHarm")) return; AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER,1),oItemb,9999.0); SetLocalInt(oItemb,"CritHarm",1); } else if (iEquip==1) { oItemb=GetItemLastUnequipped(); RemoveSpecificProperty(oItemb,ITEM_PROPERTY_ONHITCASTSPELL,IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER,0,1,"",-1,DURATION_TYPE_TEMPORARY); DeleteLocalInt(oItemb,"CritHarm"); } else { oItemb=GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC); if (!GetLocalInt(oItemb,"CritHarm")) { AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER,1),oItemb,9999.0); SetLocalInt(oItemb,"CritHarm",1); } } } void main() { //Declare main variables. object oPC = OBJECT_SELF; object oSkin = GetPCSkin(oPC); int iClass = GetLevelByClass(CLASS_TYPE_SWASHBUCKLER,oPC); int sDodge = GetHasFeat(SWASH_DODGE_1, oPC) ? 1 : 0; sDodge = GetHasFeat(SWASH_DODGE_2, oPC) ? 2 : sDodge; sDodge = GetHasFeat(SWASH_DODGE_3, oPC) ? 3 : sDodge; sDodge = GetHasFeat(SWASH_DODGE_4, oPC) ? 4 : sDodge; sDodge = GetHasFeat(SWASH_DODGE_5, oPC) ? 5 : sDodge; sDodge = GetHasFeat(SWASH_DODGE_6, oPC) ? 6 : sDodge; sDodge = GetHasFeat(SWASH_DODGE_7, oPC) ? 7 : sDodge; sDodge = GetHasFeat(SWASH_DODGE_8, oPC) ? 8 : sDodge; int iStrike = GetHasFeat(INSIGHTFUL_STRIKE, oPC); int iEquip= GetLocalInt(oPC,"ONEQUIP"); int WeakCrit = GetHasFeat(WEAKENING_CRITICAL, oPC); int WoundCrit = GetHasFeat(WOUNDING_CRITICAL, oPC); if (iClass>1) Grace(oPC, oSkin); if (sDodge>0) Dodge(oPC, oSkin, sDodge); if (iStrike>0) SmartWound(oPC, oSkin, iStrike, iEquip); if (iStrike>0) CritSTR(oPC, oSkin, iStrike, iEquip); }