Initial commit. Updated release archive.
This commit is contained in:
135
_removed/prc_duelist.nss
Normal file
135
_removed/prc_duelist.nss
Normal file
@@ -0,0 +1,135 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: [Duelist Feats]
|
||||
//:: [prc_duelist.nss]
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Check to see which Duelist feats a creature
|
||||
//:: has and apply the appropriate bonuses.
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Aaon Graywolf
|
||||
//:: Created On: Dec 20, 2003
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "inc_item_props"
|
||||
#include "strat_prc_inc"
|
||||
|
||||
// * Applies the Duelist's AC bonuses as CompositeBonuses on the object's skin.
|
||||
// * AC bonus is determined by object's int bonus (2x int bonus if epic)
|
||||
// * iOnOff = TRUE/FALSE
|
||||
// * iEpic = TRUE/FALSE
|
||||
void DuelistCannyDefense(object oPC, object oSkin, int iOnOff, int iEpic = FALSE)
|
||||
{
|
||||
int iIntBonus = GetAbilityModifier(ABILITY_INTELLIGENCE, oPC);
|
||||
iIntBonus = iEpic ? iIntBonus * 2 : iIntBonus;
|
||||
|
||||
if(iOnOff){
|
||||
SetCompositeBonus(oSkin, "CannyDefenseBonus", iIntBonus, ITEM_PROPERTY_AC_BONUS);
|
||||
if(GetLocalInt(oPC, "CannyDefense") != TRUE)
|
||||
FloatingTextStringOnCreature("Canny Defense On", oPC);
|
||||
SetLocalInt(oPC, "CannyDefense", TRUE);
|
||||
}
|
||||
else {
|
||||
SetCompositeBonus(oSkin, "CannyDefenseBonus", 0, ITEM_PROPERTY_AC_BONUS);
|
||||
if(GetLocalInt(oPC, "CannyDefense") != FALSE)
|
||||
FloatingTextStringOnCreature("Canny Defense Off", oPC);
|
||||
SetLocalInt(oPC, "CannyDefense", FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
// * Applies the Duelist's reflex bonuses as CompositeBonuses on the object's skin.
|
||||
// * iLevel = integer reflex save bonus
|
||||
void DuelistGrace(object oPC, object oSkin, int iLevel)
|
||||
{
|
||||
if(GetLocalInt(oSkin, "GraceBonus") == iLevel) return;
|
||||
|
||||
if(iLevel > 0){
|
||||
SetCompositeBonus(oSkin, "GraceBonus", iLevel, ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC, IP_CONST_SAVEBASETYPE_REFLEX);
|
||||
if(GetLocalInt(oPC, "Grace") != TRUE)
|
||||
FloatingTextStringOnCreature("Grace On", oPC);
|
||||
SetLocalInt(oPC, "Grace", TRUE);
|
||||
}
|
||||
else {
|
||||
SetCompositeBonus(oSkin, "GraceBonus", 0, ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC, IP_CONST_SAVEBASETYPE_REFLEX);
|
||||
if(GetLocalInt(oPC, "Grace") != FALSE)
|
||||
FloatingTextStringOnCreature("Grace Off", oPC);
|
||||
SetLocalInt(oPC, "Grace", FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
// * Applies the Duelist's parry skill bonuses as CompositeBonuses on the object's skin.
|
||||
// * Bonus is determined by object's Duelist level
|
||||
void DuelistElaborateParry(object oPC, object oSkin)
|
||||
{
|
||||
int iClassBonus = GetLevelByClass(CLASS_TYPE_DUELIST, oPC);
|
||||
if(GetLocalInt(oSkin, "ElaborateParryBonus") == iClassBonus) return;
|
||||
|
||||
SetCompositeBonus(oSkin, "ElaborateParryBonus", iClassBonus, ITEM_PROPERTY_SKILL_BONUS, SKILL_PARRY);
|
||||
}
|
||||
|
||||
// * Applies the Duelist's damage bonuses on the object's main hand weapon.
|
||||
// * iPStrkLevel = 1 (1D6), 2 (2D6) or 0 (off)
|
||||
void DuelistPreciseStrike(object oPC, object oWeap, int iPStrkLevel)
|
||||
{
|
||||
int iDamBonus = 0;
|
||||
|
||||
if(iPStrkLevel == 1) iDamBonus = IP_CONST_DAMAGEBONUS_1d6;
|
||||
if(iPStrkLevel == 2) iDamBonus = IP_CONST_DAMAGEBONUS_2d6;
|
||||
|
||||
if(iPStrkLevel > 0){
|
||||
if(GetLocalInt(oWeap, "PStrkBonus") != iDamBonus){
|
||||
DuelistRemovePreciseStrike(oWeap);
|
||||
AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_SLASHING, iDamBonus), oWeap);
|
||||
SetLocalInt(oWeap, "PStrkBonus", iDamBonus);
|
||||
}
|
||||
|
||||
if(GetLocalInt(oPC, "PreciseStrike") != TRUE)
|
||||
FloatingTextStringOnCreature("Precise Strike On", oPC);
|
||||
SetLocalInt(oPC, "PreciseStrike", TRUE);
|
||||
}
|
||||
else {
|
||||
//The actual removal of the bonus is handled in the module's unequip script
|
||||
//This section simply alerts the player that the bonus has been turned off
|
||||
if(GetLocalInt(oPC, "PreciseStrike") != FALSE)
|
||||
FloatingTextStringOnCreature("Precise Strike Off", oPC);
|
||||
SetLocalInt(oPC, "PreciseStrike", FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
//Declare main variables.
|
||||
object oPC = OBJECT_SELF;
|
||||
object oSkin = GetPCSkin(oPC);
|
||||
object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
|
||||
object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
|
||||
|
||||
//Determine which duelist feats the character has
|
||||
int bCanDef = GetHasFeat(FEAT_CANNY_DEFENSE, oPC);
|
||||
int bEpicCD = GetHasFeat(FEAT_EPIC_DUELIST, oPC);
|
||||
int bPStrk = GetHasFeat(FEAT_PRECISE_STRIKE_1d6, oPC) ? 1 : 0;
|
||||
bPStrk = GetHasFeat(FEAT_PRECISE_STRIKE_2d6, oPC) ? 2 : bPStrk;
|
||||
int bGrace = GetHasFeat(FEAT_GRACE_2, oPC) ? 2 : 0;
|
||||
bGrace = GetHasFeat(FEAT_GRACE_4, oPC) ? 4 : bGrace;
|
||||
bGrace = GetHasFeat(FEAT_GRACE_6, oPC) ? 6 : bGrace;
|
||||
bGrace = GetHasFeat(FEAT_GRACE_8, oPC) ? 8 : bGrace;
|
||||
bGrace = GetHasFeat(FEAT_GRACE_10, oPC) ? 10 : bGrace;
|
||||
int bElabPr = GetHasFeat(FEAT_ELABORATE_PARRY, oPC);
|
||||
|
||||
//Apply bonuses accordingly
|
||||
if(bCanDef > 0 && GetBaseAC(oArmor) == 0)
|
||||
DuelistCannyDefense(oPC, oSkin, TRUE, bEpicCD);
|
||||
else
|
||||
DuelistCannyDefense(oPC, oSkin, FALSE);
|
||||
|
||||
if(bPStrk > 0 && (GetBaseItemType(oWeapon) == BASE_ITEM_RAPIER || GetBaseItemType(oWeapon) == BASE_ITEM_DAGGER))
|
||||
DuelistPreciseStrike(oPC, oWeapon, bPStrk);
|
||||
else
|
||||
DuelistPreciseStrike(oPC, oWeapon, 0);
|
||||
|
||||
if(bGrace > 0 && GetBaseAC(oArmor) == 0)
|
||||
DuelistGrace(oPC, oSkin, bGrace);
|
||||
else
|
||||
DuelistGrace(oPC, oSkin, 0);
|
||||
|
||||
if(bElabPr > 0) DuelistElaborateParry(oPC, oSkin);
|
||||
|
||||
}
|
Reference in New Issue
Block a user