Marrusalts are large creatures

Marrusalts are large creatures.  Updated Vow of Poverty to function more like Pen & Paper.  (@fencas) Updated release archive.
This commit is contained in:
Jaysyn904 2025-01-21 07:40:49 -05:00
parent 9b5c7a6655
commit 88ed27dd37
17 changed files with 1964 additions and 1873 deletions

BIN
Release/PRC8_20250121.7z Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

@ -24723,7 +24723,7 @@
24719 16789746 PH_Undead 0 24236
24720 16789747 PH_Vermin 0 24237
24721 16825920 FEAT_SANCTIFY_MARTIAL_SICKLE 0 3169
24722 16825921 FEAT_SANCTIFY_MARTIAL_DWARVENAXE 0 3170
24722 16825921 FEAT_SANCTIFY_MARTIAL_DWAXE 0 3170
24723 16823246 FEAT_SANCTIFY_MARTIAL_CLUB 0 3194
24724 16823247 FEAT_SANCTIFY_MARTIAL_DAGGER 0 3195
24725 16823248 FEAT_SANCTIFY_MARTIAL_LIGHTMACE 0 3196
@ -24748,7 +24748,7 @@
24744 16823267 FEAT_SANCTIFY_MARTIAL_BASTARDSWORD 0 3215
24745 16823268 FEAT_SANCTIFY_MARTIAL_DIREMACE 0 3216
24746 16823269 FEAT_SANCTIFY_MARTIAL_DOUBLEAXE 0 3217
24747 16823270 FEAT_SANCTIFY_MARTIAL_TWOBLADEDSWORD 0 3218
24747 16823270 FEAT_SANCTIFY_MARTIAL_TBSWORD 0 3218
24748 16823271 FEAT_SANCTIFY_MARTIAL_KAMA 0 3219
24749 16823272 FEAT_SANCTIFY_MARTIAL_KUKRI 0 3220
24750 16823273 FEAT_SANCTIFY_MARTIAL_HEAVYCROSSBOW 0 3221
@ -25001,16 +25001,16 @@
24997 **** **** **** ****
24998 **** **** **** ****
24999 **** "## BEGIN PRC8 ADDITIONS ##" **** ****
25000 **** **** **** ****
25001 **** **** **** ****
25002 **** **** **** ****
25003 **** **** **** ****
25004 **** **** **** ****
25005 **** **** **** ****
25006 **** **** **** ****
25007 **** **** **** ****
25008 **** **** **** ****
25009 **** **** **** ****
25000 16822440 EXALTED_COMPANION 0 4199
25001 16825918 FEAT_EXALTED_TURNING 0 3168
25002 16825910 FEAT_HOLYRADIANCE 0 3164
25003 16825914 FEAT_INTUITIVE_ATTACK 0 3166
25004 16825912 FEAT_NIMBUSLIGHT 0 3165
25005 16825902 FEAT_RAVAGEGOLDENICE 0 3162
25006 16823344 FEAT_SERVHEAVEN 0 3355
25007 16825908 FEAT_STIGMATA 0 3163
25008 16822847 FEAT_VOW_OBED 0 3389
25009 16826325 FEAT_VOW_PURITY 0 5360
25010 **** **** **** ****
25011 **** **** **** ****
25012 **** **** **** ****

File diff suppressed because it is too large Load Diff

@ -1,15 +1,16 @@
2DA V2.0
FeatLabel FeatIndex
0 Natural_Armor_5 4736
1 Race_Monstrous 4720
2 Listen4 4581
3 LowLightVision 354
4 ResistFire5 4743
5 Marrusault_Howl 3308
6 Diehard 3297
7 WP_Greatsword 7912
8 WeapFocGSw 107
9 ArmProfHvy 2
10 ArmProfLgt 3
11 ArmProfMed 4
FeatLabel FeatIndex
0 Natural_Armor_5 4736
1 Race_Monstrous 4720
2 Listen4 4581
3 LowLightVision 354
4 ResistFire5 4743
5 Marrusault_Howl 3308
6 Diehard 3297
7 WP_Greatsword 7912
8 WeapFocGSw 107
9 ArmProfHvy 2
10 ArmProfLgt 3
11 ArmProfMed 4
12 Large_Creature 4760

