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:
parent
9b5c7a6655
commit
88ed27dd37
Release
_backup
nwn/nwnprc/trunk
2das
DevNotes
race2das
scripts
ft_sanctmartial.nssft_vowofpoverty.nssprc_feats.nssprc_forsaker.nssprc_intuiatk.nssprc_shaman_ancp.nss
spells
tlk
BIN
Release/PRC8_20250121.7z
Normal file
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.
Loading…
x
Reference in New Issue
Block a user