diff --git a/PRC8_ChangeLog.txt b/PRC8_ChangeLog.txt index f5e97b2e..2cddaf11 100644 --- a/PRC8_ChangeLog.txt +++ b/PRC8_ChangeLog.txt @@ -1,3 +1,23 @@ +Commit: Jaysyn904 +Date: Thur May 28 + +Updated damagtypes.2da for CEP3 reserved rows. +Added and setup Darkvision icon. +Added and setup Ultravision icon. +Added spell icon for Thicket of Blades. +Fixed Blacklight, Cloud of the Archeai, Darkness, Deeper Darkness, Damning Darkness, Utterdark, Grasping Shadows, Dawn and Dusk and Child of Shadow and Light for Telflammar Shadowlord's Shadow Blur and Shadow Sight abilities. +Updated Blacklight's TLK entry. +Created a constant for Shadow Discorporation. +Fixed Shadow Time never ending on the targets. +Updated prc_inc_combat to use monk iterative progression if warranted. +Updated PRCGetIsRealSpellKnownByClass() to handle Sublime Chord better. (@Lightbeard) +Added class heartbeat script for Shadowlord to handle Shadow Blur and Shadow Sight. +Added ShadowlordEffects() to prc_inc_spells. +Added constants for new damagetypes. +Completely rewrote Verminlord's Vermin Domination. +Fixed duration for Empathic Feedback. +Fixed Morality Undone to not break characters over a server reset. + Commit: Jaysyn904 Date: Weds May 27 diff --git a/nwn/nwnprc/trunk/2das/damagehitvisual.2da b/nwn/nwnprc/trunk/2das/damagehitvisual.2da index 6ee3010e..15a3d0a6 100644 --- a/nwn/nwnprc/trunk/2das/damagehitvisual.2da +++ b/nwn/nwnprc/trunk/2das/damagehitvisual.2da @@ -23,3 +23,9 @@ 19 Force 282 **** 20 Untyped 288 **** 21 Vile 84 **** +22 Sanctified 289 **** +23 Holy 289 **** +24 Unholy 288 **** +25 Falling **** **** +26 Ballistic **** **** +27 Dessication 84 **** diff --git a/nwn/nwnprc/trunk/2das/damagetypegroups.2da b/nwn/nwnprc/trunk/2das/damagetypegroups.2da index c12704c6..032816cf 100644 --- a/nwn/nwnprc/trunk/2das/damagetypegroups.2da +++ b/nwn/nwnprc/trunk/2das/damagetypegroups.2da @@ -1,22 +1,28 @@ 2DA V2.0 - Label FeedbackStrref ColorR ColorG ColorB -0 Physical 5594 **** **** **** -1 Magical 5593 204 119 255 -2 Acid 10458 0 102 0 -3 Cold 10459 153 255 255 -4 Divine 10460 255 255 0 -5 Electrical 10461 0 102 255 -6 Fire 10462 235 141 0 -7 Negative 10463 110 3 3 -8 Positive 10464 176 4 159 -9 Sonic 10465 120 120 120 -10 **** **** **** **** **** -11 Poison 16820375 64 255 54 -12 **** **** **** **** **** -13 Psychic 16820377 133 14 135 -14 **** **** **** **** **** -15 Radiant 16820379 227 191 9 -16 Force 16820380 15 209 183 -17 Untyped 16820354 250 250 250 -18 Vile 16820357 185 32 38 + Label FeedbackStrref ColorR ColorG ColorB +0 Physical 5594 **** **** **** +1 Magical 5593 204 119 255 +2 Acid 10458 0 102 0 +3 Cold 10459 153 255 255 +4 Divine 10460 255 255 0 +5 Electrical 10461 0 102 255 +6 Fire 10462 235 141 0 +7 Negative 10463 110 3 3 +8 Positive 10464 176 4 159 +9 Sonic 10465 120 120 120 +10 CEP3_RESERVED **** **** **** **** +11 Poison 16820375 64 255 54 +12 CEP3_RESERVED **** **** **** **** +13 Psychic 16820377 133 14 135 +14 CEP3_RESERVED **** **** **** **** +15 Radiant 16820379 227 191 9 +16 Force 16820380 95 158 160 +17 Untyped 16820354 250 250 250 +18 Vile 16820357 185 32 38 +19 Sanctified 16820336 255 215 0 +20 Holy 16820339 250 250 210 +21 Unholy 16820342 128 0 128 +22 Falling 16820345 122 0 0 +23 Ballistic 16820348 128 128 128 +24 Dessication 16820351 139 69 19 diff --git a/nwn/nwnprc/trunk/2das/damagetypes.2da b/nwn/nwnprc/trunk/2das/damagetypes.2da index 25b29934..9eff8bdc 100644 --- a/nwn/nwnprc/trunk/2das/damagetypes.2da +++ b/nwn/nwnprc/trunk/2das/damagetypes.2da @@ -1,26 +1,31 @@ 2DA V2.0 - Label CharsheetStrref DamageTypeGroup -0 Bludgeoning 58345 0 -1 Piercing 58341 0 -2 Slashing 58344 0 -3 Magical 58302 1 -4 Acid 58303 2 -5 Cold 58304 3 -6 Divine 58305 4 -7 Electrical 58306 5 -8 Fire 58308 6 -9 Negative 58309 7 -10 Positive 58310 8 -11 Sonic 58311 9 -12 Base 58301 0 -13 CEP3_RESERVED **** **** -14 Poison 16820368 11 -15 CEP3_RESERVED **** **** -16 Psychic 16820370 13 -17 CEP3_RESERVED **** **** -18 Radiant 16820372 15 -19 Force 16820373 16 -20 Untyped 16820355 17 -21 Vile 16820358 18 -22 **** **** **** + Label CharsheetStrref DamageTypeGroup +0 Bludgeoning 58345 0 +1 Piercing 58341 0 +2 Slashing 58344 0 +3 Magical 58302 1 +4 Acid 58303 2 +5 Cold 58304 3 +6 Divine 58305 4 +7 Electrical 58306 5 +8 Fire 58308 6 +9 Negative 58309 7 +10 Positive 58310 8 +11 Sonic 58311 9 +12 Base 58301 0 +13 CEP3_RESERVED **** **** +14 Poison 16820368 11 +15 CEP3_RESERVED **** **** +16 Psychic 16820370 13 +17 CEP3_RESERVED **** **** +18 Radiant 16820372 15 +19 Force 16820373 16 +20 Untyped 16820355 17 +21 Vile 16820358 18 +22 Sanctified 16820337 19 +23 Holy 16820340 20 +24 Unholy 16820343 21 +25 Falling 16820346 22 +26 Ballistic 16820349 23 +27 Dessication 16820352 24 diff --git a/nwn/nwnprc/trunk/2das/des_crft_scroll.2da b/nwn/nwnprc/trunk/2das/des_crft_scroll.2da index 0451e507..203f8129 100644 --- a/nwn/nwnprc/trunk/2das/des_crft_scroll.2da +++ b/nwn/nwnprc/trunk/2das/des_crft_scroll.2da @@ -2248,7 +2248,7 @@ 2244 Dragon_Breath_Prismatic **** **** **** **** **** **** 2245 ManyShot **** **** **** **** **** **** 2246 ManyShot2 **** **** **** **** **** **** -2247 Magic_Missile prc_scr_1127 **** **** **** **** **** +2247 Major_Missile prc_scr_1127 **** **** **** **** **** 2248 ManyShot4 **** **** **** **** **** **** 2249 ManyShot6 **** **** **** **** **** **** 2250 Examine_Recipe **** **** **** **** **** **** diff --git a/nwn/nwnprc/trunk/2das/des_crft_spells.2da b/nwn/nwnprc/trunk/2das/des_crft_spells.2da index a8272c4d..4aefbda5 100644 --- a/nwn/nwnprc/trunk/2das/des_crft_spells.2da +++ b/nwn/nwnprc/trunk/2das/des_crft_spells.2da @@ -2248,7 +2248,7 @@ 2244 Dragon_Breath_Prismatic **** 1 1 1 9 0 2245 ManyShot **** 1 1 1 1 0 2246 ManyShot2 **** 1 1 1 1 0 -2247 Magic_Missile 1127 1 1 0 5 0 +2247 Major_Missile 1127 1 1 0 5 0 2248 ManyShot4 **** 1 1 1 1 0 2249 ManyShot6 **** 1 1 1 1 0 2250 Examine_Recipe **** 1 1 1 1 0 diff --git a/nwn/nwnprc/trunk/2das/iprp_damagetype.2da b/nwn/nwnprc/trunk/2das/iprp_damagetype.2da index d974c1b5..04c2e5ac 100644 --- a/nwn/nwnprc/trunk/2das/iprp_damagetype.2da +++ b/nwn/nwnprc/trunk/2das/iprp_damagetype.2da @@ -25,3 +25,9 @@ 21 16820366 Force 0.55 28 22 16820354 Untyped 0.55 8 23 16820357 Vile 0.55 9 +24 16820336 Sanctified 0.55 5 +25 16820339 Holy 0.55 5 +26 16820342 Unholy 0.55 9 +27 16820345 Falling 0.55 **** +28 16820348 Ballistic 0.55 **** +29 16820351 Dessication 0.55 6 diff --git a/nwn/nwnprc/trunk/2das/spells.2da b/nwn/nwnprc/trunk/2das/spells.2da index ea297a9d..7fc12773 100644 --- a/nwn/nwnprc/trunk/2das/spells.2da +++ b/nwn/nwnprc/trunk/2das/spells.2da @@ -2248,7 +2248,7 @@ 2244 Dragon_Breath_Prismatic 84513 is_PrisSpray V S vs 0x00 0x3e inidra_dragpris **** **** **** **** **** **** 9 2000 head **** **** **** **** **** **** out 3000 **** var_conepris **** sar_conepris 0 **** **** **** **** **** Mind-Affecting 1 **** **** **** **** **** 11 **** 2 84515 1 0 84514 1 **** **** **** 1 cone 20 **** 19 **** **** **** **** **** **** **** **** **** **** **** **** **** **** 2245 ManyShot 16826084 **** V S 0 0x00 0x3a ft_manyshot **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** attack 1000 **** **** **** **** 1 wamar_001 ballistic hand **** path **** 0 2246 2248 2249 **** **** 2 **** 3 16826085 0 0 **** 1 3306 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 2246 ManyShot2 16826013 ife_wepspec_Lbw V S 0 0x00 0x3e ft_manyshot **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** attack 0 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** **** 2245 3 **** 0 0 **** 1 525208810 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** -2247 Magic_Missile 16826070 is_MagMiss V L vs 0x3d 0x3A sp_mjmagmiss **** **** **** **** **** 5 5 1500 hand **** vco_mehancold03 **** sco_mehancold03 vs_chant_evoc_lm vs_chant_evoc_lf out 1000 **** vca_outsonic **** sca_outsonic 0 **** **** **** **** path **** 1 **** **** **** **** **** 2 **** 1 16826071 1 0 **** 1 **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +2247 Major_Missile 16826070 is_MagMiss V L vs 0x3d 0x3A sp_mjmagmiss **** **** **** **** **** 5 5 1500 hand **** vco_mehancold03 **** sco_mehancold03 vs_chant_evoc_lm vs_chant_evoc_lf out 1000 **** vca_outsonic **** sca_outsonic 0 **** **** **** **** path **** 1 **** **** **** **** **** 2 **** 1 16826071 1 0 **** 1 **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 2248 ManyShot4 16826014 ife_wepspec_Lbw V S 0 0x00 0x3e ft_manyshot **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** attack 0 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** **** 2245 3 **** 0 0 **** 1 525274346 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 2249 ManyShot6 16826015 ife_wepspec_Lbw V S 0 0x00 0x3e ft_manyshot **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** attack 0 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** **** 2245 3 **** 0 0 **** 1 525339882 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 2250 Examine_Recipe 16824431 is_divine G P vs 0x3a 0x08 prccraft_read **** **** **** **** **** **** 1 1500 hand **** **** **** **** **** **** out 0 **** **** **** **** 0 **** **** **** **** **** **** 0 2254 2255 **** **** **** **** **** 4 16824432 1 0 **** 0 **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** @@ -19342,7 +19342,7 @@ 19338 RethDekala_RecoverManeuver 16790298 ife_mastelem T P 0 **** 0x01 tob_gen_recover **** **** **** **** **** **** 9 0 head **** vco_smhanevil01 **** sco_mehannatr01 vs_chant_ench_lm vs_chant_ench_lf self 0 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 10 **** 3 **** 0 0 **** 0 **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 19339 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 19340 Shadow_Conjuration_Conversation 16790387 is_ShadConj I P s **** 0x01 shdconj_convrun **** **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 24732 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** -19341 PNP_SHADES 908 is_Shades I S vs 0x00 0x2F **** **** **** **** **** **** 9 9 **** **** **** **** **** **** vs_chant_illu_hm vs_chant_illu_hf **** **** **** **** **** **** **** **** **** **** **** **** **** 0 19342 19343 19344 19345 19346 **** **** 4 6251 1 0 **** 1 24733 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** +19341 PNP_SHADES 908 is_Shades I S vs 0x00 0x2F **** **** **** **** **** **** **** 9 **** **** **** **** **** **** vs_chant_illu_hm vs_chant_illu_hf **** **** **** **** **** **** **** **** **** **** **** **** **** 0 19342 19343 19344 19345 19346 **** **** 4 6251 1 0 **** 1 24733 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 19342 PNP_SHADES_QS1 16790382 is_Shades I S s **** 0x3F prc_shdconj_quik **** **** **** **** **** **** 9 1500 **** **** **** **** **** vs_chant_illu_hm vs_chant_illu_hf **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 11 19341 1 **** 1 0 **** 1 436887709 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 19343 PNP_SHADES_QS2 16790383 is_Shades I S s **** 0x3F prc_shdconj_quik **** **** **** **** **** **** 9 1500 **** **** **** **** **** vs_chant_illu_hm vs_chant_illu_hf **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 11 19341 1 **** 1 0 **** 1 436953245 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 19344 PNP_SHADES_QS3 16790384 is_Shades I S s **** 0x3F prc_shdconj_quik **** **** **** **** **** **** 9 1500 **** **** **** **** **** vs_chant_illu_hm vs_chant_illu_hf **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 11 19341 1 **** 1 0 **** 1 437018781 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** diff --git a/nwn/nwnprc/trunk/include/bnd_inc_bndfunc.nss b/nwn/nwnprc/trunk/include/bnd_inc_bndfunc.nss index ec533de0..0fce7ed3 100644 --- a/nwn/nwnprc/trunk/include/bnd_inc_bndfunc.nss +++ b/nwn/nwnprc/trunk/include/bnd_inc_bndfunc.nss @@ -362,6 +362,17 @@ string GetBindingClassFile(int nClass) void ApplyVestige(object oBinder, int nVestige) { + //:: Remove Astaroth's crafting feat to allow leveling up. + effect eOld = GetFirstEffect(oBinder); + while (GetIsEffectValid(eOld)) + { + if (GetEffectTag(eOld) == "AstarothCraftingFeat") + { + RemoveEffect(oBinder, eOld); + } + eOld = GetNextEffect(oBinder); + } + PRCRemoveSpellEffects(nVestige, oBinder, oBinder); GZPRCRemoveSpellEffects(nVestige, oBinder, FALSE); ActionCastSpellOnSelf(nVestige, METAMAGIC_NONE, oBinder); @@ -393,7 +404,18 @@ void ApplyVestige(object oBinder, int nVestige) void ExpelVestige(object oBinder, int nVestige) { - SetPersistantLocalInt(oBinder, "ExpelledVestige", TRUE); + //:: Remove Astaroth's crafting feat to allow leveling up. + effect eOld = GetFirstEffect(oBinder); + while (GetIsEffectValid(eOld)) + { + if (GetEffectTag(eOld) == "AstarothCraftingFeat") + { + RemoveEffect(oBinder, eOld); + } + eOld = GetNextEffect(oBinder); + } + + SetPersistantLocalInt(oBinder, "ExpelledVestige", TRUE); SetPersistantLocalInt(oBinder, "ExpelledVestige"+IntToString(nVestige), TRUE); // Here, making a good pack means we can unbind it if (GetLocalInt(oBinder, "PactQuality"+IntToString(nVestige))) @@ -965,4 +987,6 @@ int GetPatronVestige(object oBinder) else if (GetHasFeat(FEAT_PATRON_VESTIGE_ABYSM , oBinder)) nPatron = VESTIGE_ABYSM; return nPatron; -} \ No newline at end of file +} + +//:: void main(){} diff --git a/nwn/nwnprc/trunk/include/inv_inc_invfunc.nss b/nwn/nwnprc/trunk/include/inv_inc_invfunc.nss index ba509358..57f18801 100644 --- a/nwn/nwnprc/trunk/include/inv_inc_invfunc.nss +++ b/nwn/nwnprc/trunk/include/inv_inc_invfunc.nss @@ -465,7 +465,7 @@ int GetInvokerLevel(object oInvoker = OBJECT_SELF, int nSpecificClass = CLASS_TY if(nLevel) { if(DEBUG) SendMessageToPC(oInvoker, "Forced-level Invoking at level " + IntToString(GetCasterLevel(oInvoker))); - //DelayCommand(1.0, DeleteLocalInt(oInvoker, PRC_CASTERLEVEL_OVERRIDE)); + DelayCommand(1.0, DeleteLocalInt(oInvoker, PRC_CASTERLEVEL_OVERRIDE)); return nLevel + nAdjust; } diff --git a/nwn/nwnprc/trunk/include/prc_inc_spells.nss b/nwn/nwnprc/trunk/include/prc_inc_spells.nss index 37278892..fa632dfa 100644 --- a/nwn/nwnprc/trunk/include/prc_inc_spells.nss +++ b/nwn/nwnprc/trunk/include/prc_inc_spells.nss @@ -2671,7 +2671,7 @@ void DoPiercingCold(object oCaster, object oTarget, int nDamageAmount, int nCurr if (nDamageAmount > nTest) { // Apply the difference to ignore resist - effect eDam = EffectDamage(nDamageAmount - nTest, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_ENERGY); + effect eDam = EffectDamage(nDamageAmount - nTest, DAMAGE_TYPE_UNTYPED, DAMAGE_POWER_ENERGY); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); effect eVis = EffectVisualEffect(VFX_IMP_FROST_L); ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); @@ -2786,13 +2786,13 @@ effect PRCEffectDamage(object oTarget, int nDamageAmount, int nDamageType=DAMAGE { int nDice = (iDiabolistLevel + 5) / 5; int nDamage = d6(nDice); - int nDamageType = DAMAGE_TYPE_DIVINE; + int nDamageType = DAMAGE_TYPE_UNHOLY; if(GetLocalInt(oCaster, "VileDiabolism")) { //FloatingTextStringOnCreature("Vile Diabolism is active", oCaster, FALSE); nDamage /= 2; - nDamageType = DAMAGE_TYPE_POSITIVE; + nDamageType = DAMAGE_TYPE_VILE; DeleteLocalInt(oCaster, "VileDiabolism"); } diff --git a/nwn/nwnprc/trunk/include/prc_ipfeat_const.nss b/nwn/nwnprc/trunk/include/prc_ipfeat_const.nss index 1f644d36..16ccc697 100644 --- a/nwn/nwnprc/trunk/include/prc_ipfeat_const.nss +++ b/nwn/nwnprc/trunk/include/prc_ipfeat_const.nss @@ -900,14 +900,16 @@ const int IP_CONST_ONHIT_SAVEDC_70 = 70; // Creature Epic Criticals const int IP_CONST_FEAT_DEVCRITICAL_CREATURE = 271; const int IP_CONST_FEAT_OVERCRITICAL_CREATURE = 272; -//const int IP_CONST_FEAT_WEAPON_PROF_CREATURE = 38; // provided by Bioware in 1.66 // Epic DR const int IP_CONST_FEAT_EPIC_DR_3 = 273; const int IP_CONST_FEAT_EPIC_DR_6 = 274; const int IP_CONST_FEAT_EPIC_DR_9 = 275; -//IP_CONST_DAMAGETYPE +//::////////////////////////////////////////////// +//:: New damage types (iprp_damagetype.2da) +//::////////////////////////////////////////////// + //const int IP_CONST_DAMAGETYPE_BLOOD = 15; //:: Not a 3e PnP damage type const int IP_CONST_DAMAGETYPE_POISON = 16; //const int IP_CONST_DAMAGETYPE_SHADOW = 17; //:: Not a 3e PnP damage type @@ -917,6 +919,12 @@ const int IP_CONST_DAMAGETYPE_RADIANT = 20; const int IP_CONST_DAMAGETYPE_FORCE = 21; const int IP_CONST_DAMAGETYPE_UNTYPED = 22; const int IP_CONST_DAMAGETYPE_VILE = 23; +const int IP_CONST_DAMAGETYPE_SANCTIFIED = 24; +const int IP_CONST_DAMAGETYPE_HOLY = 25; +const int IP_CONST_DAMAGETYPE_UNHOLY = 26; +const int IP_CONST_DAMAGETYPE_FALLING = 27; +const int IP_CONST_DAMAGETYPE_BALLISTIC = 28; +const int IP_CONST_DAMAGETYPE_DESSICATION = 29; //IP_CONST_DAMAGESOAK const int IP_CONST_DAMAGESOAK_1_HP = 11; diff --git a/nwn/nwnprc/trunk/include/prc_misc_const.nss b/nwn/nwnprc/trunk/include/prc_misc_const.nss index 055f30d5..548b5759 100644 --- a/nwn/nwnprc/trunk/include/prc_misc_const.nss +++ b/nwn/nwnprc/trunk/include/prc_misc_const.nss @@ -13,12 +13,18 @@ const int EFFECT_ICON_ULTRAVISION = 131; //::////////////////////////////////////////////// //:: New damage types (damagetypes.2da) //::////////////////////////////////////////////// -const int DAMAGE_TYPE_POISON = 16384; // CUSTOM2 -const int DAMAGE_TYPE_PSYCHIC = 32768; // CUSTOM4 -const int DAMAGE_TYPE_RADIANT = 65536; // CUSTOM6 -const int DAMAGE_TYPE_FORCE = 524288; // CUSTOM7 -const int DAMAGE_TYPE_UNTYPED = 1048576; // CUSTOM8 -const int DAMAGE_TYPE_VILE = 2097152; // CUSTOM9 +const int DAMAGE_TYPE_POISON = 16384; // CUSTOM2 +const int DAMAGE_TYPE_PSYCHIC = 32768; // CUSTOM4 +const int DAMAGE_TYPE_RADIANT = 65536; // CUSTOM6 +const int DAMAGE_TYPE_FORCE = 524288; // CUSTOM7 +const int DAMAGE_TYPE_UNTYPED = 1048576; // CUSTOM8 +const int DAMAGE_TYPE_VILE = 2097152; // CUSTOM9 +const int DAMAGE_TYPE_SANCTIFIED = 4194304; // CUSTOM10 +const int DAMAGE_TYPE_HOLY = 8388608; // CUSTOM11 +const int DAMAGE_TYPE_UNHOLY = 16777216; // CUSTOM12 +const int DAMAGE_TYPE_FALLING = 33554432; // CUSTOM13 +const int DAMAGE_TYPE_BALLISTIC = 67108864; // CUSTOM14 +const int DAMAGE_TYPE_DESSICATION = 134217728; // CUSTOM15 //::////////////////////////////////////////////// diff --git a/nwn/nwnprc/trunk/include/spinc_bolt.nss b/nwn/nwnprc/trunk/include/spinc_bolt.nss index 03ed6da1..08f8b30f 100644 --- a/nwn/nwnprc/trunk/include/spinc_bolt.nss +++ b/nwn/nwnprc/trunk/include/spinc_bolt.nss @@ -214,7 +214,7 @@ float GetVFXLength(location lCaster, float fLength, float fAngle) //::////////////////////////////////////////////// //:: Modified March 14 2003: Removed the option to hurt chests/doors //:: was potentially causing bugs when no creature targets available. -void PRCDoMissileStorm(int nD6Dice, int nCap, int nSpell, int nMIRV = VFX_IMP_MIRV, int nVIS = VFX_IMP_MAGBLUE, int nDAMAGETYPE = DAMAGE_TYPE_MAGICAL, int nONEHIT = FALSE, int nReflexSave = FALSE) +void PRCDoMissileStorm(int nD6Dice, int nCap, int nSpell, int nMIRV = VFX_IMP_MIRV, int nVIS = VFX_IMP_MAGBLUE, int nDAMAGETYPE = DAMAGE_TYPE_FORCE, int nONEHIT = FALSE, int nReflexSave = FALSE) { object oTarget = OBJECT_INVALID; int nCasterLvl = PRCGetCasterLevel(OBJECT_SELF); @@ -312,7 +312,7 @@ void PRCDoMissileStorm(int nD6Dice, int nCap, int nSpell, int nMIRV = VFX_IMP_MI int i = 0; //-------------------------------------------------------------- // GZ: Moved SR check out of loop to have 1 check per target - // not one check per missile, which would rip spell mantels + // not one check per missile, which would rip spell mantles // apart //-------------------------------------------------------------- if (!PRCDoResistSpell(OBJECT_SELF, oTarget,nCasterLvl, fDelay)) diff --git a/nwn/nwnprc/trunk/include/tob_inc_tobfunc.nss b/nwn/nwnprc/trunk/include/tob_inc_tobfunc.nss index d3390820..be9905b4 100644 --- a/nwn/nwnprc/trunk/include/tob_inc_tobfunc.nss +++ b/nwn/nwnprc/trunk/include/tob_inc_tobfunc.nss @@ -49,6 +49,9 @@ const int MANEUVER_TYPE_MANEUVER = 5; /* Function prototypes */ ////////////////////////////////////////////////// +int GetHasActiveStanceOfDiscipline(object oInitiator, int nDiscipline); + + /** * Determines from what class's maneuver list the currently being initiated * maneuver is initiated from. @@ -481,6 +484,34 @@ int _AllowedDiscipline(object oInitiator, int nClass, int nDiscipline) /* Function definitions */ ////////////////////////////////////////////////// +int GetHasActiveStanceOfDiscipline(object oInitiator, int nDiscipline) +{ + int bHasDualStance = (GetLevelByClass(CLASS_TYPE_WARBLADE, oInitiator) >= 20) || + (GetLevelByClass(CLASS_TYPE_MASTER_OF_NINE, oInitiator) >= 3 && GetLocalInt(oInitiator, "MoNDualStance")); + + if (bHasDualStance) + { + // Check both stances for dual-stance characters + int nStance1 = GetLocalInt(oInitiator, "TOBStanceOne"); + int nStance2 = GetLocalInt(oInitiator, "TOBStanceTwo"); + + if (nStance1 > 0 && GetDisciplineByManeuver(nStance1) == nDiscipline) + return TRUE; + if (nStance2 > 0 && GetDisciplineByManeuver(nStance2) == nDiscipline) + return TRUE; + + return FALSE; + } + else + { + // Single stance check for normal characters + int nStance = GetHasActiveStance(oInitiator); + if (nStance != -1 && GetDisciplineByManeuver(nStance) == nDiscipline) + return TRUE; + return FALSE; + } +} + int GetInitiatingClass(object oInitiator = OBJECT_SELF) { return GetLocalInt(oInitiator, PRC_INITIATING_CLASS) - 1; diff --git a/nwn/nwnprc/trunk/newspellbook/bnd_bindingcnv.nss b/nwn/nwnprc/trunk/newspellbook/bnd_bindingcnv.nss index e750ddbc..ed7620d7 100644 --- a/nwn/nwnprc/trunk/newspellbook/bnd_bindingcnv.nss +++ b/nwn/nwnprc/trunk/newspellbook/bnd_bindingcnv.nss @@ -443,7 +443,24 @@ void main() ClearCurrentStage(oBinder); MarkStageNotSetUp(STAGE_EXPLOIT_VESTIGE, oBinder); } - else if(nStage == STAGE_ASTAROTH) + else if(nStage == STAGE_ASTAROTH) + { + // Grant the selected crafting feat as a tagged effect + effect eFeat = EffectBonusFeat(nChoice); + eFeat = TagEffect(eFeat, "AstarothCraftingFeat"); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eFeat), oBinder, HoursToSeconds(24)); + + int nContactTime = VESTIGE_CONTACT_TIME; + if(GetPRCSwitch(PRC_CONTACT_VESTIGE_TIMER) >= 6) nContactTime = GetPRCSwitch(PRC_CONTACT_VESTIGE_TIMER); + ContactVestige(oBinder, nContactTime, GetLocalInt(oBinder, "nVestige")); + DeleteLocalInt(oBinder, "nVestige"); + AllowExit(DYNCONV_EXIT_FORCE_EXIT); + + ClearCurrentStage(oBinder); + MarkStageNotSetUp(STAGE_ASTAROTH, oBinder); + } + +/* else if(nStage == STAGE_ASTAROTH) { if (nChoice == FEAT_SCRIBE_SCROLL ) IPSafeAddItemProperty(GetPCSkin(oBinder), ItemPropertyBonusFeat(IP_FEAT_FEAT_SCRIBE_SCROLL ), HoursToSeconds(24), X2_IP_ADDPROP_POLICY_KEEP_EXISTING); if (nChoice == FEAT_BREW_POTION ) IPSafeAddItemProperty(GetPCSkin(oBinder), ItemPropertyBonusFeat(IP_FEAT_FEAT_BREW_POTION ), HoursToSeconds(24), X2_IP_ADDPROP_POLICY_KEEP_EXISTING); @@ -462,7 +479,7 @@ void main() ClearCurrentStage(oBinder); MarkStageNotSetUp(STAGE_ASTAROTH, oBinder); - } + } */ if(DEBUG) DoDebug("bnd_bindingcnv: New stage: " + IntToString(nStage)); diff --git a/nwn/nwnprc/trunk/newspellbook/inv_eldtch_blast.nss b/nwn/nwnprc/trunk/newspellbook/inv_eldtch_blast.nss index d4f4bc74..16b63d67 100644 --- a/nwn/nwnprc/trunk/newspellbook/inv_eldtch_blast.nss +++ b/nwn/nwnprc/trunk/newspellbook/inv_eldtch_blast.nss @@ -54,18 +54,18 @@ void main() nDC += InvokerAbilityFocus(oPC, nEssence, nEssence2); - int nDamageType = nEssence ? (nEssenceData >>> 4) & 0xFFF : DAMAGE_TYPE_MAGICAL; - int nDamageType2 = nEssence2 ? (nEssenceData2 >>> 4) & 0xFFF : DAMAGE_TYPE_MAGICAL; + int nDamageType = nEssence ? (nEssenceData >>> 4) & 0xFFF : DAMAGE_TYPE_UNTYPED; + int nDamageType2 = nEssence2 ? (nEssenceData2 >>> 4) & 0xFFF : DAMAGE_TYPE_UNTYPED; //Set correct blast damage type if(nDamageType != nDamageType2) { - if(nDamageType != DAMAGE_TYPE_MAGICAL) + if(nDamageType != DAMAGE_TYPE_UNTYPED) { - if(nDamageType2 == DAMAGE_TYPE_MAGICAL) + if(nDamageType2 == DAMAGE_TYPE_UNTYPED) nDamageType2 = nDamageType; } - else if(nDamageType2 != DAMAGE_TYPE_MAGICAL) + else if(nDamageType2 != DAMAGE_TYPE_UNTYPED) { nDamageType = nDamageType2; } @@ -116,17 +116,6 @@ void main() LosePsionicFocus(); } - -/* if(GetIsPsionicallyFocused() && GetHasFeat(FEAT_GREATER_PSIONIC_SHOT)) - { - nDam += d6(4); - LosePsionicFocus(); - } - if(GetIsPsionicallyFocused() && GetHasFeat(FEAT_PSIONIC_SHOT)) - { - nDam += d6(2); - LosePsionicFocus(); - } */ int nAtkBns = GetAttackBonus(oTarget, oPC, OBJECT_INVALID, FALSE, TOUCH_ATTACK_RANGED_SPELL); if(GetHasFeat(FEAT_ELDRITCH_SCULPTOR)) diff --git a/nwn/nwnprc/trunk/newspellbook/inv_pathofshadow.nss b/nwn/nwnprc/trunk/newspellbook/inv_pathofshadow.nss index 359783b3..4555b822 100644 --- a/nwn/nwnprc/trunk/newspellbook/inv_pathofshadow.nss +++ b/nwn/nwnprc/trunk/newspellbook/inv_pathofshadow.nss @@ -108,6 +108,12 @@ void main() SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(9999), oCaster); } + // Teleport starts a forced dynamic conversation, which clears queued ActionCastSpell cleanup. + DeleteLocalInt(oCaster, PRC_CASTERCLASS_OVERRIDE); + DeleteLocalInt(oCaster, "UsingActionCastSpell"); + DeleteLocalInt(oCaster, PRC_INVOKING_CLASS); + DeleteLocalInt(oCaster, PRC_INVOCATION_LEVEL); + Teleport(oCaster, nCasterLvl, nSpellID == INVOKE_PATH_OF_SHADOW_PARTY, FALSE, ""); diff --git a/nwn/nwnprc/trunk/newspellbook/tob_feats.nss b/nwn/nwnprc/trunk/newspellbook/tob_feats.nss index 9d739ca0..1108db05 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_feats.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_feats.nss @@ -21,7 +21,23 @@ ////////////////////////////////////////////////// // Called on Heartbeat -void ShadowBlade(object oInitiator) +void ShadowBlade(object oInitiator) +{ + int nDex = GetAbilityModifier(ABILITY_DEXTERITY, oInitiator); + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator); + int nWeap = GetIsDisciplineWeapon(oWeapon, DISCIPLINE_SHADOW_HAND); + + // Must be a shadow hand weapon while a Shadow Hand stance is active + if (GetHasActiveStanceOfDiscipline(oInitiator, DISCIPLINE_SHADOW_HAND) && nWeap) + { + int nDamageType = GetWeaponDamageType(oWeapon); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectDamageIncrease(IPGetDamageBonusConstantFromNumber(nDex), nDamageType)), oInitiator, 6.0); + SetLocalInt(oInitiator, "ShadowBladeDam", nDex); + DelayCommand(6.0, DeleteLocalInt(oInitiator, "ShadowBladeDam")); + } +} + +/* void ShadowBlade(object oInitiator) { // Needs an active Shadow Hands stance int nStance = GetHasActiveStance(oInitiator); @@ -39,7 +55,7 @@ void ShadowBlade(object oInitiator) SetLocalInt(oInitiator, "ShadowBladeDam", nDex); DelayCommand(6.0, DeleteLocalInt(oInitiator, "ShadowBladeDam")); } -} +} */ // Called on Heartbeat void RapidAssault(object oInitiator) @@ -118,7 +134,26 @@ void BladeMeditation(object oInitiator) } // Called on Heartbeat -void IronheartAura(object oInitiator) +void IronheartAura(object oInitiator) +{ + if (GetHasActiveStanceOfDiscipline(oInitiator, DISCIPLINE_IRON_HEART)) + { + location lTarget = GetLocation(oInitiator); + object oAreaTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE); + while(GetIsObjectValid(oAreaTarget)) + { + if(oAreaTarget != oInitiator && + GetIsInMeleeRange(oInitiator, oAreaTarget) && + GetIsFriend(oAreaTarget, oInitiator)) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectSavingThrowIncrease(SAVING_THROW_ALL, 2, SAVING_THROW_TYPE_ALL)), oAreaTarget, 6.0); + } + oAreaTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE); + } + } +} + +/* void IronheartAura(object oInitiator) { int nDisc = GetDisciplineByManeuver(GetHasActiveStance(oInitiator)); if (nDisc == DISCIPLINE_IRON_HEART) @@ -138,10 +173,20 @@ void IronheartAura(object oInitiator) oAreaTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE); } } -} +} */ // Called on heartbeat -void ShadowTrickster(object oInitiator) +void ShadowTrickster(object oInitiator) +{ + if (GetHasActiveStanceOfDiscipline(oInitiator, DISCIPLINE_SHADOW_HAND)) + { + SetLocalInt(oInitiator, "ShadowTrickster", TRUE); + } + else + DeleteLocalInt(oInitiator, "ShadowTrickster"); +} + +/* void ShadowTrickster(object oInitiator) { // Needs an active Shadow Hands stance int nStance = GetHasActiveStance(oInitiator); @@ -152,7 +197,7 @@ void ShadowTrickster(object oInitiator) } else DeleteLocalInt(oInitiator, "ShadowTrickster"); -} +} */ // Called on Heartbeat void WhiteRavenDefense(object oInitiator) diff --git a/nwn/nwnprc/trunk/others/prc_magiccraft.utm b/nwn/nwnprc/trunk/others/prc_magiccraft.utm index 7aef67ae..e1c7ca4c 100644 Binary files a/nwn/nwnprc/trunk/others/prc_magiccraft.utm and b/nwn/nwnprc/trunk/others/prc_magiccraft.utm differ diff --git a/nwn/nwnprc/trunk/others/prc_wf_admtbody.UTI b/nwn/nwnprc/trunk/others/prc_wf_admtbody.UTI index 2b0e01b5..7e4487d5 100644 Binary files a/nwn/nwnprc/trunk/others/prc_wf_admtbody.UTI and b/nwn/nwnprc/trunk/others/prc_wf_admtbody.UTI differ diff --git a/nwn/nwnprc/trunk/others/prc_wf_compbody.UTI b/nwn/nwnprc/trunk/others/prc_wf_compbody.UTI index 51399641..6f2c27a6 100644 Binary files a/nwn/nwnprc/trunk/others/prc_wf_compbody.UTI and b/nwn/nwnprc/trunk/others/prc_wf_compbody.UTI differ diff --git a/nwn/nwnprc/trunk/others/prc_wf_helmadmt.UTI b/nwn/nwnprc/trunk/others/prc_wf_helmadmt.UTI index 74275edf..fb877ce7 100644 Binary files a/nwn/nwnprc/trunk/others/prc_wf_helmadmt.UTI and b/nwn/nwnprc/trunk/others/prc_wf_helmadmt.UTI differ diff --git a/nwn/nwnprc/trunk/others/prc_wf_helmhead.UTI b/nwn/nwnprc/trunk/others/prc_wf_helmhead.UTI index 4f7793b8..f9325234 100644 Binary files a/nwn/nwnprc/trunk/others/prc_wf_helmhead.UTI and b/nwn/nwnprc/trunk/others/prc_wf_helmhead.UTI differ diff --git a/nwn/nwnprc/trunk/others/prc_wf_helmmith.UTI b/nwn/nwnprc/trunk/others/prc_wf_helmmith.UTI index 2b488da6..59ab6d2b 100644 Binary files a/nwn/nwnprc/trunk/others/prc_wf_helmmith.UTI and b/nwn/nwnprc/trunk/others/prc_wf_helmmith.UTI differ diff --git a/nwn/nwnprc/trunk/others/prc_wf_helmwood.UTI b/nwn/nwnprc/trunk/others/prc_wf_helmwood.UTI index 14470506..2f361b68 100644 Binary files a/nwn/nwnprc/trunk/others/prc_wf_helmwood.UTI and b/nwn/nwnprc/trunk/others/prc_wf_helmwood.UTI differ diff --git a/nwn/nwnprc/trunk/others/prc_wf_mithbody.UTI b/nwn/nwnprc/trunk/others/prc_wf_mithbody.UTI index 0f9f93a0..3cb7b2e6 100644 Binary files a/nwn/nwnprc/trunk/others/prc_wf_mithbody.UTI and b/nwn/nwnprc/trunk/others/prc_wf_mithbody.UTI differ diff --git a/nwn/nwnprc/trunk/others/prc_wf_woodbody.UTI b/nwn/nwnprc/trunk/others/prc_wf_woodbody.UTI index bf1f50e2..e630ea09 100644 Binary files a/nwn/nwnprc/trunk/others/prc_wf_woodbody.UTI and b/nwn/nwnprc/trunk/others/prc_wf_woodbody.UTI differ diff --git a/nwn/nwnprc/trunk/psionics/psi_pow_concblst.nss b/nwn/nwnprc/trunk/psionics/psi_pow_concblst.nss index b2472a6a..7302b52f 100644 --- a/nwn/nwnprc/trunk/psionics/psi_pow_concblst.nss +++ b/nwn/nwnprc/trunk/psionics/psi_pow_concblst.nss @@ -131,7 +131,7 @@ void DoPower(struct manifestation manif, object oMainTarget, int nDC, int nPen, nDamage = MetaPsionicsDamage(manif, nDieSize, nNumberOfDice, 0, 0, TRUE, FALSE); // Target-specific stuff nDamage = GetTargetSpecificChangesToDamage(oAreaTarget, manif.oManifester, nDamage, TRUE, FALSE); - eDamage = EffectDamage(nDamage, DAMAGE_TYPE_MAGICAL); + eDamage = EffectDamage(nDamage, DAMAGE_TYPE_FORCE); SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oAreaTarget); SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oAreaTarget); diff --git a/nwn/nwnprc/trunk/psionics/psi_pow_tkmove.nss b/nwn/nwnprc/trunk/psionics/psi_pow_tkmove.nss index cb05fb6b..c20bd65b 100644 --- a/nwn/nwnprc/trunk/psionics/psi_pow_tkmove.nss +++ b/nwn/nwnprc/trunk/psionics/psi_pow_tkmove.nss @@ -22,20 +22,81 @@ You mentally push a foe, attempting to knock it prone and disarm it. The DC of the discipline check for the target to resist being knocked down or disarmed is equal to your manifester level + you ability modified in your - manifesting stat. The Discipline checks to avoid being knocked down and + manifesting stat. The opposed combat checks to avoid being knocked down and disarmed are rolled separately. Augment: For every 2 additional power points spent, the DC of the Discipline check is increased by 1. */ -#include "psi_inc_psifunc" +#include "psi_inc_psifunc" +#include "psi_inc_pwresist" +#include "psi_spellhook" +#include "prc_inc_spells" +#include "prc_inc_combmove" // Add this include + +void main() +{ + if (!PsiPrePowerCastCode()) + { + return; + } + + object oManifester = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + struct manifestation manif = + EvaluateManifestation(oManifester, oTarget, + PowerAugmentationProfile(PRC_NO_GENERIC_AUGMENTS, + 2, PRC_UNLIMITED_AUGMENTATION + ), + METAPSIONIC_EXTEND | METAPSIONIC_TWIN + ); + + if(manif.bCanManifest) + { + int nPen = GetPsiPenetration(oManifester); + int nAbi = GetAbilityModifier(GetAbilityOfClass(GetManifestingClass(oManifester)), oManifester) + + manif.nTimesAugOptUsed_1; + effect eKnock = EffectKnockdown(); + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + float fDuration = 6.0f * (manif.nManifesterLevel / 2); + if(manif.bExtend) fDuration *= 2; + + // Set BAB override for combat maneuvers + SetLocalInt(oManifester, "BABOverride", manif.nManifesterLevel); + DelayCommand(1.0, DeleteLocalInt(oManifester, "BABOverride")); + + // Let the AI know + PRCSignalSpellEvent(oTarget, TRUE, manif.nSpellID, oManifester); + + // Handle Twin Power + int nRepeats = manif.bTwin ? 2 : 1; + for(; nRepeats > 0; nRepeats--) + { + // Check for Power Resistance + if(PRCMyResistPower(oManifester, oTarget, nPen)) + { + // Attempt disarm using combat maneuver system + if(GetIsCreatureDisarmable(oTarget) && !GetPRCSwitch(PRC_PNP_DISARM) && GetIsObjectValid(oWeapon)) + { + DoDisarm(oManifester, oTarget, nAbi, FALSE, FALSE); + } + + // Attempt trip using combat maneuver system + DoTrip(oManifester, oTarget, nAbi, FALSE, FALSE, FALSE, nAbi); + + } // end if - SR check + } // end for - Twin Power + } // end if - Successfull manifestation +} + +/* #include "psi_inc_psifunc" #include "psi_inc_pwresist" #include "psi_spellhook" #include "prc_inc_spells" void main() -{ +{ */ /* Spellcast Hook Code Added 2004-11-02 by Stratovarius @@ -44,7 +105,7 @@ void main() */ - if (!PsiPrePowerCastCode()) +/* if (!PsiPrePowerCastCode()) { // If code within the PrePowerCastHook (i.e. UMD) reports FALSE, do not run this spell return; @@ -102,4 +163,4 @@ void main() }// end if - SR check }// end for - Twin Power }// end if - Successfull manifestation -} +} */ diff --git a/nwn/nwnprc/trunk/scripts/ft_sanctmartial.nss b/nwn/nwnprc/trunk/scripts/ft_sanctmartial.nss index 5810e7db..f693d640 100644 --- a/nwn/nwnprc/trunk/scripts/ft_sanctmartial.nss +++ b/nwn/nwnprc/trunk/scripts/ft_sanctmartial.nss @@ -61,13 +61,13 @@ void Sanctify() if(!Sanctify_Feat_Wrapper(iType, oPC, oItem)) return; - itemproperty ip1 = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1); + itemproperty ip1 = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_HOLY, 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); + itemproperty ip2 = ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGETYPE_HOLY, 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); + itemproperty ip3 = ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGETYPE_HOLY, IP_CONST_DAMAGEBONUS_1d4); ip3 = TagItemProperty(ip3,"Sanctify3"); AddItemProperty(DURATION_TYPE_TEMPORARY,ip3,oItem,9999.0); itemproperty ip4 = ItemPropertyVisualEffect(ITEM_VISUAL_HOLY); @@ -108,9 +108,9 @@ void Sanctify() if(GetLocalInt(oItem,"SanctMar")) { - RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP,IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGEBONUS_1, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); - RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP,IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGEBONUS_1d4, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); - RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP,IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGEBONUS_1d4, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP,IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGEBONUS_1, 1,"",IP_CONST_DAMAGETYPE_HOLY,DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP,IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGEBONUS_1d4, 1,"",IP_CONST_DAMAGETYPE_HOLY,DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP,IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGEBONUS_1d4, 1,"",IP_CONST_DAMAGETYPE_HOLY,DURATION_TYPE_TEMPORARY); RemoveSpecificProperty(oItem,ITEM_PROPERTY_VISUALEFFECT,ITEM_VISUAL_HOLY,-1,1,"",-1,DURATION_TYPE_TEMPORARY); DeleteLocalInt(oItem,"SanctMar"); } @@ -144,17 +144,17 @@ void Sanctify() if ( GetLocalInt(oItem,"SanctMar")) { - RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP,IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGEBONUS_1, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); - RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP,IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGEBONUS_1d4, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); - RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP,IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGEBONUS_1d4, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP,IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGEBONUS_1, 1,"", IP_CONST_DAMAGETYPE_HOLY, DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP,IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGEBONUS_1d4, 1,"", IP_CONST_DAMAGETYPE_HOLY, DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP,IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGEBONUS_1d4, 1,"", IP_CONST_DAMAGETYPE_HOLY, DURATION_TYPE_TEMPORARY); RemoveSpecificProperty(oItem,ITEM_PROPERTY_VISUALEFFECT,ITEM_VISUAL_HOLY,-1,1,"",-1,DURATION_TYPE_TEMPORARY); DeleteLocalInt(oItem,"SanctMar"); } if ( GetLocalInt(oItem2,"SanctMar")) { - RemoveSpecificProperty(oItem2,ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP,IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGEBONUS_1, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); - RemoveSpecificProperty(oItem2,ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP,IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGEBONUS_1d4, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); - RemoveSpecificProperty(oItem2,ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP,IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGEBONUS_1d4, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem2,ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP,IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGEBONUS_1, 1,"",IP_CONST_DAMAGETYPE_HOLY, DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem2,ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP,IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGEBONUS_1d4, 1,"",IP_CONST_DAMAGETYPE_HOLY, DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem2,ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP,IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGEBONUS_1d4, 1,"",IP_CONST_DAMAGETYPE_HOLY, DURATION_TYPE_TEMPORARY); RemoveSpecificProperty(oItem2,ITEM_PROPERTY_VISUALEFFECT,ITEM_VISUAL_HOLY,-1,1,"",-1,DURATION_TYPE_TEMPORARY); DeleteLocalInt(oItem2,"SanctMar"); } @@ -183,13 +183,13 @@ void Sanctify() if(Sanctify_Feat_Wrapper(iType, oPC, oItem) && (!GetLocalInt(oItem,"SanctMar"))) { - itemproperty ip1 = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1); + itemproperty ip1 = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_HOLY,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); + itemproperty ip2 = ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGETYPE_HOLY,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); + itemproperty ip3 = ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGETYPE_HOLY,IP_CONST_DAMAGEBONUS_1d4); ip3 = TagItemProperty(ip3,"Sanctify3"); AddItemProperty(DURATION_TYPE_TEMPORARY,ip3,oItem,9999.0); itemproperty ip4 = ItemPropertyVisualEffect(ITEM_VISUAL_HOLY); @@ -202,13 +202,13 @@ void Sanctify() iType= GetBaseItemType(oItem); if(Sanctify_Feat_Wrapper(iType, oPC, oItem) && (!GetLocalInt(oItem,"SanctMar"))) { - itemproperty ip1 = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1); + itemproperty ip1 = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_HOLY,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); + itemproperty ip2 = ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGETYPE_HOLY,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); + itemproperty ip3 = ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGETYPE_HOLY,IP_CONST_DAMAGEBONUS_1d4); ip3 = TagItemProperty(ip3,"Sanctify3"); AddItemProperty(DURATION_TYPE_TEMPORARY,ip3,oItem,9999.0); itemproperty ip4 = ItemPropertyVisualEffect(ITEM_VISUAL_HOLY); @@ -269,7 +269,7 @@ void Vile() if(nAlign > 7) AdjustAlignment(oPC, ALIGNMENT_EVIL, 7, FALSE); - AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1),oItem,9999.0); + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_VILE,IP_CONST_DAMAGEBONUS_1),oItem,9999.0); AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyVisualEffect(ITEM_VISUAL_EVIL),oItem,9999.0); SetLocalInt(oItem,"USanctMar",1); } @@ -305,7 +305,7 @@ void Vile() if ( GetLocalInt(oItem,"USanctMar")) { - RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS,IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1,1,"",-1,DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS,IP_CONST_DAMAGETYPE_VILE, IP_CONST_DAMAGEBONUS_1,1,"",-1,DURATION_TYPE_TEMPORARY); RemoveSpecificProperty(oItem,ITEM_PROPERTY_VISUALEFFECT,ITEM_VISUAL_EVIL,-1,1,"",-1,DURATION_TYPE_TEMPORARY); DeleteLocalInt(oItem,"USanctMar"); } @@ -339,7 +339,7 @@ void Vile() if (Vile_Feat_Wrapper(iType, oPC, oItem) && (!GetLocalInt(oItem,"USanctMar"))) { - AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1),oItem,9999.0); + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_VILE, IP_CONST_DAMAGEBONUS_1),oItem,9999.0); AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyVisualEffect(ITEM_VISUAL_EVIL),oItem,9999.0); SetLocalInt(oItem,"USanctMar",1); int nAlign = GetGoodEvilValue(OBJECT_SELF); @@ -352,7 +352,7 @@ void Vile() iType= GetBaseItemType(oItem); if(Vile_Feat_Wrapper(iType, oPC, oItem) && (!GetLocalInt(oItem,"USanctMar"))) { - AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_DIVINE,IP_CONST_DAMAGEBONUS_1),oItem,9999.0); + AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_VILE, IP_CONST_DAMAGEBONUS_1),oItem,9999.0); AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyVisualEffect(ITEM_VISUAL_EVIL),oItem,9999.0); SetLocalInt(oItem,"USanctMar",1); int nAlign = GetGoodEvilValue(OBJECT_SELF); @@ -431,16 +431,16 @@ void main() if ( GetLocalInt(oItem,"SanctMar")) { - RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP,IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGEBONUS_1, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); - RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP,IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGEBONUS_1d4, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); - RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP,IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGEBONUS_1d4, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP, IP_CONST_ALIGNMENTGROUP_EVIL, IP_CONST_DAMAGEBONUS_1, 1,"", IP_CONST_DAMAGETYPE_HOLY, DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP,IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGEBONUS_1d4, 1,"",IP_CONST_DAMAGETYPE_HOLY,DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP,IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGEBONUS_1d4, 1,"",IP_CONST_DAMAGETYPE_HOLY,DURATION_TYPE_TEMPORARY); RemoveSpecificProperty(oItem,ITEM_PROPERTY_VISUALEFFECT,ITEM_VISUAL_HOLY,-1,1,"",-1,DURATION_TYPE_TEMPORARY); DeleteLocalInt(oItem,"SanctMar"); } if (GetLocalInt(oItem,"MartialStrik")) { - RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP,IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGEBONUS_2d6, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP,IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGEBONUS_2d6, 1,"",IP_CONST_DAMAGETYPE_HOLY,DURATION_TYPE_TEMPORARY); RemoveSpecificProperty(oItem,ITEM_PROPERTY_VISUALEFFECT,ITEM_VISUAL_HOLY,-1,1,"",-1,DURATION_TYPE_TEMPORARY); DeleteLocalInt(oItem,"MartialStrik"); } @@ -449,16 +449,16 @@ void main() if ( GetLocalInt(oItem,"SanctMar")) { - RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP,IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGEBONUS_1, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); - RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP,IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGEBONUS_1d4, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); - RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP,IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGEBONUS_1d4, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP,IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGEBONUS_1, 1,"",IP_CONST_DAMAGETYPE_HOLY,DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP,IP_CONST_RACIALTYPE_UNDEAD,IP_CONST_DAMAGEBONUS_1d4, 1,"",IP_CONST_DAMAGETYPE_HOLY,DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP,IP_CONST_RACIALTYPE_OUTSIDER,IP_CONST_DAMAGEBONUS_1d4, 1,"",IP_CONST_DAMAGETYPE_HOLY,DURATION_TYPE_TEMPORARY); RemoveSpecificProperty(oItem,ITEM_PROPERTY_VISUALEFFECT,ITEM_VISUAL_HOLY,-1,1,"",-1,DURATION_TYPE_TEMPORARY); DeleteLocalInt(oItem,"SanctMar"); } if ( GetLocalInt(oItem,"MartialStrik")) { - RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP,IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGEBONUS_2d6, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP,IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGEBONUS_2d6, 1,"",IP_CONST_DAMAGETYPE_HOLY,DURATION_TYPE_TEMPORARY); RemoveSpecificProperty(oItem,ITEM_PROPERTY_VISUALEFFECT,ITEM_VISUAL_HOLY,-1,1,"",-1,DURATION_TYPE_TEMPORARY); DeleteLocalInt(oItem,"MartialStrik"); } @@ -504,7 +504,7 @@ void main() */ if (GetLocalInt(oItem,"UnholyStrik")) { - RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP,IP_CONST_ALIGNMENTGROUP_GOOD,IP_CONST_DAMAGEBONUS_2d6, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP,IP_CONST_ALIGNMENTGROUP_GOOD,IP_CONST_DAMAGEBONUS_2d6, 1,"", IP_CONST_DAMAGETYPE_UNHOLY, DURATION_TYPE_TEMPORARY); RemoveSpecificProperty(oItem,ITEM_PROPERTY_VISUALEFFECT,ITEM_VISUAL_EVIL,-1,1,"",-1,DURATION_TYPE_TEMPORARY); DeleteLocalInt(oItem,"UnholyStrik"); } @@ -521,7 +521,7 @@ void main() */ if ( GetLocalInt(oItem,"UnholyStrik")) { - RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP,IP_CONST_ALIGNMENTGROUP_GOOD,IP_CONST_DAMAGEBONUS_2d6, 1,"",IP_CONST_DAMAGETYPE_DIVINE,DURATION_TYPE_TEMPORARY); + RemoveSpecificProperty(oItem,ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP, IP_CONST_ALIGNMENTGROUP_GOOD, IP_CONST_DAMAGEBONUS_2d6, 1,"", IP_CONST_DAMAGETYPE_UNHOLY, DURATION_TYPE_TEMPORARY); RemoveSpecificProperty(oItem,ITEM_PROPERTY_VISUALEFFECT,ITEM_VISUAL_EVIL,-1,1,"",-1,DURATION_TYPE_TEMPORARY); DeleteLocalInt(oItem,"UnholyStrik"); } @@ -544,8 +544,8 @@ void main() // Sanctify Strike if (GetHasFeat(FEAT_SANCTIFYKISTRIKE, oPC) || GetLocalInt(oPC, "VoPFeat"+IntToString(FEAT_SANCTIFYKISTRIKE))) { - effect eEffect1 = VersusAlignmentEffect(EffectDamageIncrease(DAMAGE_BONUS_1,DAMAGE_TYPE_POSITIVE),ALIGNMENT_ALL,ALIGNMENT_EVIL); - effect eEffect2 = VersusRacialTypeEffect(EffectDamageIncrease(DAMAGE_BONUS_1d4,DAMAGE_TYPE_POSITIVE),RACIAL_TYPE_OUTSIDER); + effect eEffect1 = VersusAlignmentEffect(EffectDamageIncrease(DAMAGE_BONUS_1,DAMAGE_TYPE_HOLY),ALIGNMENT_ALL,ALIGNMENT_EVIL); + effect eEffect2 = VersusRacialTypeEffect(EffectDamageIncrease(DAMAGE_BONUS_1d4,DAMAGE_TYPE_HOLY),RACIAL_TYPE_OUTSIDER); effect eLink = EffectLinkEffects(eEffect1,eEffect2); eLink = TagEffect(eLink,"SanctifyKiStrike"); @@ -564,7 +564,7 @@ void main() // Holy Ki Strike if (GetHasFeat(FEAT_HOLYKISTRIKE, oPC) || GetLocalInt(oPC, "VoPFeat"+IntToString(FEAT_HOLYKISTRIKE))) { - effect eEffect1 = VersusAlignmentEffect(EffectDamageIncrease(DAMAGE_BONUS_2d6,DAMAGE_TYPE_POSITIVE),ALIGNMENT_ALL,ALIGNMENT_EVIL); + effect eEffect1 = VersusAlignmentEffect(EffectDamageIncrease(DAMAGE_BONUS_2d6, DAMAGE_TYPE_HOLY), ALIGNMENT_ALL, ALIGNMENT_EVIL); eEffect1 = TagEffect(eEffect1,"HolyKiStrike"); //Remove any prior bonus to avoid duplication and remove Sanctify Ki Strike diff --git a/nwn/nwnprc/trunk/scripts/prc_forsaker.nss b/nwn/nwnprc/trunk/scripts/prc_forsaker.nss index b98d8aa0..725f9ec1 100644 --- a/nwn/nwnprc/trunk/scripts/prc_forsaker.nss +++ b/nwn/nwnprc/trunk/scripts/prc_forsaker.nss @@ -200,10 +200,33 @@ void main() else if(nEvent == EVENT_ONPLAYEREQUIPITEM) { oPC = GetItemLastEquippedBy(); - oItem = GetItemLastEquipped(); - if(DEBUG) DoDebug("prc_forsaker - OnEquip\n" + oItem = GetItemLastEquipped(); + + string sTag = GetTag(oItem); + string sResRef = GetResRef(oItem); + + int nRace = GetRacialType(oPC); + + if(DEBUG) DoDebug("prc_forsaker - OnEquip\n" + "oPC = " + DebugObject2Str(oPC) + "\n" - + "oItem = " + DebugObject2Str(oItem) + "\n"); + + "oItem = " + DebugObject2Str(oItem) + "\n"); + + if(nRace == RACIAL_TYPE_WARFORGED + || nRace == RACIAL_TYPE_WARFORGED_SCOUT + || nRace == RACIAL_TYPE_WARFORGED_CHARGER) + { + if(sResRef == "prc_wf_admtbody" + || sResRef == "prc_wf_compbody" + || sResRef == "prc_wf_woodbody" + || sResRef == "prc_wf_mithbody" + || sResRef == "prc_wf_helmhead" + || sResRef == "prc_wf_helmadmt" + || sResRef == "prc_wf_helmwood" + || sResRef == "prc_wf_helmmith") + + return; + + } if(!GetHasFeat(FEAT_VOWOFPOVERTY,oPC)) { diff --git a/nwn/nwnprc/trunk/scripts/prc_reservinvndl.nss b/nwn/nwnprc/trunk/scripts/prc_reservinvndl.nss index d45b8262..7cc23aea 100644 --- a/nwn/nwnprc/trunk/scripts/prc_reservinvndl.nss +++ b/nwn/nwnprc/trunk/scripts/prc_reservinvndl.nss @@ -98,5 +98,7 @@ void main() return; } + SignalEvent(oPC, EventSpellCastAt(oTarget, PRCGetSpellId(), FALSE)); + ForceNeedleAttack(oPC, oTarget, nBonus); } diff --git a/nwn/nwnprc/trunk/scripts/prc_rest.nss b/nwn/nwnprc/trunk/scripts/prc_rest.nss index 03c52e2f..1a35bfbc 100644 --- a/nwn/nwnprc/trunk/scripts/prc_rest.nss +++ b/nwn/nwnprc/trunk/scripts/prc_rest.nss @@ -21,7 +21,18 @@ #include "shd_inc_myst" #include "prc_inc_template" - +void ClearAstarothCraftingFeat(object oPC) +{ + effect eOld = GetFirstEffect(oPC); + while (GetIsEffectValid(eOld)) + { + if (GetEffectTag(eOld) == "AstarothCraftingFeat") + { + RemoveEffect(oPC, eOld); + } + eOld = GetNextEffect(oPC); + } +} void ResetLionSwiftness(object oPC) { @@ -347,6 +358,7 @@ void RestFinished(object oPC) } ResetLionSwiftness(oPC); + ClearAstarothCraftingFeat(oPC); // Execute scripts hooked to this event for the player triggering it ExecuteAllScriptsHookedToEvent(oPC, EVENT_ONPLAYERREST_FINISHED); diff --git a/nwn/nwnprc/trunk/scripts/prc_shou.nss b/nwn/nwnprc/trunk/scripts/prc_shou.nss index 55e703a8..f3c7e82d 100644 --- a/nwn/nwnprc/trunk/scripts/prc_shou.nss +++ b/nwn/nwnprc/trunk/scripts/prc_shou.nss @@ -11,6 +11,7 @@ #include "prc_alterations" #include "prc_inc_unarmed" +#include "prc_inc_combat" /* @@ -98,12 +99,42 @@ void main() FloatingTextStringOnCreature("*Shou Disciple Abilities Disabled Due To Equipped Shield*", oPC); } - // This checks to make sure he doesnt have a non-light weapon equipped for Martial Flurry Light + + // This checks to make sure he doesnt have a non-light weapon equipped for Martial Flurry Light + else if(StringToInt(Get2DACache("baseitems", "WeaponSize", iBaseL)) > 2 || StringToInt(Get2DACache("baseitems", "WeaponSize", iBaseR)) > 2) + { + PRCRemoveEffectsFromSpell(oPC, SPELL_MARTIAL_FLURRY_LIGHT); + FloatingTextStringOnCreature("*Martial Flurry Light Disabled Due to Equipped Weapons*", oPC); + } + // Check for Monk weapon interaction + else if(GetLevelByClass(CLASS_TYPE_MONK, oPC) && GetIsMonkWeaponTypeOrUnarmed(iBaseR)) + { + PRCRemoveEffectsFromSpell(oPC, SPELL_MARTIAL_FLURRY_LIGHT); + PRCRemoveEffectsFromSpell(oPC, SPELL_MARTIAL_FLURRY_ALL); + FloatingTextStringOnCreature("*Martial Flurry Disabled Due to Monk Weapon Conflict*", oPC); + } + else + { + if(GetLevelByClass(CLASS_TYPE_SHOU, oPC) > 1 ) + { + RemoveDodge(oPC, oSkin); + DodgeBonus(oPC, oSkin); + } + } + +/* // This checks to make sure he doesnt have a non-light weapon equipped for Martial Flurry Light else if(StringToInt(Get2DACache("baseitems", "WeaponSize", iBaseL)) > 2 || StringToInt(Get2DACache("baseitems", "WeaponSize", iBaseR)) > 2) { PRCRemoveEffectsFromSpell(oPC, SPELL_MARTIAL_FLURRY_LIGHT); FloatingTextStringOnCreature("*Martial Flurry Light Disabled Due to Equipped Weapons*", oPC); } + // Check for Monk weapon interaction + if(GetLevelByClass(CLASS_TYPE_MONK, oPC) && GetIsMonkWeaponTypeOrUnarmed(iBaseR)) + { + PRCRemoveEffectsFromSpell(oPC, SPELL_MARTIAL_FLURRY_LIGHT); + PRCRemoveEffectsFromSpell(oPC, SPELL_MARTIAL_FLURRY_ALL); + FloatingTextStringOnCreature("*Martial Flurry Disabled Due to Monk Weapon Conflict*", oPC); + } else { if(GetLevelByClass(CLASS_TYPE_SHOU, oPC) > 1 ) @@ -111,7 +142,7 @@ void main() RemoveDodge(oPC, oSkin); DodgeBonus(oPC, oSkin); } - } + } */ //Evaluate The Unarmed Strike Feats //UnarmedFeats(oPC); diff --git a/nwn/nwnprc/trunk/scripts/tmp_m_saint.nss b/nwn/nwnprc/trunk/scripts/tmp_m_saint.nss index 78bc5e4d..6c0a1e4c 100644 --- a/nwn/nwnprc/trunk/scripts/tmp_m_saint.nss +++ b/nwn/nwnprc/trunk/scripts/tmp_m_saint.nss @@ -225,10 +225,10 @@ void main() //:: Setup Holy Touch extra damage vs evil object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); - effect eEffect1 = VersusAlignmentEffect(EffectDamageIncrease(DAMAGE_BONUS_1d6, DAMAGE_TYPE_DIVINE), 0, ALIGNMENT_EVIL); - effect eEffect2 = VersusAlignmentEffect(EffectDamageIncrease(DAMAGE_BONUS_2, DAMAGE_TYPE_DIVINE), 0, ALIGNMENT_EVIL); + effect eEffect1 = VersusAlignmentEffect(EffectDamageIncrease(DAMAGE_BONUS_1d6, DAMAGE_TYPE_HOLY), 0, ALIGNMENT_EVIL); + effect eEffect2 = VersusAlignmentEffect(EffectDamageIncrease(DAMAGE_BONUS_2, DAMAGE_TYPE_HOLY), 0, ALIGNMENT_EVIL); eEffect2 = VersusRacialTypeEffect(eEffect2, RACIAL_TYPE_OUTSIDER); - effect eEffect3 = VersusAlignmentEffect(EffectDamageIncrease(DAMAGE_BONUS_2, DAMAGE_TYPE_DIVINE), 0, ALIGNMENT_EVIL); + effect eEffect3 = VersusAlignmentEffect(EffectDamageIncrease(DAMAGE_BONUS_2, DAMAGE_TYPE_HOLY), 0, ALIGNMENT_EVIL); eEffect3 = VersusRacialTypeEffect(eEffect3, RACIAL_TYPE_UNDEAD); effect eLink = EffectLinkEffects(eEffect1, eEffect2); eLink = EffectLinkEffects(eLink, eEffect3); @@ -316,12 +316,12 @@ void main() if (MyPRCGetRacialType(oTarget) == RACIAL_TYPE_OUTSIDER || MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD) { - eDam = EffectDamage(d8(1), DAMAGE_TYPE_DIVINE); + eDam = EffectDamage(d8(1), DAMAGE_TYPE_HOLY); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); } else { - eDam = EffectDamage(d6(1), DAMAGE_TYPE_DIVINE); + eDam = EffectDamage(d6(1), DAMAGE_TYPE_HOLY); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); } } diff --git a/nwn/nwnprc/trunk/spells/nw_s0_horrwilt.nss b/nwn/nwnprc/trunk/spells/nw_s0_horrwilt.nss index 42844412..79938116 100644 --- a/nwn/nwnprc/trunk/spells/nw_s0_horrwilt.nss +++ b/nwn/nwnprc/trunk/spells/nw_s0_horrwilt.nss @@ -103,7 +103,7 @@ SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_NECROMANCY); } //nDamage += ApplySpellBetrayalStrikeDamage(oTarget, OBJECT_SELF, FALSE); //Set the damage effect - eDam = PRCEffectDamage(oTarget, nDamage, DAMAGE_TYPE_MAGICAL); + eDam = PRCEffectDamage(oTarget, nDamage, DAMAGE_TYPE_DESSICATION); // Apply effects to the currently selected target. SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); PRCBonusDamage(oTarget); diff --git a/nwn/nwnprc/trunk/spells/nw_s0_magmiss.nss b/nwn/nwnprc/trunk/spells/nw_s0_magmiss.nss index bef9eb0c..daeb8e64 100644 --- a/nwn/nwnprc/trunk/spells/nw_s0_magmiss.nss +++ b/nwn/nwnprc/trunk/spells/nw_s0_magmiss.nss @@ -80,7 +80,7 @@ SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_EVOCATION); //Apply the MIRV and damage effect nDam += SpellDamagePerDice(OBJECT_SELF, 1); - effect eDam = PRCEffectDamage(oTarget, nDam, DAMAGE_TYPE_MAGICAL); + effect eDam = PRCEffectDamage(oTarget, nDam, DAMAGE_TYPE_FORCE); DelayCommand(fTime, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget)); DelayCommand(fTime, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oTarget,0.0f,FALSE)); DelayCommand(fDelay2, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget)); diff --git a/nwn/nwnprc/trunk/spells/sp_blastfrc.nss b/nwn/nwnprc/trunk/spells/sp_blastfrc.nss index 8f147be9..03d70ed3 100644 --- a/nwn/nwnprc/trunk/spells/sp_blastfrc.nss +++ b/nwn/nwnprc/trunk/spells/sp_blastfrc.nss @@ -66,7 +66,7 @@ int DoSpell(object oCaster, object oTarget, int nCasterLevel, int nEvent) SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eKnock, oTarget, 3.0); } - effect eDam = PRCEffectDamage(oTarget, nDam, DAMAGE_TYPE_MAGICAL); + effect eDam = PRCEffectDamage(oTarget, nDam, DAMAGE_TYPE_FORCE); SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget); SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DESTRUCTION), oTarget); } diff --git a/nwn/nwnprc/trunk/spells/sp_brk_enchant.nss b/nwn/nwnprc/trunk/spells/sp_brk_enchant.nss index 1e863b05..3498da9e 100644 --- a/nwn/nwnprc/trunk/spells/sp_brk_enchant.nss +++ b/nwn/nwnprc/trunk/spells/sp_brk_enchant.nss @@ -50,7 +50,19 @@ void main() ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, PRCGetSpellTargetLocation()); - oTarget = MyFirstObjectInShape(SHAPE_SPHERE, 9.14f, lLocal, FALSE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_PLACEABLE ); + + int nTargetsAffected = 0; + oTarget = MyFirstObjectInShape(SHAPE_SPHERE, 9.14f, lLocal, FALSE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_PLACEABLE); + + while (GetIsObjectValid(oTarget) && nTargetsAffected < nCasterLevel) + { + SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_REMOVE_CURSE)); + DispelLoop(oTarget, nCasterLevel); + nTargetsAffected++; + oTarget = MyNextObjectInShape(SHAPE_SPHERE, 9.14f, lLocal, FALSE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_PLACEABLE); + } + +/* oTarget = MyFirstObjectInShape(SHAPE_SPHERE, 9.14f, lLocal, FALSE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_PLACEABLE ); //Set up for loop int i = nCasterLevel; @@ -61,7 +73,7 @@ void main() DispelLoop(oTarget, nCasterLevel); i--; oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE,lLocal, FALSE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_AREA_OF_EFFECT | OBJECT_TYPE_PLACEABLE); - } + } */ PRCSetSchool(); } diff --git a/nwn/nwnprc/trunk/spells/sp_command.nss b/nwn/nwnprc/trunk/spells/sp_command.nss index 5b504c8b..fc0bd0f9 100644 --- a/nwn/nwnprc/trunk/spells/sp_command.nss +++ b/nwn/nwnprc/trunk/spells/sp_command.nss @@ -23,6 +23,9 @@ Halt - The target stands in place and takes no action for one round. Author: Stratovarius Created: 29/4/06 + +Fixed by: Jaysyn +Date: 2026-05-29 00:57:05 */ //::////////////////////////////////////////////// //::////////////////////////////////////////////// @@ -61,12 +64,15 @@ void main() if (!PRCDoResistSpell(OBJECT_SELF, oTarget, nCaster+SPGetPenetr()) && PRCGetIsAliveCreature(oTarget)) { - if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS)) - { - SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration), TRUE,-1,nCaster); - SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); - DoCommandSpell(oCaster, oTarget, nSpellId, nDuration, nCaster); - } + if(!GetIsImmune(oTarget, IMMUNITY_TYPE_MIND_SPELLS)) + { + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS)) + { + SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration), TRUE,-1,nCaster); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + DoCommandSpell(oCaster, oTarget, nSpellId, nDuration, nCaster); + } + } } PRCSetSchool(); diff --git a/nwn/nwnprc/trunk/spells/sp_damng_darkA.nss b/nwn/nwnprc/trunk/spells/sp_damng_darkA.nss index d9011292..4c40f166 100644 --- a/nwn/nwnprc/trunk/spells/sp_damng_darkA.nss +++ b/nwn/nwnprc/trunk/spells/sp_damng_darkA.nss @@ -133,13 +133,13 @@ void DarkLoop(object oTarget, object oPC, int nMetaMagic) if(GetAlignmentGoodEvil(oTarget) == ALIGNMENT_GOOD) { int nDam = PRCMaximizeOrEmpower(6, 2, nMetaMagic) + SpellDamagePerDice(oPC, 2); - SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDam, DAMAGE_TYPE_DIVINE), oTarget); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDam, DAMAGE_TYPE_UNHOLY), oTarget); } else if(GetAlignmentGoodEvil(oTarget) == ALIGNMENT_NEUTRAL) { int nDam = PRCMaximizeOrEmpower(6, 1, nMetaMagic) + SpellDamagePerDice(oPC, 1); - SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDam, DAMAGE_TYPE_DIVINE), oTarget); + SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDam, DAMAGE_TYPE_UNHOLY), oTarget); } else diff --git a/nwn/nwnprc/trunk/spells/sp_forceblast.nss b/nwn/nwnprc/trunk/spells/sp_forceblast.nss index 7b49f750..f816fbb9 100644 --- a/nwn/nwnprc/trunk/spells/sp_forceblast.nss +++ b/nwn/nwnprc/trunk/spells/sp_forceblast.nss @@ -11,7 +11,7 @@ void main() int nDice = nCasterLevel > 10 ? 10 : nCasterLevel; DoBolt (nCasterLevel,4, 0, nDice, VFX_BEAM_MIND, VFX_IMP_MAGBLUE, - DAMAGE_TYPE_MAGICAL, SAVING_THROW_TYPE_SPELL, + DAMAGE_TYPE_FORCE, SAVING_THROW_TYPE_SPELL, SPELL_SCHOOL_EVOCATION, TRUE, GetSpellId()); } diff --git a/nwn/nwnprc/trunk/spells/sp_forcemissiles.nss b/nwn/nwnprc/trunk/spells/sp_forcemissiles.nss index 2fadcd9e..2182fa22 100644 --- a/nwn/nwnprc/trunk/spells/sp_forcemissiles.nss +++ b/nwn/nwnprc/trunk/spells/sp_forcemissiles.nss @@ -62,7 +62,7 @@ void SendMissileBomb(object oCaster, object oTarget, float fDelay=0.0, float fTi if (nMetaMagic == METAMAGIC_EMPOWER) nDam += nDam/2; - DelayCommand(fTime, SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oLoop, nDam, DAMAGE_TYPE_MAGICAL), oLoop)); + DelayCommand(fTime, SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oLoop, nDam, DAMAGE_TYPE_FORCE), oLoop)); DelayCommand(fTime, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_IMP_MAGBLUE, FALSE, 4.0f), oLoop)); } else if (!PRCDoResistSpell(oCaster, oLoop, nPenetr, fDelay)) diff --git a/nwn/nwnprc/trunk/spells/sp_forceorb.nss b/nwn/nwnprc/trunk/spells/sp_forceorb.nss index b888b4fc..0f495df7 100644 --- a/nwn/nwnprc/trunk/spells/sp_forceorb.nss +++ b/nwn/nwnprc/trunk/spells/sp_forceorb.nss @@ -29,7 +29,7 @@ void main() PRCSignalSpellEvent(oTarget, TRUE, nSpellId); //Roll damage for each target - int nDamage = PRCGetMetaMagicDamage(DAMAGE_TYPE_MAGICAL, nDice, 6); + int nDamage = PRCGetMetaMagicDamage(DAMAGE_TYPE_FORCE, nDice, 6); nDamage += SpellDamagePerDice(oCaster, nDice); // Succeeded on the save if (PRCMySavingThrow(SAVING_THROW_FORT, oTarget, PRCGetSaveDC(oTarget, oCaster))) diff --git a/nwn/nwnprc/trunk/spells/sp_mjmagmiss.nss b/nwn/nwnprc/trunk/spells/sp_mjmagmiss.nss index 95ecca19..1edf9feb 100644 --- a/nwn/nwnprc/trunk/spells/sp_mjmagmiss.nss +++ b/nwn/nwnprc/trunk/spells/sp_mjmagmiss.nss @@ -94,7 +94,7 @@ SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_EVOCATION); fTime += fDelay2; //Set damage effect - effect eDam = PRCEffectDamage(oTarget, nDam, DAMAGE_TYPE_MAGICAL); + effect eDam = PRCEffectDamage(oTarget, nDam, DAMAGE_TYPE_FORCE); //Apply the MIRV and damage effect DelayCommand(fTime, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget)); diff --git a/nwn/nwnprc/trunk/spells/sp_nec_bloat.nss b/nwn/nwnprc/trunk/spells/sp_nec_bloat.nss index 72f6ce8a..986798a8 100644 --- a/nwn/nwnprc/trunk/spells/sp_nec_bloat.nss +++ b/nwn/nwnprc/trunk/spells/sp_nec_bloat.nss @@ -85,8 +85,7 @@ void main() int nVile = nDam/2; int nNorm = (nDam - nVile); - //Vile damage is currently being applied as Positive damage - effect eVileDam = PRCEffectDamage(oTarget, nVile, DAMAGE_TYPE_POSITIVE); + effect eVileDam = PRCEffectDamage(oTarget, nVile, DAMAGE_TYPE_VILE); effect eNormDam = PRCEffectDamage(oTarget, nNorm, DAMAGE_TYPE_MAGICAL); SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVileDam, oTarget); SPApplyEffectToObject(DURATION_TYPE_INSTANT, eNormDam, oTarget); diff --git a/nwn/nwnprc/trunk/spells/sp_nec_erupt.nss b/nwn/nwnprc/trunk/spells/sp_nec_erupt.nss index 0c916163..79b8915f 100644 --- a/nwn/nwnprc/trunk/spells/sp_nec_erupt.nss +++ b/nwn/nwnprc/trunk/spells/sp_nec_erupt.nss @@ -96,8 +96,8 @@ void main() nDam += SpellDamagePerDice(oPC, nLevel); int nVile = nDam/2; int nNorm = (nDam - nVile); - //Vile damage is currently being applied as Positive damage - effect eVileDam = PRCEffectDamage(oTarget, nVile, DAMAGE_TYPE_POSITIVE); + + effect eVileDam = PRCEffectDamage(oTarget, nVile, DAMAGE_TYPE_VILE); effect eNormDam = PRCEffectDamage(oTarget, nNorm, DAMAGE_TYPE_MAGICAL); SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVileDam, oTarget); SPApplyEffectToObject(DURATION_TYPE_INSTANT, eNormDam, oTarget); diff --git a/nwn/nwnprc/trunk/spells/sp_nec_term.nss b/nwn/nwnprc/trunk/spells/sp_nec_term.nss index 20fc11d5..3113b1b8 100644 --- a/nwn/nwnprc/trunk/spells/sp_nec_term.nss +++ b/nwn/nwnprc/trunk/spells/sp_nec_term.nss @@ -42,6 +42,7 @@ #include "prc_inc_switch" #include "inc_utility" #include "prc_add_spell_dc" +#include "prc_misc_const" void main() @@ -110,8 +111,8 @@ void main() nDam += SpellDamagePerDice(oPC, nLevel); int nVile = nDam/2; int nNorm = (nDam - nVile); - //Vile damage is currently being applied as Positive damage - effect eVileDam = PRCEffectDamage(oTarget, nVile, DAMAGE_TYPE_POSITIVE); + + effect eVileDam = PRCEffectDamage(oTarget, nVile, DAMAGE_TYPE_VILE); effect eNormDam = PRCEffectDamage(oTarget, nNorm, DAMAGE_TYPE_MAGICAL); SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVileDam, oTarget); SPApplyEffectToObject(DURATION_TYPE_INSTANT, eNormDam, oTarget); diff --git a/nwn/nwnprc/trunk/spells/sp_orb_force.nss b/nwn/nwnprc/trunk/spells/sp_orb_force.nss index 67ff8e8b..e7eb4855 100644 --- a/nwn/nwnprc/trunk/spells/sp_orb_force.nss +++ b/nwn/nwnprc/trunk/spells/sp_orb_force.nss @@ -51,7 +51,7 @@ void main() if(nTouch) { ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PULSE_BOMB), oTarget); - ApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDam, DAMAGE_TYPE_MAGICAL), oTarget); + ApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDam, DAMAGE_TYPE_FORCE), oTarget); } } \ No newline at end of file diff --git a/nwn/nwnprc/trunk/spells/x2_s0_persblde.nss b/nwn/nwnprc/trunk/spells/x2_s0_persblde.nss index 21d0d30b..7d308322 100644 --- a/nwn/nwnprc/trunk/spells/x2_s0_persblde.nss +++ b/nwn/nwnprc/trunk/spells/x2_s0_persblde.nss @@ -1,6 +1,6 @@ //:://///////////////////////////////////////////// //:: Shelgarn's Persistent Blade -//:: X2_S0_PersBlde +//:: x2_s0_persblde //:: Copyright (c) 2001 Bioware Corp. //::////////////////////////////////////////////// /* @@ -13,6 +13,7 @@ //:: Last Updated By: Georg Zoeller, Aug 2003 //:: altered by mr_bumpkin Dec 4, 2003 for prc stuff #include "prc_inc_spells" +#include "inc_spirit_weapn" //Creates the weapon that the creature will be using. void spellsCreateItemForSummoned(object oCaster, float fDuration, int nClass) @@ -29,7 +30,8 @@ void spellsCreateItemForSummoned(object oCaster, float fDuration, int nClass) nStat = 1; object oWeapon; - string sWeapon = "NW_WSWDG001"; + //string sWeapon = "NW_WSWDG001"; + string sWeapon = "PRC_PERBLADE01"; object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oCaster); int i = 1; while(GetIsObjectValid(oSummon)) @@ -54,7 +56,118 @@ void spellsCreateItemForSummoned(object oCaster, float fDuration, int nClass) void main() { - if(!X2PreSpellCastCode()) return; +//:: Check the Spellhook + if (!X2PreSpellCastCode()) return; + +//:: Set the Spell School + PRCSetSchool(GetSpellSchool(PRCGetSpellId())); + + int nRunEvent = GetRunningEvent(); + + if (nRunEvent == EVENT_NPC_ONSPELLCASTAT) + { + // Get the caster of the spell + object oCaster = GetLastSpellCaster(); + int nCasterLevel = PRCGetCasterLevel(oCaster); + + if(DEBUG) DoDebug("x2_s0_persblde: EVENT_NPC_ONSPELLCASTAT triggered."); + + // Get the spell ID + int nSpellId = GetLastSpell(); + if(DEBUG) DoDebug("x2_s0_persblde: Dispel spell ID: " + IntToString(nSpellId)); + + // Check if the spell ID is a dispel spell + if (nSpellId == SPELL_DISPEL_MAGIC || nSpellId == SPELL_LESSER_DISPEL || nSpellId == SPELL_GREATER_DISPELLING || nSpellId == SPELL_MORDENKAINENS_DISJUNCTION + || nSpellId == SPELL_SLASHING_DISPEL || nSpellId == SPELL_DISPELLING_TOUCH || nSpellId == SPELL_PIXIE_DISPEL || nSpellId == SPELL_GREAT_WALL_OF_DISPEL) + { + // Get the target of the spell + object oTarget = OBJECT_SELF; + if(DEBUG) DoDebug("x2_s0_persblde: Spell targeted at: " + GetName(oTarget)); + + // Check if the target is OBJECT_SELF + if (oTarget == OBJECT_SELF) + { + // Retrieve the original caster of the Persistent Blade spell from oSummon + object oSummon = OBJECT_SELF; + object oOriginalCaster = GetLocalObject(oSummon, "MY_CASTER"); + + // Ensure oOriginalCaster is valid + if (GetIsObjectValid(oOriginalCaster)) + { + if(DEBUG) DoDebug("x2_s0_persblde: Original caster found. Caster level: " + IntToString(GetCasterLevel(oOriginalCaster))); + + // Determine the DC for the dispel check + int nDispelDC = 11 + GetCasterLevel(oOriginalCaster); + if(DEBUG) DoDebug("x2_s0_persblde: Dispel DC: " + IntToString(nDispelDC)); + + // Determine the maximum cap for the dispel check + int nDispelCap = 0; + if (nSpellId == SPELL_LESSER_DISPEL) + nDispelCap = 5; + else if (nSpellId == SPELL_DISPEL_MAGIC || nSpellId == SPELL_SLASHING_DISPEL || nSpellId == SPELL_DISPELLING_TOUCH || nSpellId == SPELL_PIXIE_DISPEL || nSpellId == INVOKE_VORACIOUS_DISPELLING) + nDispelCap = 10; + else if (nSpellId == SPELL_GREATER_DISPELLING || nSpellId == SPELL_GREAT_WALL_OF_DISPEL) + nDispelCap = 15; + else if (nSpellId == SPELL_MORDENKAINENS_DISJUNCTION) + nDispelCap = 0; // No cap for Disjunction + + // Roll for the dispel check + int nDispelRoll = d20(); + int nCappedCasterLevel = nCasterLevel; + + if (nDispelCap > 0 && nCasterLevel > nDispelCap) + nCappedCasterLevel = nDispelCap; + + nDispelRoll += nCappedCasterLevel; + + if(DEBUG) DoDebug("x2_s0_persblde: Dispel roll: " + IntToString(nDispelRoll) + " (Caster Level: " + IntToString(nCappedCasterLevel) + ", Cap: " + IntToString(nDispelCap) + ")"); + + // Compare the dispel result to the DC + if (nDispelRoll >= nDispelDC) + { + if(DEBUG) DoDebug("x2_s0_persblde: Dispel check succeeded."); + + // Dispel succeeded, destroy oSummon and the item in its right hand + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oSummon); + + if(DEBUG) DoDebug("x2_s0_persblde: Dispel Magic succeeded. Destroying Persistent Blade and its right hand item."); + + // Set flags and destroy objects with delays + SetPlotFlag(oWeapon, FALSE); + SetPlotFlag(oSummon, FALSE); + SetImmortal(oSummon, FALSE); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_DISPEL), oSummon); + + // Destroy the weapon and summon with delays + if (GetIsObjectValid(oWeapon)) + { + DelayCommand(0.5f, DestroyObject(oWeapon)); + if(DEBUG) DoDebug("x2_s0_persblde: Persistent Blade destruction scheduled."); + } + else + { + if(DEBUG) DoDebug("x2_s0_persblde: No weapon found in right hand."); + } + + DelayCommand(1.0f, DestroyObject(oSummon)); + if(DEBUG) DoDebug("x2_s0_persblde: Persistent Blade Summon destruction scheduled."); + } + else + { + RegisterSummonEvents(oSummon); + if(DEBUG) DoDebug("x2_s0_persblde: Dispel check failed."); + } + } + else + { + if(DEBUG) DoDebug("x2_s0_persblde: Original caster not found."); + } + } + } + return; + } + PRCSetSchool(SPELL_SCHOOL_CONJURATION); diff --git a/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk b/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk index 4681f983..97256908 100644 Binary files a/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk and b/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk differ diff --git a/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml b/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml index b5678af6..59eb7081 100644 --- a/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml +++ b/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml @@ -5393,6 +5393,24 @@ Base Critical Threat: x2 Base Damage Type: Piercing Weapon Size: Small Feats Required: Simple + Sanctified + Sanctified Damage + <CUSTOM0> Sanctified + Holy + Holy Damage + <CUSTOM0> Holy + Unholy + Unholy Damage + <CUSTOM0> Unholy + Falling + Falling Damage + <CUSTOM0> Falling + Ballistic + Ballistic Damage + <CUSTOM0> Ballistic + Dessication + Dessication Damage + <CUSTOM0> Dessication Untyped Untyped Damage <CUSTOM0> Untyped diff --git a/nwn/nwnprc/trunk/tlk/prc_consortium.tlk b/nwn/nwnprc/trunk/tlk/prc_consortium.tlk index 4681f983..97256908 100644 Binary files a/nwn/nwnprc/trunk/tlk/prc_consortium.tlk and b/nwn/nwnprc/trunk/tlk/prc_consortium.tlk differ