@ -59,12 +59,21 @@ void Sanctify()
}
if(!Sanctify_Feat_Wrapper(iType, oPC, oItem)) return;
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1),oItem,9999.0);
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4),oItem,9999.0);
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4),oItem,9999.0);
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyVisualEffect(ITEM_VISUAL_HOLY),oItem,9999.0);
itemproperty ip1 = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1);
ip1 = TagItemProperty(ip1,"Sanctify1");
AddItemProperty(DURATION_TYPE_TEMPORARY,ip1,oItem,9999.0);
itemproperty ip2 = ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4);
ip2 = TagItemProperty(ip2,"Sanctify2");
AddItemProperty(DURATION_TYPE_TEMPORARY,ip2,oItem,9999.0);
itemproperty ip3 = ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4);
ip3 = TagItemProperty(ip3,"Sanctify3");
AddItemProperty(DURATION_TYPE_TEMPORARY,ip3,oItem,9999.0);
itemproperty ip4 = ItemPropertyVisualEffect(ITEM_VISUAL_HOLY);
ip4 = TagItemProperty(ip4,"Sanctify4");
AddItemProperty(DURATION_TYPE_TEMPORARY,ip4,oItem,9999.0);
SetLocalInt(oItem,"SanctMar",1);
}
else if (iEquip==1)
{
@ -173,22 +182,38 @@ void Sanctify()
if(Sanctify_Feat_Wrapper(iType, oPC, oItem) && (!GetLocalInt(oItem,"SanctMar")))
{
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1),oItem,9999.0);
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4),oItem,9999.0);
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4),oItem,9999.0);
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyVisualEffect(ITEM_VISUAL_HOLY),oItem,9999.0);
SetLocalInt(oItem,"SanctMar",1);
itemproperty ip1 = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1);
ip1 = TagItemProperty(ip1,"Sanctify1");
AddItemProperty(DURATION_TYPE_TEMPORARY,ip1,oItem,9999.0);
itemproperty ip2 = ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4);
ip2 = TagItemProperty(ip2,"Sanctify2");
AddItemProperty(DURATION_TYPE_TEMPORARY,ip2,oItem,9999.0);
itemproperty ip3 = ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4);
ip3 = TagItemProperty(ip3,"Sanctify3");
AddItemProperty(DURATION_TYPE_TEMPORARY,ip3,oItem,9999.0);
itemproperty ip4 = ItemPropertyVisualEffect(ITEM_VISUAL_HOLY);
ip4 = TagItemProperty(ip4,"Sanctify4");
AddItemProperty(DURATION_TYPE_TEMPORARY,ip4,oItem,9999.0);
SetLocalInt(oItem,"SanctMar",1);
}
oItem=GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC);
iType= GetBaseItemType(oItem);
if(Sanctify_Feat_Wrapper(iType, oPC, oItem) && (!GetLocalInt(oItem,"SanctMar")))
{
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1),oItem,9999.0);
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4),oItem,9999.0);
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4),oItem,9999.0);
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyVisualEffect(ITEM_VISUAL_HOLY),oItem,9999.0);
SetLocalInt(oItem,"SanctMar",1);
itemproperty ip1 = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1);
ip1 = TagItemProperty(ip1,"Sanctify1");
AddItemProperty(DURATION_TYPE_TEMPORARY,ip1,oItem,9999.0);
itemproperty ip2 = ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4);
ip2 = TagItemProperty(ip2,"Sanctify2");
AddItemProperty(DURATION_TYPE_TEMPORARY,ip2,oItem,9999.0);
itemproperty ip3 = ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4);
ip3 = TagItemProperty(ip3,"Sanctify3");
AddItemProperty(DURATION_TYPE_TEMPORARY,ip3,oItem,9999.0);
itemproperty ip4 = ItemPropertyVisualEffect(ITEM_VISUAL_HOLY);
ip4 = TagItemProperty(ip4,"Sanctify4");
AddItemProperty(DURATION_TYPE_TEMPORARY,ip4,oItem,9999.0);
SetLocalInt(oItem,"SanctMar",1);
}
}

