Updated Foresight to use EffectBonusFeat. Updated PRCRemoveProtections to not dispel extraordinary & supernatural effects. Expanded DAMAGE_BONUS cap to 50. Expanded various functions to use new DAMAGE_BONUS cap.
215 lines
6.0 KiB
Plaintext
215 lines
6.0 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Knight - Fighting Challenge
|
|
//:: prc_knght_fightc.nss
|
|
//:://////////////////////////////////////////////
|
|
//:: Applies a temporary Dam, Will and Attack bonus vs
|
|
//:: monsters of the targets racial type
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Stratovarius
|
|
//:: Created On: July 1, 2007
|
|
//:://////////////////////////////////////////////
|
|
|
|
#include "prc_alterations"
|
|
#include "prc_class_const"
|
|
|
|
int GetIntToDamage(int nCheck)
|
|
{
|
|
int nDam;
|
|
|
|
if (nCheck >= 50) nDam = DAMAGE_BONUS_50;
|
|
else if (nCheck == 49) nDam = DAMAGE_BONUS_49;
|
|
else if (nCheck == 48) nDam = DAMAGE_BONUS_48;
|
|
else if (nCheck == 47) nDam = DAMAGE_BONUS_47;
|
|
else if (nCheck == 46) nDam = DAMAGE_BONUS_46;
|
|
else if (nCheck == 45) nDam = DAMAGE_BONUS_45;
|
|
else if (nCheck == 44) nDam = DAMAGE_BONUS_44;
|
|
else if (nCheck == 43) nDam = DAMAGE_BONUS_43;
|
|
else if (nCheck == 42) nDam = DAMAGE_BONUS_42;
|
|
else if (nCheck == 41) nDam = DAMAGE_BONUS_41;
|
|
else if (nCheck == 40) nDam = DAMAGE_BONUS_40;
|
|
else if (nCheck == 39) nDam = DAMAGE_BONUS_39;
|
|
else if (nCheck == 38) nDam = DAMAGE_BONUS_38;
|
|
else if (nCheck == 37) nDam = DAMAGE_BONUS_37;
|
|
else if (nCheck == 36) nDam = DAMAGE_BONUS_36;
|
|
else if (nCheck == 35) nDam = DAMAGE_BONUS_35;
|
|
else if (nCheck == 34) nDam = DAMAGE_BONUS_34;
|
|
else if (nCheck == 33) nDam = DAMAGE_BONUS_33;
|
|
else if (nCheck == 32) nDam = DAMAGE_BONUS_32;
|
|
else if (nCheck == 31) nDam = DAMAGE_BONUS_31;
|
|
else if (nCheck == 30) nDam = DAMAGE_BONUS_30;
|
|
else if (nCheck == 29) nDam = DAMAGE_BONUS_29;
|
|
else if (nCheck == 28) nDam = DAMAGE_BONUS_28;
|
|
else if (nCheck == 27) nDam = DAMAGE_BONUS_27;
|
|
else if (nCheck == 26) nDam = DAMAGE_BONUS_26;
|
|
else if (nCheck == 25) nDam = DAMAGE_BONUS_25;
|
|
else if (nCheck == 24) nDam = DAMAGE_BONUS_24;
|
|
else if (nCheck == 23) nDam = DAMAGE_BONUS_23;
|
|
else if (nCheck == 22) nDam = DAMAGE_BONUS_22;
|
|
else if (nCheck == 21) nDam = DAMAGE_BONUS_21;
|
|
else if (nCheck >= 20) nDam = DAMAGE_BONUS_20;
|
|
else if (nCheck == 19) nDam = DAMAGE_BONUS_19;
|
|
else if (nCheck == 18) nDam = DAMAGE_BONUS_18;
|
|
else if (nCheck == 17) nDam = DAMAGE_BONUS_17;
|
|
else if (nCheck == 16) nDam = DAMAGE_BONUS_16;
|
|
else if (nCheck == 15) nDam = DAMAGE_BONUS_15;
|
|
else if (nCheck == 14) nDam = DAMAGE_BONUS_14;
|
|
else if (nCheck == 13) nDam = DAMAGE_BONUS_13;
|
|
else if (nCheck == 12) nDam = DAMAGE_BONUS_12;
|
|
else if (nCheck == 11) nDam = DAMAGE_BONUS_11;
|
|
else if (nCheck == 10) nDam = DAMAGE_BONUS_10;
|
|
else if (nCheck == 9) nDam = DAMAGE_BONUS_9;
|
|
else if (nCheck == 8) nDam = DAMAGE_BONUS_8;
|
|
else if (nCheck == 7) nDam = DAMAGE_BONUS_7;
|
|
else if (nCheck == 6) nDam = DAMAGE_BONUS_6;
|
|
else if (nCheck == 5) nDam = DAMAGE_BONUS_5;
|
|
else if (nCheck == 4) nDam = DAMAGE_BONUS_4;
|
|
else if (nCheck == 3) nDam = DAMAGE_BONUS_3;
|
|
else if (nCheck == 2) nDam = DAMAGE_BONUS_2;
|
|
else if (nCheck == 1) nDam = DAMAGE_BONUS_1;
|
|
// Null line in the 2da
|
|
else nDam = 0;
|
|
|
|
return nDam;
|
|
}
|
|
|
|
/* int GetIntToDamage(int nCheck)
|
|
{
|
|
int IntToDam = -1;
|
|
|
|
if (nCheck == 1)
|
|
{
|
|
IntToDam = DAMAGE_BONUS_1;
|
|
}
|
|
else if (nCheck == 2)
|
|
{
|
|
IntToDam = DAMAGE_BONUS_2;
|
|
}
|
|
else if (nCheck == 3)
|
|
{
|
|
IntToDam = DAMAGE_BONUS_3;
|
|
}
|
|
else if (nCheck == 4)
|
|
{
|
|
IntToDam = DAMAGE_BONUS_4;
|
|
}
|
|
else if (nCheck == 5)
|
|
{
|
|
IntToDam = DAMAGE_BONUS_5;
|
|
}
|
|
else if (nCheck == 6)
|
|
{
|
|
IntToDam = DAMAGE_BONUS_6;
|
|
}
|
|
else if (nCheck == 7)
|
|
{
|
|
IntToDam = DAMAGE_BONUS_7;
|
|
}
|
|
else if (nCheck == 8)
|
|
{
|
|
IntToDam = DAMAGE_BONUS_8;
|
|
}
|
|
else if (nCheck == 9)
|
|
{
|
|
IntToDam = DAMAGE_BONUS_9;
|
|
}
|
|
else if (nCheck == 10)
|
|
{
|
|
IntToDam = DAMAGE_BONUS_10;
|
|
}
|
|
else if (nCheck == 11)
|
|
{
|
|
IntToDam = DAMAGE_BONUS_11;
|
|
}
|
|
else if (nCheck == 12)
|
|
{
|
|
IntToDam = DAMAGE_BONUS_12;
|
|
}
|
|
else if (nCheck == 13)
|
|
{
|
|
IntToDam = DAMAGE_BONUS_13;
|
|
}
|
|
else if (nCheck == 14)
|
|
{
|
|
IntToDam = DAMAGE_BONUS_14;
|
|
}
|
|
else if (nCheck == 15)
|
|
{
|
|
IntToDam = DAMAGE_BONUS_15;
|
|
}
|
|
else if (nCheck == 16)
|
|
{
|
|
IntToDam = DAMAGE_BONUS_16;
|
|
}
|
|
else if (nCheck == 17)
|
|
{
|
|
IntToDam = DAMAGE_BONUS_17;
|
|
}
|
|
else if (nCheck == 18)
|
|
{
|
|
IntToDam = DAMAGE_BONUS_18;
|
|
}
|
|
else if (nCheck == 19)
|
|
{
|
|
IntToDam = DAMAGE_BONUS_19;
|
|
}
|
|
else if (nCheck >= 20)
|
|
{
|
|
IntToDam = DAMAGE_BONUS_20;
|
|
}
|
|
|
|
return IntToDam;
|
|
}
|
|
*/
|
|
void main()
|
|
{
|
|
//Declare main variables.
|
|
object oPC = OBJECT_SELF;
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
int nRace = MyPRCGetRacialType(oTarget);
|
|
int nClass = GetLevelByClass(CLASS_TYPE_KNIGHT, oPC);
|
|
int nDur = 5 + GetAbilityModifier(ABILITY_CHARISMA, oPC);
|
|
int nBonus = 1;
|
|
|
|
// Bonus grows at these levels.
|
|
if (nClass >= 19) nBonus = 4;
|
|
else if (nClass >= 13) nBonus = 3;
|
|
else if (nClass >= 7) nBonus = 2;
|
|
|
|
|
|
if(GetHasSpellEffect(SPELL_FIGHT_CHALLENGE, oPC))
|
|
{
|
|
IncrementRemainingFeatUses(oPC, FEAT_FIGHT_CHALLENGE);
|
|
return;
|
|
}
|
|
int nKC = GetLocalInt(oPC, "KnightsChallenge");
|
|
|
|
if (nKC > 0)
|
|
{
|
|
FloatingTextStringOnCreature("You have " +IntToString(nKC) + " uses of Knight's Challenge remaining", oPC, FALSE);
|
|
// Subtract a use
|
|
SetLocalInt(oPC, "KnightsChallenge", nKC - 1);
|
|
}
|
|
else // Fail, no more uses
|
|
{
|
|
FloatingTextStringOnCreature("You have no more uses of Knight's Challenge remaining", oPC, FALSE);
|
|
return;
|
|
}
|
|
// CR check
|
|
if ((IntToFloat(GetHitDice(oPC) - 2)) >= GetChallengeRating(oTarget) || 5 > GetAbilityScore(oTarget, ABILITY_INTELLIGENCE)) // Fail, unworthy
|
|
{
|
|
FloatingTextStringOnCreature(GetName(oTarget) + " is not worthy of a Knight's Challenge", oPC, FALSE);
|
|
return;
|
|
}
|
|
|
|
effect eAttack = EffectAttackIncrease(nBonus);
|
|
effect eSave = EffectSavingThrowIncrease(SAVING_THROW_WILL, nBonus);
|
|
effect eDam = EffectDamageIncrease(GetIntToDamage(nBonus));
|
|
|
|
effect eLink = EffectLinkEffects(eAttack, eSave);
|
|
eLink = EffectLinkEffects(eLink, eDam);
|
|
|
|
eLink = VersusRacialTypeEffect(eLink, nRace);
|
|
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, RoundsToSeconds(nDur));
|
|
}
|