Expanded Arcane Duelist for epic progression
Expanded Arcane Duelist for epic progression.
This commit is contained in:
@@ -1,6 +1,35 @@
|
||||
#include "prc_alterations"
|
||||
#include "inc_utility"
|
||||
|
||||
int GetADWeaponAttackBonus(object oWeap)
|
||||
{
|
||||
if (!GetIsObjectValid(oWeap)) return 0;
|
||||
|
||||
object oKotC = GetItemPossessor(oWeap);
|
||||
itemproperty ip = GetFirstItemProperty(oWeap);
|
||||
int iTotal = 0;
|
||||
int iValue = 0;
|
||||
|
||||
while (GetIsItemPropertyValid(ip))
|
||||
{
|
||||
if (GetItemPropertyType(ip) == ITEM_PROPERTY_ATTACK_BONUS ||
|
||||
GetItemPropertyType(ip) == ITEM_PROPERTY_ENHANCEMENT_BONUS)
|
||||
{
|
||||
iValue = GetItemPropertyCostTableValue(ip);
|
||||
iTotal = (iValue > iTotal) ? iValue : iTotal;
|
||||
}
|
||||
else if (GetItemPropertyType(ip) == ITEM_PROPERTY_HOLY_AVENGER &&
|
||||
GetLevelByClass(CLASS_TYPE_PALADIN, oKotC))
|
||||
{
|
||||
iValue = 5;
|
||||
iTotal = (iValue > iTotal) ? iValue : iTotal;
|
||||
}
|
||||
ip = GetNextItemProperty(oWeap);
|
||||
}
|
||||
|
||||
return iTotal;
|
||||
}
|
||||
|
||||
|
||||
// * Applies the Arcane Duelist's AC bonus as a CompositeBonus on object's skin.
|
||||
void ApparentDefense(object oPC, object oSkin)
|
||||
@@ -20,27 +49,95 @@ void RemoveEnchantCW(object oPC, object oWeap)
|
||||
}
|
||||
}
|
||||
|
||||
/* Enchant Chosen Weapon (Ex): The arcane duelist's chosen melee
|
||||
weapon acts as if it has an enhancement bonus, even if it does
|
||||
not. If it does have an enhancement bonus, the arcane duelist
|
||||
adds this bonus to the weapon as an effective bonus. This can
|
||||
bring a weapon's effective enhancement bonus above +5. However,
|
||||
no weapon can have more than a +10 total effective bonus, so this
|
||||
class-granted effective bonus cannot be added to a weapon if the
|
||||
addition would increase the weapon's total effective bonus above
|
||||
+10. This class-granted bonus works only for the arcane duelist
|
||||
when wielding her chosen melee weapon. The enhancement bonus is
|
||||
+1 at 1st level, and rises to +2 at 4th level, +3 at 6th level,
|
||||
and +4 at 8th level.
|
||||
|
||||
Enchant Chosen Weapon: The epic Arcane Duelist's Chosen Weapon
|
||||
bonus continues to increase by +1 every other level and the
|
||||
maximum enhancement to the Chosen Weapon is increased to +20.*/
|
||||
|
||||
// * Applies the Arcane Duelist's Enchant Chosen Weapon bonus
|
||||
void EnchantCW(object oPC, object oWeap)
|
||||
{
|
||||
int iBonus = 0;
|
||||
if (!GetIsObjectValid(oPC) || !GetIsObjectValid(oWeap))
|
||||
return;
|
||||
|
||||
if (GetLevelByClass(CLASS_TYPE_ARCANE_DUELIST, oPC) >= 1)
|
||||
iBonus += 1;
|
||||
int nADLevel = GetLevelByClass(CLASS_TYPE_ARCANE_DUELIST, oPC);
|
||||
int nBonus = 0;
|
||||
int nExistingBonus = GetADWeaponAttackBonus(oWeap);
|
||||
int nEffectiveBonus;
|
||||
int nMaxBonus;
|
||||
|
||||
if (GetLevelByClass(CLASS_TYPE_ARCANE_DUELIST, oPC) >= 4)
|
||||
iBonus += 1;
|
||||
if (nADLevel < 1)
|
||||
return; // No Arcane Duelist levels, no bonus.
|
||||
|
||||
if (GetLevelByClass(CLASS_TYPE_ARCANE_DUELIST, oPC) >= 6)
|
||||
iBonus += 1;
|
||||
// Base scaling
|
||||
if (nADLevel >= 1) nBonus += 1;
|
||||
if (nADLevel >= 4) nBonus += 1;
|
||||
if (nADLevel >= 6) nBonus += 1;
|
||||
if (nADLevel >= 8) nBonus += 1;
|
||||
if (nADLevel >= 10) nBonus += 1;
|
||||
|
||||
if (GetLevelByClass(CLASS_TYPE_ARCANE_DUELIST, oPC) >= 8)
|
||||
iBonus += 1;
|
||||
// Epic scaling
|
||||
if (GetHasFeat(FEAT_EPIC_ARCANE_DUELIST, oPC))
|
||||
{
|
||||
nBonus += (nADLevel - 10) / 2;
|
||||
nMaxBonus = 20;
|
||||
}
|
||||
else
|
||||
{
|
||||
nMaxBonus = 10;
|
||||
}
|
||||
|
||||
//SendMessageToPC(oPC, "Enchant Chosen Weapon has been run");
|
||||
DelayCommand(0.1,SetCompositeBonusT(oWeap, "ADEnchant", iBonus, ITEM_PROPERTY_ENHANCEMENT_BONUS));
|
||||
// Cap the total effective bonus
|
||||
nEffectiveBonus = nExistingBonus + nBonus;
|
||||
if (nEffectiveBonus > nMaxBonus)
|
||||
{
|
||||
nBonus -= (nEffectiveBonus - nMaxBonus);
|
||||
}
|
||||
|
||||
if (nBonus > 0)
|
||||
{
|
||||
// Apply only if there's still a bonus left to apply
|
||||
DelayCommand(0.1, SetCompositeBonusT(oWeap, "ADEnchant", nBonus, ITEM_PROPERTY_ENHANCEMENT_BONUS));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* void EnchantCW(object oPC, object oWeap)
|
||||
{
|
||||
int iBonus = GetADWeaponAttackBonus(oWeap);
|
||||
int iEpicAD = GetHasFeat(FEAT_EPIC_ARCANE_DUELIST);
|
||||
|
||||
if (GetLevelByClass(CLASS_TYPE_ARCANE_DUELIST, oPC) >= 1)
|
||||
iBonus += 1;
|
||||
|
||||
if (GetLevelByClass(CLASS_TYPE_ARCANE_DUELIST, oPC) >= 4)
|
||||
iBonus += 1;
|
||||
|
||||
if (GetLevelByClass(CLASS_TYPE_ARCANE_DUELIST, oPC) >= 6)
|
||||
iBonus += 1;
|
||||
|
||||
if (GetLevelByClass(CLASS_TYPE_ARCANE_DUELIST, oPC) >= 8)
|
||||
iBonus += 1;
|
||||
|
||||
if (GetLevelByClass(CLASS_TYPE_ARCANE_DUELIST, oPC) >= 10)
|
||||
iBonus += 1;
|
||||
|
||||
//SendMessageToPC(oPC, "Enchant Chosen Weapon has been run");
|
||||
DelayCommand(0.1,SetCompositeBonusT(oWeap, "ADEnchant", iBonus, ITEM_PROPERTY_ENHANCEMENT_BONUS));
|
||||
}
|
||||
*/
|
||||
void main()
|
||||
{
|
||||
object oPC = OBJECT_SELF;
|
||||
|
Reference in New Issue
Block a user