@ -15,24 +15,24 @@
#include "nw_i0_spells"
#include "inc_persist_loca"
effect VoPDamage(int nTotalEnhancement) //Just for unarmed, so just bludgeoning
effect VoPDamage(int nTotalEnhancement)
{
effect eDamage;
if (nTotalEnhancement>=15) eDamage = EffectDamageIncrease(DAMAGE_BONUS_15,DAMAGE_TYPE_BLUDGEONING);
else if (nTotalEnhancement>=14) eDamage = EffectDamageIncrease(DAMAGE_BONUS_14,DAMAGE_TYPE_BLUDGEONING);
else if (nTotalEnhancement>=13) eDamage = EffectDamageIncrease(DAMAGE_BONUS_13,DAMAGE_TYPE_BLUDGEONING);
else if (nTotalEnhancement>=12) eDamage = EffectDamageIncrease(DAMAGE_BONUS_12,DAMAGE_TYPE_BLUDGEONING);
else if (nTotalEnhancement>=11) eDamage = EffectDamageIncrease(DAMAGE_BONUS_11,DAMAGE_TYPE_BLUDGEONING);
else if (nTotalEnhancement>=10) eDamage = EffectDamageIncrease(DAMAGE_BONUS_10,DAMAGE_TYPE_BLUDGEONING);
else if (nTotalEnhancement>=9) eDamage = EffectDamageIncrease(DAMAGE_BONUS_9,DAMAGE_TYPE_BLUDGEONING);
else if (nTotalEnhancement>=8) eDamage = EffectDamageIncrease(DAMAGE_BONUS_8,DAMAGE_TYPE_BLUDGEONING);
else if (nTotalEnhancement>=7) eDamage = EffectDamageIncrease(DAMAGE_BONUS_7,DAMAGE_TYPE_BLUDGEONING);
else if (nTotalEnhancement>=6) eDamage = EffectDamageIncrease(DAMAGE_BONUS_6,DAMAGE_TYPE_BLUDGEONING);
else if (nTotalEnhancement>=5) eDamage = EffectDamageIncrease(DAMAGE_BONUS_5,DAMAGE_TYPE_BLUDGEONING);
else if (nTotalEnhancement>=4) eDamage = EffectDamageIncrease(DAMAGE_BONUS_4,DAMAGE_TYPE_BLUDGEONING);
else if (nTotalEnhancement>=3) eDamage = EffectDamageIncrease(DAMAGE_BONUS_3,DAMAGE_TYPE_BLUDGEONING);
else if (nTotalEnhancement>=2) eDamage = EffectDamageIncrease(DAMAGE_BONUS_2,DAMAGE_TYPE_BLUDGEONING);
else if (nTotalEnhancement>=1) eDamage = EffectDamageIncrease(DAMAGE_BONUS_1,DAMAGE_TYPE_BLUDGEONING);
if (nTotalEnhancement>=15) eDamage = EffectDamageIncrease(DAMAGE_BONUS_15,DAMAGE_TYPE_BLUDGEONING || DAMAGE_TYPE_SLASHING || DAMAGE_TYPE_PIERCING);
else if (nTotalEnhancement>=14) eDamage = EffectDamageIncrease(DAMAGE_BONUS_14,DAMAGE_TYPE_BLUDGEONING || DAMAGE_TYPE_SLASHING || DAMAGE_TYPE_PIERCING);
else if (nTotalEnhancement>=13) eDamage = EffectDamageIncrease(DAMAGE_BONUS_13,DAMAGE_TYPE_BLUDGEONING || DAMAGE_TYPE_SLASHING || DAMAGE_TYPE_PIERCING);
else if (nTotalEnhancement>=12) eDamage = EffectDamageIncrease(DAMAGE_BONUS_12,DAMAGE_TYPE_BLUDGEONING || DAMAGE_TYPE_SLASHING || DAMAGE_TYPE_PIERCING);
else if (nTotalEnhancement>=11) eDamage = EffectDamageIncrease(DAMAGE_BONUS_11,DAMAGE_TYPE_BLUDGEONING || DAMAGE_TYPE_SLASHING || DAMAGE_TYPE_PIERCING);
else if (nTotalEnhancement>=10) eDamage = EffectDamageIncrease(DAMAGE_BONUS_10,DAMAGE_TYPE_BLUDGEONING || DAMAGE_TYPE_SLASHING || DAMAGE_TYPE_PIERCING);
else if (nTotalEnhancement>=9) eDamage = EffectDamageIncrease(DAMAGE_BONUS_9,DAMAGE_TYPE_BLUDGEONING || DAMAGE_TYPE_SLASHING || DAMAGE_TYPE_PIERCING);
else if (nTotalEnhancement>=8) eDamage = EffectDamageIncrease(DAMAGE_BONUS_8,DAMAGE_TYPE_BLUDGEONING || DAMAGE_TYPE_SLASHING || DAMAGE_TYPE_PIERCING);
else if (nTotalEnhancement>=7) eDamage = EffectDamageIncrease(DAMAGE_BONUS_7,DAMAGE_TYPE_BLUDGEONING || DAMAGE_TYPE_SLASHING || DAMAGE_TYPE_PIERCING);
else if (nTotalEnhancement>=6) eDamage = EffectDamageIncrease(DAMAGE_BONUS_6,DAMAGE_TYPE_BLUDGEONING || DAMAGE_TYPE_SLASHING || DAMAGE_TYPE_PIERCING);
else if (nTotalEnhancement>=5) eDamage = EffectDamageIncrease(DAMAGE_BONUS_5,DAMAGE_TYPE_BLUDGEONING || DAMAGE_TYPE_SLASHING || DAMAGE_TYPE_PIERCING);
else if (nTotalEnhancement>=4) eDamage = EffectDamageIncrease(DAMAGE_BONUS_4,DAMAGE_TYPE_BLUDGEONING || DAMAGE_TYPE_SLASHING || DAMAGE_TYPE_PIERCING);
else if (nTotalEnhancement>=3) eDamage = EffectDamageIncrease(DAMAGE_BONUS_3,DAMAGE_TYPE_BLUDGEONING || DAMAGE_TYPE_SLASHING || DAMAGE_TYPE_PIERCING);
else if (nTotalEnhancement>=2) eDamage = EffectDamageIncrease(DAMAGE_BONUS_2,DAMAGE_TYPE_BLUDGEONING || DAMAGE_TYPE_SLASHING || DAMAGE_TYPE_PIERCING);
else if (nTotalEnhancement>=1) eDamage = EffectDamageIncrease(DAMAGE_BONUS_1,DAMAGE_TYPE_BLUDGEONING || DAMAGE_TYPE_SLASHING || DAMAGE_TYPE_PIERCING);
return eDamage;
}
@ -45,10 +45,8 @@ void main()
object oArmor;
object oShield;
object oSkin = GetPCSkin(oPC);
int nSlot;
int nEvent = GetCurrentlyRunningEvent();
int nLevel = GetCharacterLevel(oPC)-GetPersistantLocalInt(oPC,"VoPLevel1")+1;
int nLevelCheck;
int nACArmor = 4+nLevel/3;
int nACDeflection = nLevel/6;
int nACNatural = nLevel/8;
@ -56,8 +54,7 @@ void main()
int nDR = 5*(1+(nLevel-10)/9);
int nER = (10*(1+(nLevel-13)/7))-5;
int nForsakerBonus = GetLevelByClass(CLASS_TYPE_FORSAKER, oPC)/2;
int nExaltedStrike;
int nTotalEnhancement;
int nSlot, nLevelCheck, nExaltedStrike, nTotalEnhancement;
//Enhancement bonus for unarmed damage and weapons; consider the bigger, Forsaker or VoP
if(nLevel>=10) nExaltedStrike = 1+(nLevel-7)/3;
@ -69,16 +66,24 @@ void main()
if(nEvent == FALSE)
{
//Check if level up bonus has already been chosen and given for any of past Forsaker levels
//Check if level up bonus has already been chosen and given for any of past VoP levels
for(nLevelCheck=1; nLevelCheck <= nLevel; nLevelCheck++)
{
{
//Call stat boost dialogue for level 7 and each 4 levels after that
if (!GetPersistantLocalInt(oPC, "VoPBoost"+IntToString(nLevelCheck)) && (nLevelCheck-(nLevelCheck/4)*4 == 3) && (nLevelCheck >= 7) && (nLevelCheck <= 27))
{
//Call stat boost dialogue for level 7 and each 4 levels after that
AssignCommand(oPC, ClearAllActions(TRUE));
SetPersistantLocalInt(oPC,"VoPBoostCheck",nLevelCheck);
StartDynamicConversation("ft_vowpoverty_ab", oPC, DYNCONV_EXIT_NOT_ALLOWED, FALSE, TRUE, oPC);
}
//Call exalted feat for each even level
if (!GetPersistantLocalInt(oPC, "VoPFeat"+IntToString(nLevelCheck)) && (nLevelCheck-(nLevelCheck/2)*2 == 0))
{
AssignCommand(oPC, ClearAllActions(TRUE));
SetPersistantLocalInt(oPC,"VoPFeatCheck",nLevelCheck);
StartDynamicConversation("ft_vowpoverty_ft", oPC, DYNCONV_EXIT_NOT_ALLOWED, FALSE, TRUE, oPC);
}
}
//AC Armor +4 on 1st, then +1 each 3 levels
@ -140,6 +145,23 @@ void main()
//Give player the bonus, regardless of the weapon
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oPC);
//Apply Golden Ice effect if unarmed and has feat
if(GetIsUnarmed(oPC) && (GetHasFeat(FEAT_RAVAGEGOLDENICE, oPC) || GetPersistantLocalInt(oPC, "VoPFeat"+IntToString(FEAT_RAVAGEGOLDENICE))))
{
itemproperty ip1 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE,2);
ip1 = TagItemProperty(ip1,"GoldenIce");
IPSafeAddItemProperty(oPC,ip1,0.0,X2_IP_ADDPROP_POLICY_REPLACE_EXISTING,FALSE,FALSE);
}
else
{
itemproperty eCheckIPL = GetFirstItemProperty(oPC);
while (GetIsItemPropertyValid(eCheckIPL))
{
if(GetItemPropertyTag(eCheckIPL) == "GoldenIce") RemoveItemProperty(oPC,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE,2));
eCheckIPL = GetNextItemProperty(oPC);
}
}
// For some reason, EVENT_ONPLAYEREQUIPITEM just works with weapons, so it is better to check all other items for magic elsewhere
for (nSlot=0; nSlot < 13; nSlot++) //All but creatures slots
{
@ -159,7 +181,7 @@ void main()
//Remove bonus from unequiped weapons
oItem = GetPCItemLastUnequipped();
if((IPGetIsMeleeWeapon(oItem) || GetWeaponRanged(oItem))) IPRemoveAllItemProperties(oItem, DURATION_TYPE_PERMANENT);
if(IPGetIsMeleeWeapon(oItem) || GetWeaponRanged(oItem)) IPRemoveAllItemProperties(oItem, DURATION_TYPE_PERMANENT);
AddEventScript(oPC, EVENT_SCRIPT_MODULE_ON_EQUIP_ITEM, "ft_vowofpoverty", TRUE, FALSE);
}
@ -184,9 +206,18 @@ void main()
|| GetBaseItemType(oItem) == BASE_ITEM_KATAR
|| GetBaseItemType(oItem) == BASE_ITEM_HEAVY_MACE
|| GetBaseItemType(oItem) == BASE_ITEM_BULLET;
if((IPGetIsMeleeWeapon(oItem) || GetWeaponRanged(oItem)) &&
(GetIsItemPropertyValid(GetFirstItemProperty(oItem)) || !iWeaponAllowed)) //Check if weapon is magical or not on allowed list
//Check if the magic is JUST Sanctify
int iMagic = 0;
itemproperty eCheckIP = GetFirstItemProperty(oItem);
while (GetIsItemPropertyValid(eCheckIP))
{
if(!(GetItemPropertyTag(eCheckIP) == "Sanctify1") && !(GetItemPropertyTag(eCheckIP) == "Sanctify2") && !(GetItemPropertyTag(eCheckIP) == "Sanctify3")
&& !(GetItemPropertyTag(eCheckIP) == "Sanctify4")) iMagic = 1;
eCheckIP = GetNextItemProperty(oItem);
}
if((IPGetIsMeleeWeapon(oItem) || GetWeaponRanged(oItem)) && (iMagic || !iWeaponAllowed)) //Check if weapon is magical or not on allowed list
{
if(!(GetBaseItemType(oItem) == BASE_ITEM_SLING && GetItemPropertyType(GetFirstItemProperty(oItem)) == ITEM_PROPERTY_MIGHTY)) //Allow Mighty Bonus on Slings
{

@ -296,7 +296,10 @@ void main()
//if(GetHasFeat(FEAT_LINGERING_DAMAGE, oPC)) ExecuteScript("ft_lingdmg", oPC);
//if(GetHasFeat(FEAT_MAGICAL_APTITUDE, oPC)) ExecuteScript("prc_magaptitude", oPC);
if(GetHasFeat(FEAT_ETERNAL_FREEDOM, oPC)) ExecuteScript("etern_free", oPC);
if(GetHasFeat(FEAT_INTUITIVE_ATTACK, oPC)) ExecuteScript("prc_intuiatk", oPC);
if(GetHasFeat(FEAT_INTUITIVE_ATTACK, oPC) || GetPersistantLocalInt(oPC, "VoPFeat"+IntToString(FEAT_INTUITIVE_ATTACK)))
{
ExecuteScript("prc_intuiatk", oPC);
}
//if(GetPersistantLocalInt(oPC, "EpicSpell_TransVital")) ExecuteScript("trans_vital", oPC);
//if(GetHasFeat(FEAT_COMBAT_MANIFESTATION, oPC)) ExecuteScript("psi_combat_manif", oPC);
//if(GetHasFeat(FEAT_WILD_TALENT, oPC)) ExecuteScript("psi_wild_talent", oPC);

@ -53,7 +53,23 @@ void main()
if (nClass >=2) ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectDamageReduction((nClass+1),(nClass/2)),oPC);
//Natural AC increase by CON starting on level 3
if (nClass >= 3) ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectACIncrease(GetAbilityModifier(ABILITY_CONSTITUTION, oPC), AC_NATURAL_BONUS), oPC);
if (nClass >= 3)
{
effect eEffect1 = EffectACIncrease(GetAbilityModifier(ABILITY_CONSTITUTION, oPC), AC_NATURAL_BONUS);
eEffect1 = ExtraordinaryEffect(eEffect1);
eEffect1 = TagEffect(eEffect1, "EffectToughDefense");
//Remove any prior bonus to avoid duplication
effect eCheckEffect = GetFirstEffect(oPC);
while (GetIsEffectValid(eCheckEffect))
{
if(GetEffectTag(eCheckEffect) == "EffectToughDefense") RemoveEffect(oPC, eCheckEffect);
eCheckEffect = GetNextEffect(oPC);
}
//Give player the bonus
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect1, oPC);
}
// For some reason, EVENT_ONPLAYEREQUIPITEM just works with weapons, so armors and shields should be checked elsewhere
if(!GetHasFeat(FEAT_VOWOFPOVERTY,oPC))
@ -93,8 +109,19 @@ void main()
else if((nEvent == EVENT_SCRIPT_MODULE_ON_EQUIP_ITEM) && (!GetHasFeat(FEAT_VOWOFPOVERTY,oPC)))
{
oItem = GetPCItemLastEquipped();
//Check if the magic is JUST Sanctify
int iMagic = 0;
itemproperty eCheckIP = GetFirstItemProperty(oItem);
while (GetIsItemPropertyValid(eCheckIP))
{
if(!(GetItemPropertyTag(eCheckIP) == "Sanctify1") && !(GetItemPropertyTag(eCheckIP) == "Sanctify2") && !(GetItemPropertyTag(eCheckIP) == "Sanctify3")
&& !(GetItemPropertyTag(eCheckIP) == "Sanctify4")) iMagic = 1;
eCheckIP = GetNextItemProperty(oItem);
}
//Check if weapons are magical
if(GetIsItemPropertyValid(GetFirstItemProperty(oItem)) && (IPGetIsMeleeWeapon(oItem) || GetWeaponRanged(oItem)) &&
if(iMagic && (IPGetIsMeleeWeapon(oItem) || GetWeaponRanged(oItem)) &&
!(GetBaseItemType(oItem) == BASE_ITEM_SLING && GetItemPropertyType(GetFirstItemProperty(oItem)) == ITEM_PROPERTY_MIGHTY))
//Check if weapon is magical or not on allowed list
{
@ -121,11 +148,4 @@ void main()
}
}
}
//Add AC bonus for rage
//else if(nEvent == EVENT_ONHEARTBEAT)
//{
// PostString(oPC, "Tum tum", 0, 0, SCREEN_ANCHOR_TOP_LEFT, 20.0, 0xFF0000FF, 0x00000000);
// if (nClass >= 3) ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectACIncrease(GetAbilityModifier(ABILITY_CONSTITUTION, oPC), AC_NATURAL_BONUS), oPC);
//}
}

