diff --git a/nwn/nwnprc/trunk/2das/cls_feat_acego.2da b/nwn/nwnprc/trunk/2das/cls_feat_acego.2da index 6958c5de..3131f78d 100644 --- a/nwn/nwnprc/trunk/2das/cls_feat_acego.2da +++ b/nwn/nwnprc/trunk/2das/cls_feat_acego.2da @@ -82,7 +82,7 @@ 78 FEAT_EPIC_TOUGHNESS_8 761 1 11 0 79 FEAT_EPIC_TOUGHNESS_9 762 1 11 0 80 FEAT_EPIC_TOUGHNESS_10 763 1 11 0 -81 FEAT_EPIC_REFLEXES 4058 1 11 0 +81 FEAT_EPIC_REFLEXES 585 1 11 0 82 FEAT_EPIC_SKILL_FOCUS_RIDE 3038 1 11 0 83 FEAT_EPIC_SKILL_FOCUS_JUMP 3040 1 11 0 84 FEAT_EPIC_SKILL_FOCUS_SENSE_MOTIVE 3042 1 11 0 diff --git a/nwn/nwnprc/trunk/2das/cls_feat_foclyr.2da b/nwn/nwnprc/trunk/2das/cls_feat_foclyr.2da index 16d2397b..8b4f1eb8 100644 --- a/nwn/nwnprc/trunk/2das/cls_feat_foclyr.2da +++ b/nwn/nwnprc/trunk/2das/cls_feat_foclyr.2da @@ -173,7 +173,7 @@ 169 FocusedSpellPenetrAbj 3135 1 2 0 170 FEAT_EPIC_LEADERSHIP 4366 1 2 0 171 FEAT_LEGENDARY_COMMANDER 4367 1 2 0 -172 FEAT_EPIC_PROWESS 4056 1 2 0 +172 FEAT_EPIC_PROWESS 584 1 2 0 173 FEAT_EPIC_REPUTATION 586 1 2 0 174 FAST_HEALING_1 4145 1 2 0 175 FAST_HEALING_2 4146 1 2 0 diff --git a/nwn/nwnprc/trunk/2das/cls_feat_justww.2da b/nwn/nwnprc/trunk/2das/cls_feat_justww.2da index 4e7f331b..7e790278 100644 --- a/nwn/nwnprc/trunk/2das/cls_feat_justww.2da +++ b/nwn/nwnprc/trunk/2das/cls_feat_justww.2da @@ -45,7 +45,7 @@ 41 FEAT_EPIC_SUPERIOR_INITIATIVE 753 1 -1 0 42 FEAT_EPIC_PERFECT_HEALTH 747 1 -1 0 43 FEAT_Improved_ManyShot 3350 1 -1 0 -44 FEAT_EPIC_PROWESS 4056 1 -1 0 +44 FEAT_EPIC_PROWESS 584 1 -1 0 45 FAST_HEALING_1 4145 1 -1 0 46 FAST_HEALING_2 4146 1 -1 0 47 FAST_HEALING_3 4147 1 -1 0 diff --git a/nwn/nwnprc/trunk/2das/cls_feat_monk.2da b/nwn/nwnprc/trunk/2das/cls_feat_monk.2da index 460b2fd8..7671afa6 100644 --- a/nwn/nwnprc/trunk/2das/cls_feat_monk.2da +++ b/nwn/nwnprc/trunk/2das/cls_feat_monk.2da @@ -126,7 +126,7 @@ 122 FEAT_EPIC_MONK 971 3 21 0 123 FEAT_EPIC_BLINDING_SPEED 491 1 -1 1 124 LegendaryWrestler 5173 1 -1 0 -125 FEAT_EPIC_PROWESS 4056 1 -1 0 +125 FEAT_EPIC_PROWESS 584 1 -1 0 126 FAST_HEALING_1 4145 1 -1 0 127 FAST_HEALING_2 4146 1 -1 0 128 FAST_HEALING_3 4147 1 -1 0 diff --git a/nwn/nwnprc/trunk/2das/cls_feat_nights.2da b/nwn/nwnprc/trunk/2das/cls_feat_nights.2da index 9e08f319..1fa25a7e 100644 --- a/nwn/nwnprc/trunk/2das/cls_feat_nights.2da +++ b/nwn/nwnprc/trunk/2das/cls_feat_nights.2da @@ -74,8 +74,8 @@ 70 FEAT_MANYSHOT 3306 1 -1 1 71 FEAT_IMP_MANYSHOT 3350 1 -1 1 72 FEAT_LINGERING_DAMAGE 3099 1 -1 0 -73 FEAT_EPIC_PROWESS 4056 1 -1 0 -74 FEAT_EPIC_REFLEXES 4058 1 -1 0 +73 FEAT_EPIC_PROWESS 584 1 -1 0 +74 FEAT_EPIC_REFLEXES 585 1 -1 0 75 FEAT_EPIC_GREAT_DEXTERITY_1 784 1 -1 0 76 FEAT_EPIC_GREAT_DEXTERITY_2 785 1 -1 0 77 FEAT_EPIC_GREAT_DEXTERITY_3 786 1 -1 0 diff --git a/nwn/nwnprc/trunk/2das/cls_feat_spnmld.2da b/nwn/nwnprc/trunk/2das/cls_feat_spnmld.2da index 21515dcd..ae823d9d 100644 --- a/nwn/nwnprc/trunk/2das/cls_feat_spnmld.2da +++ b/nwn/nwnprc/trunk/2das/cls_feat_spnmld.2da @@ -250,8 +250,8 @@ 246 Epic_RebindSoulmeld_Heart 9011 1 -1 1 247 Epic_RebindSoulmeld_Soul 9012 1 -1 1 248 Epic_RebindSoulmeld_Totem 9013 1 -1 1 -249 FEAT_EPIC_PROWESS 4056 1 -1 0 -250 FEAT_EPIC_REFLEXES 4058 1 -1 0 +249 FEAT_EPIC_PROWESS 584 1 -1 0 +250 FEAT_EPIC_REFLEXES 585 1 -1 0 251 FEAT_EPIC_ENERGY_RESISTANCE_COLD_1 533 1 -1 0 252 FEAT_EPIC_ENERGY_RESISTANCE_COLD_2 534 1 -1 0 253 FEAT_EPIC_ENERGY_RESISTANCE_COLD_3 535 1 -1 0 diff --git a/nwn/nwnprc/trunk/2das/cls_feat_ssn.2da b/nwn/nwnprc/trunk/2das/cls_feat_ssn.2da index c1008ce4..ffc9756a 100644 --- a/nwn/nwnprc/trunk/2das/cls_feat_ssn.2da +++ b/nwn/nwnprc/trunk/2das/cls_feat_ssn.2da @@ -110,7 +110,7 @@ 106 FEAT_EPIC_BLINDING_SPEED 491 1 -1 1 107 FEAT_EPIC_SUPERIOR_INITIATIVE 753 1 -1 0 108 FEAT_EPIC_DODGE 856 1 -1 0 -109 FEAT_EPIC_PROWESS 4056 1 -1 0 +109 FEAT_EPIC_PROWESS 584 1 -1 0 110 FAST_HEALING_1 4145 1 -1 0 111 FAST_HEALING_2 4146 1 -1 0 112 FAST_HEALING_3 4147 1 -1 0 diff --git a/nwn/nwnprc/trunk/2das/cls_feat_umbral.2da b/nwn/nwnprc/trunk/2das/cls_feat_umbral.2da index c9e88863..dd51b832 100644 --- a/nwn/nwnprc/trunk/2das/cls_feat_umbral.2da +++ b/nwn/nwnprc/trunk/2das/cls_feat_umbral.2da @@ -91,8 +91,8 @@ 87 FEAT_EPIC_SKILL_FOCUS_BLUFF 917 1 -1 0 88 FEAT_EPIC_SKILL_FOCUS_INTIMIDATE 918 1 -1 0 89 FEAT_LINGERING_DAMAGE 3099 1 -1 0 -90 FEAT_EPIC_PROWESS 4056 1 -1 0 -91 FEAT_EPIC_REFLEXES 4058 1 -1 0 +90 FEAT_EPIC_PROWESS 584 1 -1 0 +91 FEAT_EPIC_REFLEXES 585 1 -1 0 92 FEAT_EPIC_SKILL_FOCUS_RIDE 3038 1 -1 0 93 FEAT_EPIC_SKILL_FOCUS_JUMP 3040 1 -1 0 94 FEAT_EPIC_SKILL_FOCUS_SENSE_MOTIVE 3042 1 -1 0 diff --git a/nwn/nwnprc/trunk/2das/cls_pres_lgdr.2da b/nwn/nwnprc/trunk/2das/cls_pres_lgdr.2da index bc390ed6..f51bba6e 100644 --- a/nwn/nwnprc/trunk/2das/cls_pres_lgdr.2da +++ b/nwn/nwnprc/trunk/2das/cls_pres_lgdr.2da @@ -1,49 +1,65 @@ 2DA V2.0 - LABEL ReqType ReqParam1 ReqParam2 -0 AttackBonus BAB 23 **** -1 Intimidate SKILL 24 15 -2 ImprovedBullrush FEAT 2806 **** -3 GreatCleave FEAT 391 **** -4 LightngRef FEAT 24 **** -5 ImpCritDagger FEATOR 52 **** -6 ImpCritDart FEATOR 53 **** -7 ImpCritHXBow FEATOR 54 **** -8 ImpCritLgXBow FEATOR 55 **** -9 ImpCritLgMace FEATOR 56 **** -10 ImpCritMorn FEATOR 57 **** -11 ImpCritStaff FEATOR 58 **** -12 ImpCritSpear FEATOR 59 **** -13 ImpCritSickle FEATOR 60 **** -14 ImpCritSling FEATOR 61 **** -15 ImpCritUnArm FEATOR 62 **** -16 ImpCritLongBow FEATOR 63 **** -17 ImpCritShortBow FEATOR 64 **** -18 ImpCritShortSword FEATOR 65 **** -19 ImpCritRapier FEATOR 66 **** -20 ImpCritScim FEATOR 67 **** -21 ImpCritLSw FEATOR 68 **** -22 ImpCritGSw FEATOR 69 **** -23 ImpCritHAxe FEATOR 70 **** -24 ImpCritTAxe FEATOR 71 **** -25 ImpCritBAxe FEATOR 72 **** -26 ImpCritGAxe FEATOR 73 **** -27 ImpCritHalb FEATOR 74 **** -28 ImpCritLgHam FEATOR 75 **** -29 ImpCritLgFlail FEATOR 76 **** -30 ImpCritWHam FEATOR 77 **** -31 ImpCritHFlail FEATOR 78 **** -32 ImpCritKama FEATOR 79 **** -33 ImpCritKukri FEATOR 80 **** -34 ImpCritShur FEATOR 82 **** -35 ImpCritScy FEATOR 83 **** -36 ImpCritKatana FEATOR 84 **** -37 ImpCritBSw FEATOR 85 **** -38 ImpCritDMace FEATOR 87 **** -39 ImpCritDAxe FEATOR 88 **** -40 ImpCrit2Sw FEATOR 89 **** -41 ImpCrit_DwAxe FEATOR 954 **** -42 ImpCrit_Whip FEATOR 995 **** -43 ImpCrit_Mindblade FEATOR 3614 **** -44 ImpCrit_Trident FEATOR 1074 **** -45 ScriptVar VAR PRC_AllowLgDr 0 + LABEL ReqType ReqParam1 ReqParam2 +0 AttackBonus BAB 23 **** +1 Intimidate SKILL 24 15 +2 ImprovedBullrush FEAT 2806 **** +3 GreatCleave FEAT 391 **** +4 LightngRef FEAT 24 **** +5 ImpCritDagger FEATOR 52 **** +6 ImpCritDart FEATOR 53 **** +7 ImpCritHXBow FEATOR 54 **** +8 ImpCritLgXBow FEATOR 55 **** +9 ImpCritLgMace FEATOR 56 **** +10 ImpCritMorn FEATOR 57 **** +11 ImpCritStaff FEATOR 58 **** +12 ImpCritSpear FEATOR 59 **** +13 ImpCritSickle FEATOR 60 **** +14 ImpCritSling FEATOR 61 **** +15 ImpCritUnArm FEATOR 62 **** +16 ImpCritLongBow FEATOR 63 **** +17 ImpCritShortBow FEATOR 64 **** +18 ImpCritShortSword FEATOR 65 **** +19 ImpCritRapier FEATOR 66 **** +20 ImpCritScim FEATOR 67 **** +21 ImpCritLSw FEATOR 68 **** +22 ImpCritGSw FEATOR 69 **** +23 ImpCritHAxe FEATOR 70 **** +24 ImpCritTAxe FEATOR 71 **** +25 ImpCritBAxe FEATOR 72 **** +26 ImpCritGAxe FEATOR 73 **** +27 ImpCritHalb FEATOR 74 **** +28 ImpCritLgHam FEATOR 75 **** +29 ImpCritLgFlail FEATOR 76 **** +30 ImpCritWHam FEATOR 77 **** +31 ImpCritHFlail FEATOR 78 **** +32 ImpCritKama FEATOR 79 **** +33 ImpCritKukri FEATOR 80 **** +34 ImpCritShur FEATOR 82 **** +35 ImpCritScy FEATOR 83 **** +36 ImpCritKatana FEATOR 84 **** +37 ImpCritBSw FEATOR 85 **** +38 ImpCritDMace FEATOR 87 **** +39 ImpCritDAxe FEATOR 88 **** +40 ImpCrit2Sw FEATOR 89 **** +41 ImpCrit_DwAxe FEATOR 954 **** +42 ImpCrit_Whip FEATOR 995 **** +43 ImpCrit_Mindblade FEATOR 3614 **** +44 ImpCrit_Trident FEATOR 1074 **** +45 IMP_CRIT_LIGHT_LANCE FEATOR 24649 0 +46 IMP_CRIT_HEAVY_PICK FEATOR 24650 0 +47 IMP_CRIT_LIGHT_PICK FEATOR 24651 0 +48 IMP_CRIT_SAI FEATOR 24652 0 +49 IMP_CRIT_NUNCHAKU FEATOR 24653 0 +50 IMP_CRIT_FALCHION FEATOR 24654 0 +51 IMP_CRIT_SAP FEATOR 24655 0 +52 IMP_CRIT_KATAR FEATOR 24656 0 +53 IMP_CRIT_HEAVY_MACE FEATOR 24657 0 +54 IMP_CRIT_MAUL FEATOR 24658 0 +55 IMP_CRIT_DBL_SCIMITAR FEATOR 24659 0 +56 IMP_CRIT_GOAD FEATOR 24660 0 +57 IMP_CRIT_ELVEN_LIGHTBLADE FEATOR 24701 0 +58 IMP_CRIT_ELVEN_COURTBLADE FEATOR 24717 0 +59 IMP_CRIT_EAGLE_CLAW FEATOR 24725 0 +60 IMP_CRIT_ELVEN_THINBLADE FEATOR 24709 0 +61 ScriptVar VAR PRC_AllowLgDr 0 diff --git a/nwn/nwnprc/trunk/2das/feat.2da b/nwn/nwnprc/trunk/2das/feat.2da index 4472fb2e..8d2b458e 100644 --- a/nwn/nwnprc/trunk/2das/feat.2da +++ b/nwn/nwnprc/trunk/2das/feat.2da @@ -5286,7 +5286,7 @@ 5282 ProfaneAgony 16834997 16834998 ife_prfnlflch **** **** **** **** **** **** **** **** 294 **** 0 0 1 **** **** 3792 **** 0.5 -1 **** **** 310 313 **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1 5283 DivineIntercession 16834995 16834996 ife_telep_manag **** **** **** **** **** **** **** **** 294 **** 0 0 1 **** **** 3791 **** 0.5 -1 **** **** 324 323 **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1 5284 InlindlSchool 16834993 16834994 ife_X2DCrtWhip **** **** **** 13 **** **** **** **** 389 42 **** **** 1 **** **** 2723 **** **** -1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_INLINDL_SCHOOL 2 **** **** **** **** **** 0 0 -5285 VaeSchool 16834991 16834992 ife_X2WpCh 7 **** **** **** **** **** **** **** 2807 993 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SNAP_KICK **** **** **** **** **** **** **** 0 +5285 VaeSchool 16834991 16834992 ife_X2WpCh 7 **** **** **** **** **** **** **** 993 **** **** **** 1 **** **** **** **** **** **** **** **** 2807 4079 **** **** **** **** **** **** **** FEAT_SNAP_KICK **** **** **** **** **** **** **** 0 5286 ThreeMountains 16834989 16834990 ife_X2DiviWrth **** 13 **** **** **** **** **** **** 2806 6 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SNAP_KICK **** **** **** **** **** **** **** 0 5287 SpinningHalberd 16834987 16834988 ife_X2CritDHalb **** **** **** **** **** **** **** **** 112 **** 0 0 1 **** **** 2724 **** 0.5 -1 **** **** 41 374 **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1 5288 HighSwordLowAxe 16834985 16834986 ife_wepspec_Dax **** **** **** **** **** **** **** **** 2807 41 0 0 1 **** **** 2793 **** 0.5 -1 **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1 diff --git a/nwn/nwnprc/trunk/2das/fileends.2da b/nwn/nwnprc/trunk/2das/fileends.2da index ce891a7e..f39e650f 100644 --- a/nwn/nwnprc/trunk/2das/fileends.2da +++ b/nwn/nwnprc/trunk/2das/fileends.2da @@ -6,19 +6,19 @@ 2 gender 2 3 portraits 1100 4 skills 50 -5 cls_feat_* 600 +5 cls_feat_* 3090 6 cls_skill_* 50 7 cls_psipw_* 180 -8 feat 26001 -9 cls_pres_* 25 +8 feat 26500 +9 cls_pres_* 70 10 hen_familiar 20 11 hen_companion 30 12 domains 70 13 soundset 450 -14 spells 19400 +14 spells 20000 15 appearance 500 16 wingmodel 10 17 tailmodel 10 -18 race_feat_* 30 +18 race_feat_* 70 19 ireq_* 50 20 item_to_ireq 700 diff --git a/nwn/nwnprc/trunk/include/inc_newspellbook.nss b/nwn/nwnprc/trunk/include/inc_newspellbook.nss index 93ff3f19..909b93dc 100644 --- a/nwn/nwnprc/trunk/include/inc_newspellbook.nss +++ b/nwn/nwnprc/trunk/include/inc_newspellbook.nss @@ -86,6 +86,7 @@ void CheckNewSpellbooks(object oPC); void NewSpellbookSpell(int nClass, int nSpellbookType, int nMetamagic = METAMAGIC_NONE, int bInstantSpell = FALSE); void CastSpontaneousSpell(int nClass, int bInstantSpell = FALSE); void CastPreparedSpell(int nClass, int nMetamagic = METAMAGIC_NONE, int bInstantSpell = FALSE); +void ProcessPreparedSpellLevel(object oPC, int nClass, int nSpellLevel, int nLevel, int nAbility, string sClass, string sFile, string sArrayName, int nSpellbookType, object oSkin); ////////////////////////////////////////////////// /* Constants */ @@ -859,8 +860,41 @@ void SetupSpells(object oPC, int nClass) // For spontaneous spellbooks, set up an array that tells how many spells of each level they can cast // And add casting feats for each spell known to the caster's hide + if(nSpellbookType == SPELLBOOK_TYPE_SPONTANEOUS) //:: Fixed by TiredByFirelight + { + // Spell slots + int nSpellLevel, nSlots; + for(nSpellLevel = 0; nSpellLevel <= 9; nSpellLevel++) + { + nSlots = GetSlotCount(nLevel, nSpellLevel, nAbility, nClass, oPC); + persistant_array_set_int(oPC, sArrayName, nSpellLevel, nSlots); + } - if(nSpellbookType == SPELLBOOK_TYPE_SPONTANEOUS) + int i; + for(i = 0; i < persistant_array_get_size(oPC, "Spellbook" + sClass); i++) + { //adding feats + SpontaneousSpellSetupLoop(oPC, nClass, sFile, oSkin, i); + } + }// end if - Spontaneous spellbook + + // For prepared spellbooks, add spell uses and use feats according to spells memorised list + else if(nSpellbookType == SPELLBOOK_TYPE_PREPARED && !GetIsBioSpellCastClass(nClass)) + { + int nSpellLevel, nSlot, nSlots, nSpellbookID; + string sArrayName2, sIDX; + + // clearing existing spells + persistant_array_delete(oPC, sArrayName); + + for(nSpellLevel = 0; nSpellLevel <= 9; nSpellLevel++) + { + //Delay of 0.01, to ensure it runs after persistant_array_delete() which is a lot of 0.0 delay commands, but before other spellbook stuff + DelayCommand(0.01, ProcessPreparedSpellLevel(oPC, nClass, nSpellLevel, nLevel, nAbility, sClass, sFile, sArrayName, nSpellbookType, oSkin)); + } + } +} + +/* if(nSpellbookType == SPELLBOOK_TYPE_SPONTANEOUS) { // Spell slots int nSpellLevel, nSlots; @@ -910,8 +944,28 @@ void SetupSpells(object oPC, int nClass) } } } +} */ + +void ProcessPreparedSpellLevel(object oPC, int nClass, int nSpellLevel, int nLevel, int nAbility, string sClass, string sFile, string sArrayName, int nSpellbookType, object oSkin) +{ + string sArrayName2 = "Spellbook" + IntToString(nSpellLevel) + "_" + sClass; + string sIDX = "SpellbookIDX" + IntToString(nSpellLevel) + "_" + sClass; + int nSlots = GetSlotCount(nLevel, nSpellLevel, nAbility, nClass, oPC); + int nSlot; + for(nSlot = 0; nSlot < nSlots; nSlot++) + { + int nSpellbookID = persistant_array_get_int(oPC, sArrayName2, nSlot); + if(nSpellbookID != 0) + { + AddSpellUse(oPC, nSpellbookID, nClass, sFile, sArrayName, nSpellbookType, oSkin, + StringToInt(Get2DACache(sFile, "FeatID", nSpellbookID)), + StringToInt(Get2DACache(sFile, "IPFeatID", nSpellbookID)), + sIDX); + } + } } + void CheckAndRemoveFeat(object oHide, itemproperty ipFeat) { int nSubType = GetItemPropertySubType(ipFeat); diff --git a/nwn/nwnprc/trunk/newspellbook/inv_dra_endrexp.nss b/nwn/nwnprc/trunk/newspellbook/inv_dra_endrexp.nss index bbef122e..b18899df 100644 --- a/nwn/nwnprc/trunk/newspellbook/inv_dra_endrexp.nss +++ b/nwn/nwnprc/trunk/newspellbook/inv_dra_endrexp.nss @@ -26,6 +26,63 @@ void main() { if (!PreInvocationCastCode()) return; + object oCaster = OBJECT_SELF; + object oTarget = PRCGetSpellTargetObject(); + int nCasterLevel = GetInvokerLevel(oCaster, GetInvokingClass()); + int bValid = FALSE; + int nBPIndex = 0; + int nBPTIndex = 0; + + int bValidTarget = FALSE; + int bValidCaster = FALSE; + + effect eVis = EffectVisualEffect(VFX_IMP_ELEMENTAL_PROTECTION); + + //Add to array on target of breaths they're protected from + + if(!array_exists(oTarget, "BreathProtected")) + array_create(oTarget, "BreathProtected"); + + while(!bValidTarget) + { + if(array_get_object(oTarget, "BreathProtected", nBPIndex) == OBJECT_INVALID) + { + array_set_object(oTarget, "BreathProtected", nBPIndex, oCaster); + bValidTarget = TRUE; + } + else + nBPIndex++; + } + + if(!array_exists(oCaster, "BreathProtectTargets")) + array_create(oCaster, "BreathProtectTargets"); + + while(!bValidCaster) + { + if(array_get_object(oCaster, "BreathProtectTargets", nBPTIndex) == OBJECT_INVALID) + { + array_set_object(oCaster, "BreathProtectTargets", nBPTIndex, oTarget); + if(DEBUG) DoDebug("Storing target: " + GetName(oTarget)); + bValidCaster = TRUE; + } + else + nBPTIndex++; + } + + //add to array on caster of targets protected by their spell for resting cleanup + + if(!array_exists(oCaster, "BreathProtectTargets")) + array_create(oCaster, "BreathProtectTargets"); + + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); + DispelMonitor(oCaster, oTarget, INVOKE_ENDURE_EXPOSURE); +} + + +/* void main() +{ + if (!PreInvocationCastCode()) return; + object oCaster = OBJECT_SELF; object oTarget = PRCGetSpellTargetObject(); int nCasterLevel = GetInvokerLevel(oCaster, GetInvokingClass()); @@ -73,6 +130,7 @@ void main() ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); DispelMonitor(oCaster, oTarget, INVOKE_ENDURE_EXPOSURE); } + */ void DispelMonitor(object oCaster, object oTarget, int nSpellID) { diff --git a/nwn/nwnprc/trunk/newspellbook/tob_bloodclaw.nss b/nwn/nwnprc/trunk/newspellbook/tob_bloodclaw.nss index 59c399c8..30fe3860 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_bloodclaw.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_bloodclaw.nss @@ -56,6 +56,28 @@ void RendingClaws(object oInitiator, object oTarget) } void Scent(object oInitiator) +{ + effect eTest = GetFirstEffect(oInitiator); + while (GetIsEffectValid(eTest)) + { + if (GetEffectTag(eTest) == "BCM_SCENT_ACTIVE") + return; + eTest = GetNextEffect(oInitiator); + } + + effect eLink; + effect eScent; + + eScent = EffectLinkEffects(EffectSkillIncrease(SKILL_SPOT, 4), EffectSkillIncrease(SKILL_LISTEN, 4)); + eLink = EffectLinkEffects(eScent, EffectSkillIncrease(SKILL_SEARCH, 4)); + eLink = EffectLinkEffects(eLink, EffectBonusFeat(FEAT_KEEN_SENSE)); + eLink = TagEffect(eLink, "BCM_SCENT_ACTIVE"); + eLink = UnyieldingEffect(eLink); + + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oInitiator); +} + +/* void Scent(object oInitiator) { object oSkin = GetPCSkin(oInitiator); @@ -65,7 +87,7 @@ void Scent(object oInitiator) IPSafeAddItemProperty(oSkin, ItemPropertyBonusFeat(IP_CONST_FEAT_KEEN_SENSES), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eScent, oInitiator); -} +} */ void main() { diff --git a/nwn/nwnprc/trunk/newspellbook/tob_dmnd_avlbld.nss b/nwn/nwnprc/trunk/newspellbook/tob_dmnd_avlbld.nss index d9676cd8..97085edd 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_dmnd_avlbld.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_dmnd_avlbld.nss @@ -52,11 +52,37 @@ void main() { int nHit = 1; int nPenalty = 0; - DelayCommand(0.1, Owieowieowowow(oInitiator, oTarget, nHit, nPenalty)); + DelayCommand(0.1, Owieowieowowow(oInitiator, oTarget, nHit, nPenalty)); } } void Owieowieowowow(object oInitiator, object oTarget, int nHit, int nPenalty) +{ + if (GetLocalInt(oInitiator, "SupernalAttack")) nPenalty += 1; + + if (nHit == 1) + { + effect eNone; + PerformAttack(oTarget, oInitiator, eNone, 0.0, nPenalty, 0, 0, "Avalanche of Blades Hit", "Avalanche of Blades Miss"); + + // Check result of attack + if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) + { + nPenalty -= 4; + if (GetLocalInt(oInitiator, "SupernalAttack")) nPenalty -= 1; + + // Continue the loop only on hit + DelayCommand(0.1, Owieowieowowow(oInitiator, oTarget, 1, nPenalty)); + + DelayCommand(3.0, DeleteLocalInt(oTarget, "PRCCombat_StruckByAttack")); + } + // No else block: if the attack missed, don't queue another call + } +} + + + +/* void Owieowieowowow(object oInitiator, object oTarget, int nHit, int nPenalty) { if (GetLocalInt(oInitiator, "SupernalAttack")) nPenalty += 1; if(nHit == 1) @@ -74,4 +100,4 @@ void Owieowieowowow(object oInitiator, object oTarget, int nHit, int nPenalty) //Again! Again! DelayCommand(0.1, Owieowieowowow(oInitiator, oTarget, nHit, nPenalty)); } -} \ No newline at end of file +} */ \ No newline at end of file diff --git a/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk b/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk index 4a1fede7..3fb6c2e9 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 bf7d40ae..19f4b936 100644 --- a/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml +++ b/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml @@ -25418,7 +25418,7 @@ Use: Automatic. Aura of Menace Type of Feat: Racial Prerequisite: Race-Specific. -Specifics: The creature has a righteous aura around it. Any creature that fails its will save(DC:16+Cha) is shaken. +Specifics: The creature has a righteous aura around it. Any creature that fails its will save is shaken. THe DC of the will save is calculated as follows: 10 (Base) + 2 (Racial Bonus) + 3 (1/2 Outsider HD) + Charisma bonus. Use: Selected. Hound Archon Aid Hound Archon Detect Evil @@ -71356,7 +71356,7 @@ When within your own black labyrinth, you are immune to the last two effects (mo Some prestige classes can advance invoking or shadowcasting instead of spellcasting. Spellcraft doesn't provide a bonus to your save vs. spells in 3e Dungeons & Dragons. This is reflected in the PRC8. Tumble doesn't provide a bonus to your Armor Class in 3e Dungeons & Dragons. This is reflected in the PRC8. - Feats for Alternate Magic Systems (Psionics, Incarnum, etc) are all organized under a Masterfeat. Psionic Feats, ToB Feats, etc... + Feats for Alternate Magic Systems (Psionics, Incarnum, etc) are all organized under a Masterfeat. Psionic Feats, ToB Feats, etc... Favored Mystery - Black Labyrinth Holy Warrior Type of Feat: Reserve @@ -71537,8 +71537,8 @@ Special Abilities: - Level Adjustment: +1 FcL Plt - ### BEGIN INVOKER MARKER FEATS# - Sorcerous Spellcasting (Hobgoblin Warsoul) + ### BEGIN INVOKER MARKER FEATS# + Sorcerous Spellcasting (Hobgoblin Warsoul) Sorcerous Casting: Hobgoblin Warsouls cast spells as a Sorcerer of their hit dice (9th level). Abjurant Champion Invoking (Warlock) Acolye of the Skin Invoking (Warlock) diff --git a/nwn/nwnprc/trunk/tlk/prc_consortium.tlk b/nwn/nwnprc/trunk/tlk/prc_consortium.tlk index b9b80352..4a1fede7 100644 Binary files a/nwn/nwnprc/trunk/tlk/prc_consortium.tlk and b/nwn/nwnprc/trunk/tlk/prc_consortium.tlk differ