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

File diff suppressed because it is too large Load Diff

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

@ -59,12 +59,21 @@ void Sanctify()
} }
if(!Sanctify_Feat_Wrapper(iType, oPC, oItem)) return; 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); itemproperty ip1 = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1);
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4),oItem,9999.0); ip1 = TagItemProperty(ip1,"Sanctify1");
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4),oItem,9999.0); AddItemProperty(DURATION_TYPE_TEMPORARY,ip1,oItem,9999.0);
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyVisualEffect(ITEM_VISUAL_HOLY),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); SetLocalInt(oItem,"SanctMar",1);
} }
else if (iEquip==1) else if (iEquip==1)
{ {
@ -173,22 +182,38 @@ void Sanctify()
if(Sanctify_Feat_Wrapper(iType, oPC, oItem) && (!GetLocalInt(oItem,"SanctMar"))) 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); itemproperty ip1 = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1);
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4),oItem,9999.0); ip1 = TagItemProperty(ip1,"Sanctify1");
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4),oItem,9999.0); AddItemProperty(DURATION_TYPE_TEMPORARY,ip1,oItem,9999.0);
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyVisualEffect(ITEM_VISUAL_HOLY),oItem,9999.0); itemproperty ip2 = ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4);
SetLocalInt(oItem,"SanctMar",1); 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); oItem=GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC);
iType= GetBaseItemType(oItem); iType= GetBaseItemType(oItem);
if(Sanctify_Feat_Wrapper(iType, oPC, oItem) && (!GetLocalInt(oItem,"SanctMar"))) 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); itemproperty ip1 = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1);
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4),oItem,9999.0); ip1 = TagItemProperty(ip1,"Sanctify1");
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4),oItem,9999.0); AddItemProperty(DURATION_TYPE_TEMPORARY,ip1,oItem,9999.0);
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyVisualEffect(ITEM_VISUAL_HOLY),oItem,9999.0); itemproperty ip2 = ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1d4);
SetLocalInt(oItem,"SanctMar",1); 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 "nw_i0_spells"
#include "inc_persist_loca" #include "inc_persist_loca"
effect VoPDamage(int nTotalEnhancement) //Just for unarmed, so just bludgeoning effect VoPDamage(int nTotalEnhancement)
{ {
effect eDamage; effect eDamage;
if (nTotalEnhancement>=15) eDamage = EffectDamageIncrease(DAMAGE_BONUS_15,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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); else if (nTotalEnhancement>=1) eDamage = EffectDamageIncrease(DAMAGE_BONUS_1,DAMAGE_TYPE_BLUDGEONING || DAMAGE_TYPE_SLASHING || DAMAGE_TYPE_PIERCING);
return eDamage; return eDamage;
} }
@ -45,10 +45,8 @@ void main()
object oArmor; object oArmor;
object oShield; object oShield;
object oSkin = GetPCSkin(oPC); object oSkin = GetPCSkin(oPC);
int nSlot;
int nEvent = GetCurrentlyRunningEvent(); int nEvent = GetCurrentlyRunningEvent();
int nLevel = GetCharacterLevel(oPC)-GetPersistantLocalInt(oPC,"VoPLevel1")+1; int nLevel = GetCharacterLevel(oPC)-GetPersistantLocalInt(oPC,"VoPLevel1")+1;
int nLevelCheck;
int nACArmor = 4+nLevel/3; int nACArmor = 4+nLevel/3;
int nACDeflection = nLevel/6; int nACDeflection = nLevel/6;
int nACNatural = nLevel/8; int nACNatural = nLevel/8;
@ -56,8 +54,7 @@ void main()
int nDR = 5*(1+(nLevel-10)/9); int nDR = 5*(1+(nLevel-10)/9);
int nER = (10*(1+(nLevel-13)/7))-5; int nER = (10*(1+(nLevel-13)/7))-5;
int nForsakerBonus = GetLevelByClass(CLASS_TYPE_FORSAKER, oPC)/2; int nForsakerBonus = GetLevelByClass(CLASS_TYPE_FORSAKER, oPC)/2;
int nExaltedStrike; int nSlot, nLevelCheck, nExaltedStrike, nTotalEnhancement;
int nTotalEnhancement;
//Enhancement bonus for unarmed damage and weapons; consider the bigger, Forsaker or VoP //Enhancement bonus for unarmed damage and weapons; consider the bigger, Forsaker or VoP
if(nLevel>=10) nExaltedStrike = 1+(nLevel-7)/3; if(nLevel>=10) nExaltedStrike = 1+(nLevel-7)/3;
@ -69,16 +66,24 @@ void main()
if(nEvent == FALSE) 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++) 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)) 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)); AssignCommand(oPC, ClearAllActions(TRUE));
SetPersistantLocalInt(oPC,"VoPBoostCheck",nLevelCheck); SetPersistantLocalInt(oPC,"VoPBoostCheck",nLevelCheck);
StartDynamicConversation("ft_vowpoverty_ab", oPC, DYNCONV_EXIT_NOT_ALLOWED, FALSE, TRUE, oPC); 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 //AC Armor +4 on 1st, then +1 each 3 levels
@ -140,6 +145,23 @@ void main()
//Give player the bonus, regardless of the weapon //Give player the bonus, regardless of the weapon
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oPC); 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 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 for (nSlot=0; nSlot < 13; nSlot++) //All but creatures slots
{ {
@ -159,7 +181,7 @@ void main()
//Remove bonus from unequiped weapons //Remove bonus from unequiped weapons
oItem = GetPCItemLastUnequipped(); 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); 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_KATAR
|| GetBaseItemType(oItem) == BASE_ITEM_HEAVY_MACE || GetBaseItemType(oItem) == BASE_ITEM_HEAVY_MACE
|| GetBaseItemType(oItem) == BASE_ITEM_BULLET; || GetBaseItemType(oItem) == BASE_ITEM_BULLET;
if((IPGetIsMeleeWeapon(oItem) || GetWeaponRanged(oItem)) && //Check if the magic is JUST Sanctify
(GetIsItemPropertyValid(GetFirstItemProperty(oItem)) || !iWeaponAllowed)) //Check if weapon is magical or not on allowed list 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 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_LINGERING_DAMAGE, oPC)) ExecuteScript("ft_lingdmg", oPC);
//if(GetHasFeat(FEAT_MAGICAL_APTITUDE, oPC)) ExecuteScript("prc_magaptitude", oPC); //if(GetHasFeat(FEAT_MAGICAL_APTITUDE, oPC)) ExecuteScript("prc_magaptitude", oPC);
if(GetHasFeat(FEAT_ETERNAL_FREEDOM, oPC)) ExecuteScript("etern_free", 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(GetPersistantLocalInt(oPC, "EpicSpell_TransVital")) ExecuteScript("trans_vital", oPC);
//if(GetHasFeat(FEAT_COMBAT_MANIFESTATION, oPC)) ExecuteScript("psi_combat_manif", oPC); //if(GetHasFeat(FEAT_COMBAT_MANIFESTATION, oPC)) ExecuteScript("psi_combat_manif", oPC);
//if(GetHasFeat(FEAT_WILD_TALENT, oPC)) ExecuteScript("psi_wild_talent", 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); if (nClass >=2) ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectDamageReduction((nClass+1),(nClass/2)),oPC);
//Natural AC increase by CON starting on level 3 //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 // For some reason, EVENT_ONPLAYEREQUIPITEM just works with weapons, so armors and shields should be checked elsewhere
if(!GetHasFeat(FEAT_VOWOFPOVERTY,oPC)) if(!GetHasFeat(FEAT_VOWOFPOVERTY,oPC))
@ -93,8 +109,19 @@ void main()
else if((nEvent == EVENT_SCRIPT_MODULE_ON_EQUIP_ITEM) && (!GetHasFeat(FEAT_VOWOFPOVERTY,oPC))) else if((nEvent == EVENT_SCRIPT_MODULE_ON_EQUIP_ITEM) && (!GetHasFeat(FEAT_VOWOFPOVERTY,oPC)))
{ {
oItem = GetPCItemLastEquipped(); 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 //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)) !(GetBaseItemType(oItem) == BASE_ITEM_SLING && GetItemPropertyType(GetFirstItemProperty(oItem)) == ITEM_PROPERTY_MIGHTY))
//Check if weapon is magical or not on allowed list //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 oPC = OBJECT_SELF; // This should only be called via ExecuteScript on the target, so...
object oSkin = GetPCSkin(oPC); 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"); if(DEBUG) DoDebug("prc_intuiatk: PC has Ravage: Golden Ice");
int iEquip = GetLocalInt(oPC,"ONEQUIP") ; int iEquip = GetLocalInt(oPC,"ONEQUIP") ;
@ -92,17 +92,20 @@ void main()
if (GetAlignmentGoodEvil(oPC)== ALIGNMENT_GOOD) if (GetAlignmentGoodEvil(oPC)== ALIGNMENT_GOOD)
{ {
AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE,2),oCweapB); itemproperty ip1 = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE,2);
AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE,2),oCweapL); ip1 = TagItemProperty(ip1,"GoldenIce");
AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_RAVAGEGOLDENICE,2),oCweapR); 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"); if(DEBUG) DoDebug("prc_intuiatk: PC has Intuitive Attack or WepFinesse");
// shorthand - IA is intuitive attack and WF is weapon finesse // shorthand - IA is intuitive attack and WF is weapon finesse
object oItem ; object oItem ;
int iEquip = GetLocalInt(oPC,"ONEQUIP") ; int iEquip = GetLocalInt(oPC,"ONEQUIP") ;
@ -111,7 +114,7 @@ void main()
int iWis = GetAbilityModifier(ABILITY_WISDOM,oPC); int iWis = GetAbilityModifier(ABILITY_WISDOM,oPC);
int iIABonus = 0; int iIABonus = 0;
int iWFBonus = 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 bHasWF = GetHasFeat(FEAT_WEAPON_FINESSE, oPC);
int bUseIA = FALSE; int bUseIA = FALSE;
int bUseWF = FALSE; int bUseWF = FALSE;