@ -59,7 +59,7 @@ void main()
object oPC = OBJECT_SELF; // This should only be called via ExecuteScript on the target, so...
object oSkin = GetPCSkin(oPC);
if (GetHasFeat(FEAT_RAVAGEGOLDENICE, oPC))
if (GetHasFeat(FEAT_RAVAGEGOLDENICE, oPC) || GetPersistantLocalInt(oPC, "VoPFeat"+IntToString(FEAT_RAVAGEGOLDENICE)))
{
if(DEBUG) DoDebug("prc_intuiatk: PC has Ravage: Golden Ice");
int iEquip = GetLocalInt(oPC,"ONEQUIP") ;
@ -92,17 +92,20 @@ void main()
if (GetAlignmentGoodEvil(oPC)== ALIGNMENT_GOOD)
{
AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE,2),oCweapB);
AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE,2),oCweapL);
AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE,2),oCweapR);
itemproperty ip1 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE,2);
ip1 = TagItemProperty(ip1,"GoldenIce");
AddItemProperty(DURATION_TYPE_PERMANENT,ip1,oCweapB);
AddItemProperty(DURATION_TYPE_TEMPORARY,ip1,oCweapL);
AddItemProperty(DURATION_TYPE_TEMPORARY,ip1,oCweapR);
}
}
if(GetHasFeat(FEAT_INTUITIVE_ATTACK, oPC) || GetHasFeat(FEAT_WEAPON_FINESSE, oPC))
if(GetHasFeat(FEAT_INTUITIVE_ATTACK, oPC) || GetHasFeat(FEAT_WEAPON_FINESSE, oPC) || GetPersistantLocalInt(oPC, "VoPFeat"+IntToString(FEAT_INTUITIVE_ATTACK)))
{
if(DEBUG) DoDebug("prc_intuiatk: PC has Intuitive Attack or WepFinesse");
// shorthand - IA is intuitive attack and WF is weapon finesse
object oItem ;
int iEquip = GetLocalInt(oPC,"ONEQUIP") ;
@ -111,7 +114,7 @@ void main()
int iWis = GetAbilityModifier(ABILITY_WISDOM,oPC);
int iIABonus = 0;
int iWFBonus = 0;
int bHasIA = GetHasFeat(FEAT_INTUITIVE_ATTACK, oPC);
int bHasIA = GetHasFeat(FEAT_INTUITIVE_ATTACK, oPC) || GetPersistantLocalInt(oPC, "VoPFeat"+IntToString(FEAT_INTUITIVE_ATTACK));
int bHasWF = GetHasFeat(FEAT_WEAPON_FINESSE, oPC);
int bUseIA = FALSE;
int bUseWF = FALSE;

@ -26,7 +26,8 @@ void main()
object oCompSkin = GetPCSkin(oComp);
//Exalted Companion
if(GetHasFeat(FEAT_EXALTED_COMPANION, oPC) && GetAlignmentGoodEvil(oPC) == ALIGNMENT_GOOD)
if((GetHasFeat(FEAT_EXALTED_COMPANION, oPC) || GetPersistantLocalInt(oPC, "VoPFeat"+IntToString(FEAT_EXALTED_COMPANION)))
&& GetAlignmentGoodEvil(oPC) == ALIGNMENT_GOOD)
ApplyExaltedCompanion(oComp, oCompSkin);
//Talontar Blightlord's Illmaster

@ -24,7 +24,8 @@ void main()
object oCompSkin = GetPCSkin(oComp);
//Exalted Companion
if(GetHasFeat(FEAT_EXALTED_COMPANION, oPC) && GetAlignmentGoodEvil(oPC) == ALIGNMENT_GOOD)
if((GetHasFeat(FEAT_EXALTED_COMPANION, oPC) || GetPersistantLocalInt(oPC, "VoPFeat"+IntToString(FEAT_EXALTED_COMPANION)))
&& GetAlignmentGoodEvil(oPC) == ALIGNMENT_GOOD)
ApplyExaltedCompanion(oComp, oCompSkin);
//Talontar Blightlord's Illmaster

@ -252,7 +252,7 @@ void main()
// Only works on undead
if(nAlign == ALIGNMENT_GOOD
&& nTargetRace == RACIAL_TYPE_UNDEAD
&& GetHasFeat(FEAT_EXALTED_TURNING))
&& (GetHasFeat(FEAT_EXALTED_TURNING)) || GetPersistantLocalInt(OBJECT_SELF, "VoPFeat"+IntToString(FEAT_EXALTED_TURNING)))
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(3), DAMAGE_TYPE_DIVINE), oTest);
}

