PRC8/nwn/nwnprc/trunk/scripts/prc_iaijutsu_mst.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
2024-02-11 14:01:05 -05:00

93 lines
3.6 KiB
Plaintext

#include "prc_alterations"
//Applies Katana Finesse to the character as an effect
void KatanaFinesse(object oPC)
{
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
object oWeap2 = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC);
int bKatFin = GetHasFeat(FEAT_KATANA_FINESSE, oPC);
int bStr = GetAbilityModifier(ABILITY_STRENGTH, oPC);
int bDex = GetAbilityModifier(ABILITY_DEXTERITY, oPC);
int bKatFinBon = (bDex > bStr) ? bDex - bStr : 0;
int iUseR = FALSE;
int iUseL = FALSE;
if(bKatFin && bKatFinBon &&
(GetBaseItemType(oWeap) == BASE_ITEM_KATANA
|| // Hack - Assume a Soulknife with Iaijutsu Master levels using bastard sword shape has it shaped like a katana
(GetStringLeft(GetTag(oWeap), 14) == "prc_sk_mblade_" && GetBaseItemType(oWeap) == BASE_ITEM_BASTARDSWORD)
)
)
{
iUseR = TRUE;
if (!GetLocalInt(oPC, "KatanaFinesseOnR")) SendMessageToPC(oPC, "Katana Finesse On -- Main Hand.");
SetLocalInt(oPC, "KatanaFinesseOnR", TRUE);
}
else
{
if (GetLocalInt(oPC, "KatanaFinesseOnR")) SendMessageToPC(oPC, "Katana Finesse Off -- Main Hand.");
DeleteLocalInt(oPC, "KatanaFinesseOnR");
}
if(bKatFin && bKatFinBon &&
(GetBaseItemType(oWeap2) == BASE_ITEM_KATANA
|| // Hack - Assume a Soulknife with Iaijutsu Master levels using bastard sword shape has it shaped like a katana
(GetStringLeft(GetTag(oWeap2), 14) == "prc_sk_mblade_" && GetBaseItemType(oWeap) == BASE_ITEM_BASTARDSWORD)
)
)
{
iUseL = TRUE;
if (!GetLocalInt(oPC, "KatanaFinesseOnL")) SendMessageToPC(oPC, "Katana Finesse On -- Off Hand.");
SetLocalInt(oPC, "KatanaFinesseOnL", TRUE);
}
else
{
if (GetLocalInt(oPC, "KatanaFinesseOnL")) SendMessageToPC(oPC, "Katana Finesse Off -- Off Hand.");
DeleteLocalInt(oPC, "KatanaFinesseOnL");
}
if (iUseR)
SetCompositeAttackBonus(oPC, "KatanaFinesseR", bKatFinBon, ATTACK_BONUS_ONHAND);
if (iUseL)
SetCompositeAttackBonus(oPC, "KatanaFinesseL", bKatFinBon, ATTACK_BONUS_OFFHAND);
if (iUseR == FALSE)
SetCompositeAttackBonus(oPC, "KatanaFinesseR", 0, ATTACK_BONUS_ONHAND);
if (iUseL == FALSE)
SetCompositeAttackBonus(oPC, "KatanaFinesseL", 0, ATTACK_BONUS_OFFHAND);
}
void main()
{
//Declare main variables.
object oPC = OBJECT_SELF;
object oSkin = GetPCSkin(oPC);
object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
object oUnequip = GetItemLastUnequipped();
object oKatana = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
//Determine which feats the character has
int bCanDef = GetHasFeat(FEAT_CANNY_DEFENSE, oPC);
int bEpicCD = GetHasFeat(FEAT_EPIC_IAIJUTSU, oPC);
int bKatFin = GetHasFeat(FEAT_KATANA_FINESSE, oPC);
int iIntBonus = GetAbilityModifier(ABILITY_INTELLIGENCE, oPC);
iIntBonus = bEpicCD ? iIntBonus * 2 : iIntBonus;
//Apply bonuses accordingly
if(bCanDef > 0 && GetBaseAC(oArmor) == 0 && GetBaseItemType(oKatana) == BASE_ITEM_KATANA)
SetCompositeBonus(oSkin, "Iaijutsu_AC", iIntBonus, ITEM_PROPERTY_AC_BONUS);
else
SetCompositeBonus(oSkin, "Iaijutsu_AC", 0, ITEM_PROPERTY_AC_BONUS);
//int bStr = GetAbilityModifier(ABILITY_STRENGTH, oPC);
//int bDex = GetAbilityModifier(ABILITY_DEXTERITY, oPC);
//int bKatFinBon = (bDex > bStr) ? bDex - bStr : 0;
//SetCompositeAttackBonus(oPC, "KatanaFinesseR", 0, ATTACK_BONUS_ONHAND);
//SetCompositeAttackBonus(oPC, "KatanaFinesseL", 0, ATTACK_BONUS_OFFHAND);
KatanaFinesse(oPC);
}