@ -26,7 +26,8 @@ void main()
object oCompSkin = GetPCSkin(oComp); object oCompSkin = GetPCSkin(oComp);
//Exalted Companion //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); ApplyExaltedCompanion(oComp, oCompSkin);
//Talontar Blightlord's Illmaster //Talontar Blightlord's Illmaster

@ -24,7 +24,8 @@ void main()
object oCompSkin = GetPCSkin(oComp); object oCompSkin = GetPCSkin(oComp);
//Exalted Companion //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); ApplyExaltedCompanion(oComp, oCompSkin);
//Talontar Blightlord's Illmaster //Talontar Blightlord's Illmaster

@ -252,7 +252,7 @@ void main()
// Only works on undead // Only works on undead
if(nAlign == ALIGNMENT_GOOD if(nAlign == ALIGNMENT_GOOD
&& nTargetRace == RACIAL_TYPE_UNDEAD && 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); 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) - 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 - The level progression continues the same during the Epic Levels
</entry> </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="213096" lang="en" sex="m">Charming the Arrow</entry>
<entry id="213097" lang="en" sex="m">Type of Feat: General <entry id="213097" lang="en" sex="m">Type of Feat: General
Prerequisite: Fey 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="213316" lang="en" sex="m">Tortoise Shell (12)</entry>
<entry id="213317" lang="en" sex="m">Tortoise Shell (15)</entry> <entry id="213317" lang="en" sex="m">Tortoise Shell (15)</entry>
<entry id="213318" lang="en" sex="m">Tortoise Shell (18)</entry> <entry id="213318" lang="en" sex="m">Tortoise Shell (18)</entry>
</tlk> </tlk>

Binary file not shown.