Binary file not shown.

@ -73238,6 +73238,12 @@ Level
- No Sacred Vow as requirement (so a Level 1 from any race can get it and to partially offset the lack of Bonus exalted feat)
- The level progression continues the same during the Epic Levels
</entry>
<entry id="213094" lang="en" sex="m">Daring Warrior</entry>
<entry id="213095" lang="en" sex="m">Type of Feat: General
Prerequisite: Weapon Specialization, Grace +1
Specifics: Your fighter and swashbuckler levels stack for the purpose of determining your competence bonus on Reflex saves from the grace class feature and the swashbuckler's dodge bonus to AC. For example, a 6th-level fighter/5th-level swashbuckler has grace +2 and gains a +2 dodge bonus to AC, as if she were an 11th-level swashbuckler.
Use: Automatic
Special: A fighter can select Daring Warrior as one of his fighter bonus feats</entry>
<entry id="213096" lang="en" sex="m">Charming the Arrow</entry>
<entry id="213097" lang="en" sex="m">Type of Feat: General
Prerequisite: Fey
@ -73438,4 +73444,4 @@ Tortoise shell slows a creature's movement as if it were wearing heavy armor. An
<entry id="213316" lang="en" sex="m">Tortoise Shell (12)</entry>
<entry id="213317" lang="en" sex="m">Tortoise Shell (15)</entry>
<entry id="213318" lang="en" sex="m">Tortoise Shell (18)</entry>
</tlk>
</tlk>

Binary file not shown.