2025/12/06 Update

Added Inscribe Epic Runes.
Added Great Intelligence and Inscribe Epic Runes as Runecaster epic bons feats.
Changed Runecaster epic bonus feat progression to 1 every 4 levels past 10th.
Bardic PrCs should be able to take Lingering Song & Extra Music as general feats.
Forsakers can't use psionics, invocations, spellfire, shadowcasting, truenaming, binding, soulmelds or Supernatural Martial Maneuvers.
Fixed elven courtblade / ambidexterity bug.
Added more guardrails to prevent self-damage from onHit spells during PerformAttack().
Updated GetProperTarget()
Removed ableist slur.
RHD casters should work with JPM now.
Reworked Blood in the Water's effect icon.
Fixed Seize Item's VFX.
RHD casters should be able to enter Dragon Disciple.
Sharp Note doesn't step on Dragonfire Inspiration anymore.
This commit is contained in:
Jaysyn904
2025-12-06 22:55:23 -05:00
parent a4fd246266
commit ce7d550670
29 changed files with 641 additions and 228 deletions

View File

@@ -1,3 +1,21 @@
# PRC8
# PRC8 (Player Resource Consortium 8)
## Overview
PRC8 is a comprehensive content expansion mod for Neverwinter Nights: Enhanced Edition that adds new races, classes, spells, psionics, prestige classes, and extensive customization options. The mod includes both client-side content and server-side enhancements for persistent worlds.
## Requirements
- Neverwinter Nights: EE updated to the latest patch
- Microsoft .NET Framework Redistributable Package (Windows only)
## Installation
Repo for collaboration to update the PRC to NWN:EE which brings 8 class slots & many mod breaking changes.
Extract archive contents to your NWN directory according to file type:
| Extension | Directory |
|-----------|-----------|
| hak | hak |
| hif | hak |
| erf | erf |
| tlk | tlk |
| 2da | override |
| mod | module |

View File

@@ -16,48 +16,48 @@
12 1
13 0
14 0
15 1
16 0
15 0
16 1
17 0
18 1
18 0
19 0
20 0
21 1
20 1
21 0
22 0
23 0
24 1
25 0
26 0
27 1
28 0
27 0
28 1
29 0
30 1
30 0
31 0
32 0
33 1
32 1
33 0
34 0
35 0
36 1
37 0
38 0
39 1
40 0
39 0
40 1
41 0
42 1
42 0
43 0
44 0
45 1
44 1
45 0
46 0
47 0
48 1
49 0
50 0
51 1
52 0
51 0
52 1
53 0
54 1
54 0
55 0
56 0
57 1
56 1
57 0
58 0
59 0

View File

@@ -28,169 +28,180 @@
24 FEAT_RUNECASTER_SPELLCASTING_SPSHAMAN 19544 2 1 0
25 FEAT_RUNECASTER_SPELLCASTING_UR_PRIEST 19565 2 1 0
26 FEAT_RUNECASTER_SPELLCASTING_VASSAL 19581 2 1 0
27 FEAT_EPIC_AUTOMATIC_QUICKEN_1 857 1 2 0
28 FEAT_EPIC_AUTOMATIC_QUICKEN_2 858 1 2 0
29 FEAT_EPIC_AUTOMATIC_QUICKEN_3 859 1 2 0
30 FEAT_EPIC_AUTOMATIC_SILENT_SPELL_1 860 1 2 0
31 FEAT_EPIC_AUTOMATIC_SILENT_SPELL_2 861 1 2 0
32 FEAT_EPIC_AUTOMATIC_SILENT_SPELL_3 862 1 2 0
33 FEAT_EPIC_AUTOMATIC_STILL_SPELL_1 863 1 2 0
34 FEAT_EPIC_AUTOMATIC_STILL_SPELL_2 864 1 2 0
35 FEAT_EPIC_AUTOMATIC_STILL_SPELL_3 865 1 2 0
36 FEAT_EPIC_SPELL_FOCUS_ABJURATION 610 1 2 0
37 FEAT_EPIC_SPELL_FOCUS_CONJURATION 611 1 2 0
38 FEAT_EPIC_SPELL_FOCUS_DIVINATION 612 1 2 0
39 FEAT_EPIC_SPELL_FOCUS_ENCHANTMENT 613 1 2 0
40 FEAT_EPIC_SPELL_FOCUS_EVOCATION 614 1 2 0
41 FEAT_EPIC_SPELL_FOCUS_ILLUSION 615 1 2 0
42 FEAT_EPIC_SPELL_FOCUS_NECROMANCY 616 1 2 0
43 FEAT_EPIC_SPELL_FOCUS_TRANSMUTATION 617 1 2 0
44 FEAT_EPIC_SPELL_PENETRATION 618 1 2 0
45 FEAT_EPIC_IMPROVED_COMBAT_CASTING 696 1 2 0
46 FEAT_EPIC_TOUGHNESS_1 754 1 2 0
47 FEAT_EPIC_TOUGHNESS_2 755 1 2 0
48 FEAT_EPIC_TOUGHNESS_3 756 1 2 0
49 FEAT_EPIC_TOUGHNESS_4 757 1 2 0
50 FEAT_EPIC_TOUGHNESS_5 758 1 2 0
51 FEAT_EPIC_TOUGHNESS_6 759 1 2 0
52 FEAT_EPIC_TOUGHNESS_7 760 1 2 0
53 FEAT_EPIC_TOUGHNESS_8 761 1 2 0
54 FEAT_EPIC_TOUGHNESS_9 762 1 2 0
55 FEAT_EPIC_TOUGHNESS_10 763 1 2 0
56 FEAT_EPIC_SPELLCASTING 4073 1 2 0
57 IGNORE_MATERIAL_COMPONENTS 2597 1 2 0
58 FEAT_EPIC_ARMOR_SKIN 490 1 2 0
59 FEAT_EPIC_BLINDING_SPEED 491 1 2 1
60 FEAT_EPIC_ENERGY_RESISTANCE_COLD_1 533 1 2 0
61 FEAT_EPIC_ENERGY_RESISTANCE_COLD_2 534 1 2 0
62 FEAT_EPIC_ENERGY_RESISTANCE_COLD_3 535 1 2 0
63 FEAT_EPIC_ENERGY_RESISTANCE_COLD_4 536 1 2 0
64 FEAT_EPIC_ENERGY_RESISTANCE_COLD_5 537 1 2 0
65 FEAT_EPIC_ENERGY_RESISTANCE_COLD_6 538 1 2 0
66 FEAT_EPIC_ENERGY_RESISTANCE_COLD_7 539 1 2 0
67 FEAT_EPIC_ENERGY_RESISTANCE_COLD_8 540 1 2 0
68 FEAT_EPIC_ENERGY_RESISTANCE_COLD_9 541 1 2 0
69 FEAT_EPIC_ENERGY_RESISTANCE_COLD_10 542 1 2 0
70 FEAT_EPIC_ENERGY_RESISTANCE_ACID_1 543 1 2 0
71 FEAT_EPIC_ENERGY_RESISTANCE_ACID_2 544 1 2 0
72 FEAT_EPIC_ENERGY_RESISTANCE_ACID_3 545 1 2 0
73 FEAT_EPIC_ENERGY_RESISTANCE_ACID_4 546 1 2 0
74 FEAT_EPIC_ENERGY_RESISTANCE_ACID_5 547 1 2 0
75 FEAT_EPIC_ENERGY_RESISTANCE_ACID_6 548 1 2 0
76 FEAT_EPIC_ENERGY_RESISTANCE_ACID_7 549 1 2 0
77 FEAT_EPIC_ENERGY_RESISTANCE_ACID_8 550 1 2 0
78 FEAT_EPIC_ENERGY_RESISTANCE_ACID_9 551 1 2 0
79 FEAT_EPIC_ENERGY_RESISTANCE_ACID_10 552 1 2 0
80 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_1 553 1 2 0
81 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_2 554 1 2 0
82 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_3 555 1 2 0
83 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_4 556 1 2 0
84 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_5 557 1 2 0
85 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_6 558 1 2 0
86 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_7 559 1 2 0
87 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_8 560 1 2 0
88 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_9 561 1 2 0
89 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_10 562 1 2 0
90 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_1 563 1 2 0
91 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_2 564 1 2 0
92 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_3 565 1 2 0
93 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_4 566 1 2 0
94 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_5 567 1 2 0
95 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_6 568 1 2 0
96 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_7 569 1 2 0
97 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_8 570 1 2 0
98 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_9 571 1 2 0
99 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_10 572 1 2 0
100 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_1 573 1 2 0
101 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_2 574 1 2 0
102 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_3 575 1 2 0
103 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_4 576 1 2 0
104 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_5 577 1 2 0
105 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_6 578 1 2 0
106 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_7 579 1 2 0
107 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_8 580 1 2 0
108 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_9 581 1 2 0
109 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_10 582 1 2 0
110 FEAT_EPIC_FORTITUDE 583 1 2 0
111 FEAT_EPIC_PROWESS 584 1 2 0
112 FEAT_EPIC_GREAT_CHARISMA_1 764 1 2 0
113 FEAT_EPIC_GREAT_CHARISMA_2 765 1 2 0
114 FEAT_EPIC_GREAT_CHARISMA_3 766 1 2 0
115 FEAT_EPIC_GREAT_CHARISMA_4 767 1 2 0
116 FEAT_EPIC_GREAT_CHARISMA_5 768 1 2 0
117 FEAT_EPIC_GREAT_CHARISMA_6 769 1 2 0
118 FEAT_EPIC_GREAT_CHARISMA_7 770 1 2 0
119 FEAT_EPIC_GREAT_CHARISMA_8 771 1 2 0
120 FEAT_EPIC_GREAT_CHARISMA_9 772 1 2 0
121 FEAT_EPIC_GREAT_CHARISMA_10 773 1 2 0
122 FEAT_EPIC_GREAT_WISDOM_1 804 1 2 0
123 FEAT_EPIC_GREAT_WISDOM_2 805 1 2 0
124 FEAT_EPIC_GREAT_WISDOM_3 806 1 2 0
125 FEAT_EPIC_GREAT_WISDOM_4 807 1 2 0
126 FEAT_EPIC_GREAT_WISDOM_5 808 1 2 0
127 FEAT_EPIC_GREAT_WISDOM_6 809 1 2 0
128 FEAT_EPIC_GREAT_WISDOM_7 810 1 2 0
129 FEAT_EPIC_GREAT_WISDOM_8 811 1 2 0
130 FEAT_EPIC_GREAT_WISDOM_9 812 1 2 0
131 FEAT_EPIC_GREAT_WISDOM_10 813 1 2 0
132 FEAT_EPIC_PERFECT_HEALTH 747 1 2 0
133 FEAT_EPIC_PLANAR_TURNING 854 1 2 0
134 FEAT_TENACIOUSMAGIC 2961 1 2 0
135 FAST_HEALING_1 4145 1 2 0
136 FAST_HEALING_2 4146 1 2 0
137 FAST_HEALING_3 4147 1 2 0
138 FEAT_EPIC_WEAPON_FOCUS_CLUB 619 1 -1 0
139 FEAT_EPIC_WEAPON_FOCUS_DAGGER 620 1 -1 0
140 FEAT_EPIC_WEAPON_FOCUS_DART 621 1 -1 0
141 FEAT_EPIC_WEAPON_FOCUS_HEAVYCROSSBOW 622 1 -1 0
142 FEAT_EPIC_WEAPON_FOCUS_LIGHTCROSSBOW 623 1 -1 0
143 FEAT_EPIC_WEAPON_FOCUS_LIGHTMACE 624 1 -1 0
144 FEAT_EPIC_WEAPON_FOCUS_MORNINGSTAR 625 1 -1 0
145 FEAT_EPIC_WEAPON_FOCUS_QUARTERSTAFF 626 1 -1 0
146 FEAT_EPIC_WEAPON_FOCUS_SHORTSPEAR 627 1 -1 0
147 FEAT_EPIC_WEAPON_FOCUS_SICKLE 628 1 -1 0
148 FEAT_EPIC_WEAPON_FOCUS_SLING 629 1 -1 0
149 FEAT_EPIC_WEAPON_FOCUS_UNARMED 630 1 -1 0
150 FEAT_EPIC_WEAPON_FOCUS_LONGBOW 631 1 -1 0
151 FEAT_EPIC_WEAPON_FOCUS_SHORTBOW 632 1 -1 0
152 FEAT_EPIC_WEAPON_FOCUS_SHORTSWORD 633 1 -1 0
153 FEAT_EPIC_WEAPON_FOCUS_RAPIER 634 1 -1 0
154 FEAT_EPIC_WEAPON_FOCUS_SCIMITAR 635 1 -1 0
155 FEAT_EPIC_WEAPON_FOCUS_LONGSWORD 636 1 -1 0
156 FEAT_EPIC_WEAPON_FOCUS_GREATSWORD 637 1 -1 0
157 FEAT_EPIC_WEAPON_FOCUS_HANDAXE 638 1 -1 0
158 FEAT_EPIC_WEAPON_FOCUS_THROWINGAXE 639 1 -1 0
159 FEAT_EPIC_WEAPON_FOCUS_BATTLEAXE 640 1 -1 0
160 FEAT_EPIC_WEAPON_FOCUS_GREATAXE 641 1 -1 0
161 FEAT_EPIC_WEAPON_FOCUS_HALBERD 642 1 -1 0
162 FEAT_EPIC_WEAPON_FOCUS_LIGHTHAMMER 643 1 -1 0
163 FEAT_EPIC_WEAPON_FOCUS_LIGHTFLAIL 644 1 -1 0
164 FEAT_EPIC_WEAPON_FOCUS_WARHAMMER 645 1 -1 0
165 FEAT_EPIC_WEAPON_FOCUS_HEAVYFLAIL 646 1 -1 0
166 FEAT_EPIC_WEAPON_FOCUS_KAMA 647 1 -1 0
167 FEAT_EPIC_WEAPON_FOCUS_KUKRI 648 1 -1 0
168 FEAT_EPIC_WEAPON_FOCUS_SHURIKEN 649 1 -1 0
169 FEAT_EPIC_WEAPON_FOCUS_SCYTHE 650 1 -1 0
170 FEAT_EPIC_WEAPON_FOCUS_KATANA 651 1 -1 0
171 FEAT_EPIC_WEAPON_FOCUS_BASTARDSWORD 652 1 -1 0
172 FEAT_EPIC_WEAPON_FOCUS_DIREMACE 653 1 -1 0
173 FEAT_EPIC_WEAPON_FOCUS_DOUBLEAXE 654 1 -1 0
174 FEAT_EPIC_WEAPON_FOCUS_TWOBLADEDSWORD 655 1 -1 0
175 EPIC_WEAPON_FOCUS_LANCE 24613 1 -1 0
176 EPIC_WEAPON_FOCUS_HEAVY_PICK 24614 1 -1 0
177 EPIC_WEAPON_FOCUS_LIGHT_PICK 24615 1 -1 0
178 EPIC_WEAPON_FOCUS_SAI 24616 1 -1 0
179 EPIC_WEAPON_FOCUS_NUNCHAKU 24617 1 -1 0
180 EPIC_WEAPON_FOCUS_FALCHION 24618 1 -1 0
181 EPIC_WEAPON_FOCUS_SAP 24619 1 -1 0
182 EPIC_WEAPON_FOCUS_KATAR 24620 1 -1 0
183 EPIC_WEAPON_FOCUS_HEAVY_MACE 24621 1 -1 0
184 EPIC_WEAPON_FOCUS_MAUL 24622 1 -1 0
185 EPIC_WEAPON_FOCUS_DBL_SCIMITAR 24623 1 -1 0
186 EPIC_WEAPON_FOCUS_GOAD 24624 1 -1 0
187 EPIC_WEAPON_FOCUS_ELVEN_LIGHTBLADE 24698 1 -1 0
188 EPIC_WEAPON_FOCUS_ELVEN_THINBLADE 24706 1 -1 0
189 EPIC_WEAPON_FOCUS_ELVEN_COURTBLADE 24714 1 -1 0
190 FEAT_EPIC_WEAPON_FOCUS_DWAXE 956 1 -1 0
191 FEAT_EPIC_WEAPON_FOCUS_WHIP 997 1 -1 0
192 Epic_WeaponFocus_Mindblade 3618 1 -1 0
27 FEAT_EPIC_INSCRIBE_EPIC_RUNES 2549 1 -1 0
28 FEAT_EPIC_AUTOMATIC_QUICKEN_1 857 1 -1 0
29 FEAT_EPIC_AUTOMATIC_QUICKEN_2 858 1 -1 0
30 FEAT_EPIC_AUTOMATIC_QUICKEN_3 859 1 -1 0
31 FEAT_EPIC_AUTOMATIC_SILENT_SPELL_1 860 1 -1 0
32 FEAT_EPIC_AUTOMATIC_SILENT_SPELL_2 861 1 -1 0
33 FEAT_EPIC_AUTOMATIC_SILENT_SPELL_3 862 1 -1 0
34 FEAT_EPIC_AUTOMATIC_STILL_SPELL_1 863 1 -1 0
35 FEAT_EPIC_AUTOMATIC_STILL_SPELL_2 864 1 -1 0
36 FEAT_EPIC_AUTOMATIC_STILL_SPELL_3 865 1 -1 0
37 FEAT_EPIC_SPELL_FOCUS_ABJURATION 610 1 -1 0
38 FEAT_EPIC_SPELL_FOCUS_CONJURATION 611 1 -1 0
39 FEAT_EPIC_SPELL_FOCUS_DIVINATION 612 1 -1 0
40 FEAT_EPIC_SPELL_FOCUS_ENCHANTMENT 613 1 -1 0
41 FEAT_EPIC_SPELL_FOCUS_EVOCATION 614 1 -1 0
42 FEAT_EPIC_SPELL_FOCUS_ILLUSION 615 1 -1 0
43 FEAT_EPIC_SPELL_FOCUS_NECROMANCY 616 1 -1 0
44 FEAT_EPIC_SPELL_FOCUS_TRANSMUTATION 617 1 -1 0
45 FEAT_EPIC_SPELL_PENETRATION 618 1 -1 0
46 FEAT_EPIC_IMPROVED_COMBAT_CASTING 696 1 -1 0
47 FEAT_EPIC_TOUGHNESS_1 754 1 -1 0
48 FEAT_EPIC_TOUGHNESS_2 755 1 -1 0
49 FEAT_EPIC_TOUGHNESS_3 756 1 -1 0
50 FEAT_EPIC_TOUGHNESS_4 757 1 -1 0
51 FEAT_EPIC_TOUGHNESS_5 758 1 -1 0
52 FEAT_EPIC_TOUGHNESS_6 759 1 -1 0
53 FEAT_EPIC_TOUGHNESS_7 760 1 -1 0
54 FEAT_EPIC_TOUGHNESS_8 761 1 -1 0
55 FEAT_EPIC_TOUGHNESS_9 762 1 -1 0
56 FEAT_EPIC_TOUGHNESS_10 763 1 -1 0
57 FEAT_EPIC_SPELLCASTING 4073 1 -1 0
58 IGNORE_MATERIAL_COMPONENTS 2597 1 -1 0
59 FEAT_EPIC_ARMOR_SKIN 490 1 -1 0
60 FEAT_EPIC_BLINDING_SPEED 491 1 -1 1
61 FEAT_EPIC_ENERGY_RESISTANCE_COLD_1 533 1 -1 0
62 FEAT_EPIC_ENERGY_RESISTANCE_COLD_2 534 1 -1 0
63 FEAT_EPIC_ENERGY_RESISTANCE_COLD_3 535 1 -1 0
64 FEAT_EPIC_ENERGY_RESISTANCE_COLD_4 536 1 -1 0
65 FEAT_EPIC_ENERGY_RESISTANCE_COLD_5 537 1 -1 0
66 FEAT_EPIC_ENERGY_RESISTANCE_COLD_6 538 1 -1 0
67 FEAT_EPIC_ENERGY_RESISTANCE_COLD_7 539 1 -1 0
68 FEAT_EPIC_ENERGY_RESISTANCE_COLD_8 540 1 -1 0
69 FEAT_EPIC_ENERGY_RESISTANCE_COLD_9 541 1 -1 0
70 FEAT_EPIC_ENERGY_RESISTANCE_COLD_10 542 1 -1 0
71 FEAT_EPIC_ENERGY_RESISTANCE_ACID_1 543 1 -1 0
72 FEAT_EPIC_ENERGY_RESISTANCE_ACID_2 544 1 -1 0
73 FEAT_EPIC_ENERGY_RESISTANCE_ACID_3 545 1 -1 0
74 FEAT_EPIC_ENERGY_RESISTANCE_ACID_4 546 1 -1 0
75 FEAT_EPIC_ENERGY_RESISTANCE_ACID_5 547 1 -1 0
76 FEAT_EPIC_ENERGY_RESISTANCE_ACID_6 548 1 -1 0
77 FEAT_EPIC_ENERGY_RESISTANCE_ACID_7 549 1 -1 0
78 FEAT_EPIC_ENERGY_RESISTANCE_ACID_8 550 1 -1 0
79 FEAT_EPIC_ENERGY_RESISTANCE_ACID_9 551 1 -1 0
80 FEAT_EPIC_ENERGY_RESISTANCE_ACID_10 552 1 -1 0
81 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_1 553 1 -1 0
82 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_2 554 1 -1 0
83 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_3 555 1 -1 0
84 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_4 556 1 -1 0
85 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_5 557 1 -1 0
86 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_6 558 1 -1 0
87 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_7 559 1 -1 0
88 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_8 560 1 -1 0
89 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_9 561 1 -1 0
90 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_10 562 1 -1 0
91 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_1 563 1 -1 0
92 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_2 564 1 -1 0
93 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_3 565 1 -1 0
94 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_4 566 1 -1 0
95 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_5 567 1 -1 0
96 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_6 568 1 -1 0
97 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_7 569 1 -1 0
98 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_8 570 1 -1 0
99 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_9 571 1 -1 0
100 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_10 572 1 -1 0
101 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_1 573 1 -1 0
102 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_2 574 1 -1 0
103 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_3 575 1 -1 0
104 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_4 576 1 -1 0
105 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_5 577 1 -1 0
106 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_6 578 1 -1 0
107 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_7 579 1 -1 0
108 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_8 580 1 -1 0
109 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_9 581 1 -1 0
110 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_10 582 1 -1 0
111 FEAT_EPIC_FORTITUDE 583 1 -1 0
112 FEAT_EPIC_PROWESS 584 1 -1 0
113 FEAT_EPIC_GREAT_CHARISMA_1 764 1 -1 0
114 FEAT_EPIC_GREAT_CHARISMA_2 765 1 -1 0
115 FEAT_EPIC_GREAT_CHARISMA_3 766 1 -1 0
116 FEAT_EPIC_GREAT_CHARISMA_4 767 1 -1 0
117 FEAT_EPIC_GREAT_CHARISMA_5 768 1 -1 0
118 FEAT_EPIC_GREAT_CHARISMA_6 769 1 -1 0
119 FEAT_EPIC_GREAT_CHARISMA_7 770 1 -1 0
120 FEAT_EPIC_GREAT_CHARISMA_8 771 1 -1 0
121 FEAT_EPIC_GREAT_CHARISMA_9 772 1 -1 0
122 FEAT_EPIC_GREAT_CHARISMA_10 773 1 -1 0
123 FEAT_EPIC_GREAT_WISDOM_1 804 1 -1 0
124 FEAT_EPIC_GREAT_WISDOM_2 805 1 -1 0
125 FEAT_EPIC_GREAT_WISDOM_3 806 1 -1 0
126 FEAT_EPIC_GREAT_WISDOM_4 807 1 -1 0
127 FEAT_EPIC_GREAT_WISDOM_5 808 1 -1 0
128 FEAT_EPIC_GREAT_WISDOM_6 809 1 -1 0
129 FEAT_EPIC_GREAT_WISDOM_7 810 1 -1 0
130 FEAT_EPIC_GREAT_WISDOM_8 811 1 -1 0
131 FEAT_EPIC_GREAT_WISDOM_9 812 1 -1 0
132 FEAT_EPIC_GREAT_WISDOM_10 813 1 -1 0
133 FEAT_EPIC_PERFECT_HEALTH 747 1 -1 0
134 FEAT_EPIC_PLANAR_TURNING 854 1 -1 0
135 FEAT_TENACIOUSMAGIC 2961 1 -1 0
136 FAST_HEALING_1 4145 1 -1 0
137 FAST_HEALING_2 4146 1 -1 0
138 FAST_HEALING_3 4147 1 -1 0
139 FEAT_EPIC_WEAPON_FOCUS_CLUB 619 1 -1 0
140 FEAT_EPIC_WEAPON_FOCUS_DAGGER 620 1 -1 0
141 FEAT_EPIC_WEAPON_FOCUS_DART 621 1 -1 0
142 FEAT_EPIC_WEAPON_FOCUS_HEAVYCROSSBOW 622 1 -1 0
143 FEAT_EPIC_WEAPON_FOCUS_LIGHTCROSSBOW 623 1 -1 0
144 FEAT_EPIC_WEAPON_FOCUS_LIGHTMACE 624 1 -1 0
145 FEAT_EPIC_WEAPON_FOCUS_MORNINGSTAR 625 1 -1 0
146 FEAT_EPIC_WEAPON_FOCUS_QUARTERSTAFF 626 1 -1 0
147 FEAT_EPIC_WEAPON_FOCUS_SHORTSPEAR 627 1 -1 0
148 FEAT_EPIC_WEAPON_FOCUS_SICKLE 628 1 -1 0
149 FEAT_EPIC_WEAPON_FOCUS_SLING 629 1 -1 0
150 FEAT_EPIC_WEAPON_FOCUS_UNARMED 630 1 -1 0
151 FEAT_EPIC_WEAPON_FOCUS_LONGBOW 631 1 -1 0
152 FEAT_EPIC_WEAPON_FOCUS_SHORTBOW 632 1 -1 0
153 FEAT_EPIC_WEAPON_FOCUS_SHORTSWORD 633 1 -1 0
154 FEAT_EPIC_WEAPON_FOCUS_RAPIER 634 1 -1 0
155 FEAT_EPIC_WEAPON_FOCUS_SCIMITAR 635 1 -1 0
156 FEAT_EPIC_WEAPON_FOCUS_LONGSWORD 636 1 -1 0
157 FEAT_EPIC_WEAPON_FOCUS_GREATSWORD 637 1 -1 0
158 FEAT_EPIC_WEAPON_FOCUS_HANDAXE 638 1 -1 0
159 FEAT_EPIC_WEAPON_FOCUS_THROWINGAXE 639 1 -1 0
160 FEAT_EPIC_WEAPON_FOCUS_BATTLEAXE 640 1 -1 0
161 FEAT_EPIC_WEAPON_FOCUS_GREATAXE 641 1 -1 0
162 FEAT_EPIC_WEAPON_FOCUS_HALBERD 642 1 -1 0
163 FEAT_EPIC_WEAPON_FOCUS_LIGHTHAMMER 643 1 -1 0
164 FEAT_EPIC_WEAPON_FOCUS_LIGHTFLAIL 644 1 -1 0
165 FEAT_EPIC_WEAPON_FOCUS_WARHAMMER 645 1 -1 0
166 FEAT_EPIC_WEAPON_FOCUS_HEAVYFLAIL 646 1 -1 0
167 FEAT_EPIC_WEAPON_FOCUS_KAMA 647 1 -1 0
168 FEAT_EPIC_WEAPON_FOCUS_KUKRI 648 1 -1 0
169 FEAT_EPIC_WEAPON_FOCUS_SHURIKEN 649 1 -1 0
170 FEAT_EPIC_WEAPON_FOCUS_SCYTHE 650 1 -1 0
171 FEAT_EPIC_WEAPON_FOCUS_KATANA 651 1 -1 0
172 FEAT_EPIC_WEAPON_FOCUS_BASTARDSWORD 652 1 -1 0
173 FEAT_EPIC_WEAPON_FOCUS_DIREMACE 653 1 -1 0
174 FEAT_EPIC_WEAPON_FOCUS_DOUBLEAXE 654 1 -1 0
175 FEAT_EPIC_WEAPON_FOCUS_TWOBLADEDSWORD 655 1 -1 0
176 EPIC_WEAPON_FOCUS_LANCE 24613 1 -1 0
177 EPIC_WEAPON_FOCUS_HEAVY_PICK 24614 1 -1 0
178 EPIC_WEAPON_FOCUS_LIGHT_PICK 24615 1 -1 0
179 EPIC_WEAPON_FOCUS_SAI 24616 1 -1 0
180 EPIC_WEAPON_FOCUS_NUNCHAKU 24617 1 -1 0
181 EPIC_WEAPON_FOCUS_FALCHION 24618 1 -1 0
182 EPIC_WEAPON_FOCUS_SAP 24619 1 -1 0
183 EPIC_WEAPON_FOCUS_KATAR 24620 1 -1 0
184 EPIC_WEAPON_FOCUS_HEAVY_MACE 24621 1 -1 0
185 EPIC_WEAPON_FOCUS_MAUL 24622 1 -1 0
186 EPIC_WEAPON_FOCUS_DBL_SCIMITAR 24623 1 -1 0
187 EPIC_WEAPON_FOCUS_GOAD 24624 1 -1 0
188 EPIC_WEAPON_FOCUS_ELVEN_LIGHTBLADE 24698 1 -1 0
189 EPIC_WEAPON_FOCUS_ELVEN_THINBLADE 24706 1 -1 0
190 EPIC_WEAPON_FOCUS_ELVEN_COURTBLADE 24714 1 -1 0
191 FEAT_EPIC_WEAPON_FOCUS_DWAXE 956 1 -1 0
192 FEAT_EPIC_WEAPON_FOCUS_WHIP 997 1 -1 0
193 Epic_WeaponFocus_Mindblade 3618 1 -1 0
194 FEAT_EPIC_GREAT_INTELLIGENCE_1 794 1 -1 0
195 FEAT_EPIC_GREAT_INTELLIGENCE_2 795 1 -1 0
196 FEAT_EPIC_GREAT_INTELLIGENCE_3 796 1 -1 0
197 FEAT_EPIC_GREAT_INTELLIGENCE_4 797 1 -1 0
198 FEAT_EPIC_GREAT_INTELLIGENCE_5 798 1 -1 0
199 FEAT_EPIC_GREAT_INTELLIGENCE_6 799 1 -1 0
200 FEAT_EPIC_GREAT_INTELLIGENCE_7 800 1 -1 0
201 FEAT_EPIC_GREAT_INTELLIGENCE_8 801 1 -1 0
202 FEAT_EPIC_GREAT_INTELLIGENCE_9 802 1 -1 0
203 FEAT_EPIC_GREAT_INTELLIGENCE_10 803 1 -1 0

View File

@@ -424,8 +424,8 @@
420 ArcaneDefenseIll 2820 2823 ife_X1ADIll **** **** **** **** **** **** **** **** 170 **** 0 0 1 **** **** **** **** 1 **** 7 **** **** **** **** **** **** **** **** **** **** FEAT_ARCANE_DEFENSE_ILLUSION 6 **** **** **** **** **** 0 1
421 ArcaneDefenseNec 2821 2823 ife_X1ADNec **** **** **** **** **** **** **** **** 171 **** 0 0 1 **** **** **** **** 1 **** 7 **** **** **** **** **** **** **** **** **** **** FEAT_ARCANE_DEFENSE_NECROMANCY 6 **** **** **** **** **** 0 1
422 ArcaneDefenseTra 2822 2823 ife_X1ADTra **** **** **** **** **** **** **** **** 172 **** 0 0 1 **** **** **** **** 1 **** 7 **** **** **** **** **** **** **** **** **** **** FEAT_ARCANE_DEFENSE_TRANSMUTATION 6 **** **** **** **** **** 0 1
423 ExtraMusic 2824 2825 ife_X1ExMus **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** 11 **** **** **** FEAT_EXTRA_MUSIC 6 **** 1 1 **** **** 0 1
424 LingeringSong 2826 2827 ife_X1LingSong **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** 11 **** **** **** FEAT_LINGERING_SONG 6 **** 1 1 **** **** 0 1
423 ExtraMusic 2824 2825 ife_X1ExMus **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** 11 **** **** **** FEAT_EXTRA_MUSIC 6 **** 1 **** **** **** 0 1
424 LingeringSong 2826 2827 ife_X1LingSong **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** 11 **** **** **** FEAT_LINGERING_SONG 6 **** 1 **** **** **** 0 1
425 DirtyFighting 2803 2804 ife_X1DirFig 2 **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_DIRTY_FIGHTING 6 **** **** **** **** **** 0 1
426 ResistDisease 2828 2829 ife_X1ResDis **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_RESIST_DISEASE 6 **** **** **** **** **** 0 1
427 ResistEnergyCold 2830 2835 ife_X1ResCol **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** 8 **** **** **** **** **** **** **** **** **** **** FEAT_RESIST_ENERGY_COLD 6 **** **** **** **** 8 0 1
@@ -2463,7 +2463,7 @@
2459 TactileTrapsmith 16824612 16824613 ife_lightflex **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
2460 AugmentHealing 16824614 16824615 ife_X1ResDis **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** 4 4 **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
2461 DetectEvil 16827574 16827575 is_detect_evil **** **** **** **** **** **** **** **** **** **** 0 0 0 15 5 3201 **** 0.5 -1 **** **** **** **** **** **** **** **** **** **** **** FEAT_DEATH_DOMAIN_POWER 6 **** **** **** **** **** 0 1
2462 InscribeRune 16831916 16831917 ife_X2PlnrTurn **** **** **** 13 **** **** **** **** **** **** 0 0 1 **** **** 1621 **** 1 -1 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
2462 InscribeRune 16831916 16831917 ife_X2PlnrTurn **** **** **** 13 **** **** **** **** **** **** 0 0 1 **** **** 1621 **** 1 **** **** 1 **** **** **** **** **** 38 1 **** **** FEAT_INSCRIBE_RUNE 4 **** **** **** **** **** 0 0
2463 RuneCraft 16831973 16831974 ife_legendaryart **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
2464 RunePower 16831975 16831976 Ife_epMagmaBurst **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
2465 ImprovedRunecasting 16831977 16831978 ife_dweomerthief **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1624 **** 1 -1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 0
@@ -2550,7 +2550,7 @@
2546 FEAT_EPIC_SYMBIOSIS_3 16822293 16822256 ife_damred **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 2547 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_SMBIOIS_1 4 **** **** **** **** **** 0 1
2547 FEAT_EPIC_SYMBIOSIS_4 16822294 16822256 ife_damred **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_SMBIOIS_1 4 **** **** **** **** **** 0 1
2548 SwiftAmbusher 16834560 16834561 ife_X2CritDLBow **** **** **** **** **** **** **** **** 345 3715 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
2549 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 1
2549 EPIC_FEAT_INSCRIBE_EPIC_RUNES 16989389 16989390 ife_X2PlnrTurn **** **** **** 19 **** **** **** **** 2462 **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** 25 24 **** **** EPIC_FEAT_INSCRIBE_EPIC_RUNES 4 **** **** **** **** **** 1 0
2550 FEAT_ES_TRANS_1 16822325 16822326 ife_rage **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 2551 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ES_TRANS_1 4 **** **** **** **** **** 0 1
2551 FEAT_ES_TRANS_2 16822327 16822326 ife_rage **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 2552 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ES_TRANS_2 4 **** **** **** **** **** 0 1
2552 FEAT_ES_TRANS_3 16822328 16822326 ife_rage **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ES_TRANS_3 4 **** **** **** **** **** 0 1

View File

@@ -46,5 +46,5 @@
42 16828866 Unholy_Power 16828867 M 21 *_*_E_*_* **** **** 3221_*_*_*_*_* 8 **** 1 17_4_31_8 48_17_70_1 **** **** **** **** 1 ****
43 16828844 Vorpal 16828845 M 18 **** **** **** 18_539_*_*_*_* 5 **** **** 48_24_70_* **** **** **** **** **** 0 1
44 16828868 Wounding 16828869 M 10 **** **** **** *_*_*_123_533_* 2 **** **** 48_25_70_1 **** **** **** **** **** 0 ****
45 16824501 Psychokinetic 16838249 **** 10 **** **** **** *_*_*_2343_14054_* 1 **** **** 16_5_6_*_* **** **** **** **** **** 0 ****
46 16834308 Echoblade 16834309 M 10 *_*_*_*_1 **** **** **** 1 **** **** 104_*_*_* **** **** **** **** **** 0 ****
45 16824501 Psychokinetic 16838249 **** 10 **** **** **** *_*_*_2343_14054_* 1 **** **** 16_5_6_* **** **** **** **** **** 0 ****
46 16834308 Echoblade 16834309 M 10 *_*_*_*_1 **** **** **** 1 **** **** 104_0_0_0 **** **** **** **** **** 0 ****

View File

@@ -77,6 +77,15 @@ int PreInvocationCastCode()
int nContinue = !ExecuteScriptAndReturnInt("prespellcode", oInvoker);
//---------------------------------------------------------------------------
// Block forsakers from using invocations
//---------------------------------------------------------------------------
if(GetLevelByClass(CLASS_TYPE_FORSAKER, oInvoker) > 0)
{
SendMessageToPC(oInvoker, "Forsakers cannot use invocations.");
return FALSE;
}
//---------------------------------------------------------------------------
// Break any spell require maintaining concentration
//---------------------------------------------------------------------------
@@ -168,3 +177,4 @@ int PreInvocationCastCode()
return nContinue;
}
//:: void main (){}

View File

@@ -444,6 +444,7 @@ int Get2DALineFromItemprop(string sFile, itemproperty ip, object oItem)
}
break;
}
case ITEM_PROPERTY_ECHOBLADE: return 46; break;
}
}
return -1;

View File

@@ -1319,6 +1319,7 @@ const int FEAT_SOMATIC_WEAPONRY = 5186;
// Forgotten Realms Campaign Setting
const int FEAT_INSCRIBE_RUNE = 2462;
const int EPIC_FEAT_INSCRIBE_EPIC_RUNES = 2549;
// Miniature Handbook
const int FEAT_SHIELDMATE = 3258;

View File

@@ -426,7 +426,7 @@ int Vile_Feat(int iTypeWeap)
GetHasFeat(FEAT_VILE_MARTIAL_RAPIER) ||
GetHasFeat(FEAT_VILE_MARTIAL_ELVEN_THINBLADE));
case BASE_ITEM_ELVEN_COURTBLADE: return GetHasFeat(FEAT_VILE_MARTIAL_GREATSWORD ||
case BASE_ITEM_ELVEN_COURTBLADE: return (GetHasFeat(FEAT_VILE_MARTIAL_GREATSWORD) ||
GetHasFeat(FEAT_VILE_MARTIAL_ELVEN_COURTBLADE));
case BASE_ITEM_DOUBLE_SCIMITAR: return GetHasFeat(FEAT_VILE_MARTIAL_DBL_SCIMITAR);

View File

@@ -1322,7 +1322,29 @@ int DoTrip(object oPC, object oTarget, int nExtraBonus, int nGenerateAoO = TRUE,
DelayCommand(0.0, PerformAttack(oTarget, oPC, eNone, 0.0, 0, 0, 0, "Improved Trip Free Attack Hit", "Improved Trip Free Attack Miss"));
}
}
else // If you fail, enemy gets a counter trip attempt, using Strength
else // If you fail, enemy gets a counter trip attempt, using Strength
{
if(!nCounterTrip)
{
nTargetStat = GetAbilityModifier(ABILITY_STRENGTH, oTarget) + GetCombatMoveCheckBonus(oTarget, COMBAT_MOVE_TRIP, FALSE, TRUE);
FloatingTextStringOnCreature("You have failed on your Trip attempt",oPC, FALSE);
// Roll counter trip attempt
nTargetCheck = nTargetStat + nTargetBonus + d20();
nPCCheck = nPCStat + nPCBonus + d20();
// If counters aren't allowed, don't knock em down
// Its down here to allow the text message to go through
SendMessageToPC(oPC, "Enemy Counter Trip Check: "+IntToString(nPCCheck)+" vs "+IntToString(nTargetCheck));
SetLocalInt(oPC, "TripDifference", nTargetCheck - nPCCheck);
DelayCommand(2.0, DeleteLocalInt(oPC, "TripDifference"));
}
if (nTargetCheck >= nPCCheck && nCounterTrip)
{
// Knock em down
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oPC, 6.0);
}
}
/* else // If you fail, enemy gets a counter trip attempt, using Strength
{
nTargetStat = GetAbilityModifier(ABILITY_STRENGTH, oTarget) + GetCombatMoveCheckBonus(oTarget, COMBAT_MOVE_TRIP, FALSE, TRUE);
FloatingTextStringOnCreature("You have failed on your Trip attempt",oPC, FALSE);
@@ -1339,7 +1361,7 @@ int DoTrip(object oPC, object oTarget, int nExtraBonus, int nGenerateAoO = TRUE,
}
SetLocalInt(oPC, "TripDifference", nTargetCheck - nPCCheck);
DelayCommand(2.0, DeleteLocalInt(oPC, "TripDifference"));
}
} */
}
else
FloatingTextStringOnCreature("You have failed on your Trip attempt",oPC, FALSE);

View File

@@ -1,11 +1,68 @@
//:: prc_inc_nat_hb
//::
//:: void main(){}
void DoNaturalWeaponHB(object oPC = OBJECT_SELF);
#include "prc_inc_combat"
#include "prc_inc_template"
object GetProperTarget(object oPC, object oTarget)
/**
* Finds a valid enemy target in melee range when the original target is invalid.
* Now includes input validation, LOS checks, configurable radius, and target priority.
*
* @param oPC The creature seeking a new target
* @param oTarget The original (invalid) target
* @param fRadius Search radius in meters (optional, defaults to melee range)
* @return A valid enemy target or OBJECT_INVALID if none found
*/
object GetProperTarget(object oPC, object oTarget, float fRadius = MELEE_RANGE_METERS)
{
// Input validation
if(!GetIsObjectValid(oPC))
{
DoDebug("GetProperTarget(): Invalid oPC parameter");
return OBJECT_INVALID;
}
// Use target list system for better target selection
PurgeTargetList(oPC);
location lPC = GetLocation(oPC);
object oTest = MyFirstObjectInShape(SHAPE_SPHERE, fRadius, lPC, TRUE, OBJECT_TYPE_CREATURE);
while(GetIsObjectValid(oTest))
{
// Basic validation checks
if(oTest != oPC && // Not self
GetIsEnemy(oPC, oTest) && // Is enemy
GetIsInMeleeRange(oPC, oTest) && // In melee range
!GetIsDead(oTest) && // Is alive
LineOfSightObject(oPC, oTest)) // Has line of sight
{
// Add to target list with priority based on distance (nearest first)
AddToTargetList(oTest, oPC, INSERTION_BIAS_DISTANCE, FALSE);
}
oTest = MyNextObjectInShape(SHAPE_SPHERE, fRadius, lPC, TRUE, OBJECT_TYPE_CREATURE);
}
// Get the highest priority target (nearest enemy)
object oBestTarget = GetTargetListHead(oPC);
PurgeTargetList(oPC);
if(GetIsObjectValid(oBestTarget))
{
DoDebug("GetProperTarget(): Selected target " + GetName(oBestTarget) +
" for " + GetName(oPC));
return oBestTarget;
}
// No valid target found
DoDebug("GetProperTarget(): No valid target found for " + GetName(oPC));
return OBJECT_INVALID;
}
/* object GetProperTarget(object oPC, object oTarget)
{
location lTarget = GetLocation(oPC);
// Use the function to get the closest creature as a target
@@ -23,7 +80,7 @@ object GetProperTarget(object oPC, object oTarget)
}
return oTarget;
}
} */
void DoNaturalAttack(object oWeapon)
{
@@ -452,6 +509,16 @@ void DoNaturalWeaponHB(object oPC = OBJECT_SELF)
oWeapon = CreateObject(OBJECT_TYPE_ITEM, sResRef, lLimbo);
DoDebug(PRC_TEXT_WHITE + "prc_inc_nat_hb >> DoNaturalWeaponHB: creature weapon object found!!!");
}
// Check for enhancements after creating the weapon object
int nEnhance = GetLocalInt(oPC, "PRC_NAT_WEAPON_ENHANCE");
if(nEnhance > 0)
{
DoDebug(PRC_TEXT_WHITE + "prc_inc_nat_hb >> DoNaturalWeaponHB: Applying enhancement.");
float fDuration = GetLocalFloat(oPC, "PRC_NAT_WEAPON_ENH_DUR");
IPSafeAddItemProperty(oWeapon, ItemPropertyEnhancementBonus(nEnhance), fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE);
}
DoDebug("prc_inc_nat_hb >> DoNaturalWeaponHB: scheduling a secondary natural attack with "+GetName(oWeapon)+" at delay "+FloatToString(fDelay));
//do the attack within a delay

View File

@@ -302,7 +302,7 @@ object CICraftBrewPotion(object oCreator, int nSpellID )
return OBJECT_INVALID;
}
/* //just a tad retarded, don't you think? other crafting feats are not similarly restricted
/* //just a tad silly, don't you think? other crafting feats are not similarly restricted
//Uses per day
int nUsesAllowed;
@@ -710,6 +710,7 @@ object CICraftScribeScroll(object oCreator, int nSpellID)
return oTarget;
}
*/
// -----------------------------------------------------------------------------
// Returns TRUE if the player used the last spell to brew a potion
// -----------------------------------------------------------------------------
@@ -865,7 +866,6 @@ These dont work as IPs since they are hardcoded */
}
// -----------------------------------------------------------------------------
// Returns TRUE if the player used the last spell to create a scroll
// -----------------------------------------------------------------------------
@@ -1133,6 +1133,9 @@ These dont work as IPs since they are hardcoded */
return FALSE;
}
// -----------------------------------------------------------------------------
// Returns TRUE if the player used the last spell to craft a staff
// -----------------------------------------------------------------------------
int CICraftCheckCraftStaff(object oSpellTarget, object oCaster, int nSpellID = 0)
{
@@ -1281,6 +1284,9 @@ These dont work as IPs since they are hardcoded */
return TRUE;
}
// -----------------------------------------------------------------------------
// Returns TRUE if the player used the last spell to craft a rod
// -----------------------------------------------------------------------------
int CICraftCheckCraftRod(object oSpellTarget, object oCaster, int nSpellID = 0)
{
@@ -1427,6 +1433,7 @@ These dont work as IPs since they are hardcoded */
return TRUE;
}
int InscribeRune(object oTarget = OBJECT_INVALID, object oCaster = OBJECT_INVALID, int nSpell = 0)
{
if(!GetIsObjectValid(oCaster)) oCaster = OBJECT_SELF;
@@ -1478,8 +1485,9 @@ int InscribeRune(object oTarget = OBJECT_INVALID, object oCaster = OBJECT_INVALI
if(!GetIsObjectValid(oTarget)) oTarget = PRCGetSpellTargetObject();
int nCaster = GetAlternativeCasterLevel(oCaster, PRCGetCasterLevel(oCaster));
//:: [TO DO] make Inscribe Epic Rune.
if(nCaster > 20) nCaster = 20;
//:: Check for Inscribe Epic Runes and cap CL at 20 if it doesn't exist.
int bEpicRunes = GetHasFeat(EPIC_FEAT_INSCRIBE_EPIC_RUNES, oCaster);
if (!bEpicRunes) { if(nCaster > 20) nCaster = 20; }
int nDC = PRCGetSaveDC(oTarget, oCaster);
if(!nSpell) nSpell = PRCGetSpellId();

View File

@@ -75,6 +75,15 @@ int PsiPrePowerCastCode()
int nContinue = !ExecuteScriptAndReturnInt("prespellcode", oManifester);
//---------------------------------------------------------------------------
// Forsakers can't use psionics
//---------------------------------------------------------------------------
if (nContinue && GetLevelByClass(CLASS_TYPE_FORSAKER, oManifester))
{
FloatingTextStringOnCreature("Forsakers cannot manifest psionic powers!", oManifester, FALSE);
nContinue = FALSE;
}
//---------------------------------------------------------------------------
// Break any spell require maintaining concentration
//---------------------------------------------------------------------------
@@ -209,3 +218,4 @@ int PsiPrePowerCastCode()
return nContinue;
}
//:: void main (){}

View File

@@ -132,6 +132,15 @@ int ShadPreMystCastCode()
int nContinue = !ExecuteScriptAndReturnInt("prespellcode",oShadow);
//---------------------------------------------------------------------------
// Block forsakers from using shadowcasting
//---------------------------------------------------------------------------
if(GetLevelByClass(CLASS_TYPE_FORSAKER, oShadow) > 0)
{
SendMessageToPC(oShadow, "Forsakers cannot use the power of shadowcasting.");
return FALSE;
}
//---------------------------------------------------------------------------
// Break any spell require maintaining concentration
//---------------------------------------------------------------------------
@@ -277,4 +286,6 @@ int ShadPreMystCastCode()
if(DEBUG) DoDebug("ShadPreMystCastCode nContinue #6: " + IntToString(nContinue));
return nContinue;
}
}
//:: void main (){}

View File

@@ -78,7 +78,14 @@ int PreManeuverCastCode()
//---------------------------------------------------------------------------
if(nContinue)
nContinue = !GetLocalInt(oInitiator, "CrusaderBreak");
//---------------------------------------------------------------------------
// Forsakers can't use supernatural maneuvers
//---------------------------------------------------------------------------
if (nContinue && GetIsManeuverSupernatural(nMoveId) && GetLevelByClass(CLASS_TYPE_FORSAKER, oInitiator))
{
FloatingTextStringOnCreature("Forsakers cannot use supernatural maneuvers!", oInitiator, FALSE);
nContinue = FALSE;
}
//---------------------------------------------------------------------------
// Run NullPsionicsField Check
//---------------------------------------------------------------------------

View File

@@ -42,6 +42,16 @@ int TruePreUtterCastCode()
int nContinue = !ExecuteScriptAndReturnInt("prespellcode",oTrueSpeaker);
//---------------------------------------------------------------------------
// Block forsakers from using truenaming
//---------------------------------------------------------------------------
if(GetLevelByClass(CLASS_TYPE_FORSAKER, oTrueSpeaker) > 0)
{
SendMessageToPC(oTrueSpeaker, "Forsakers cannot use the power of truenaming.");
return FALSE;
}
//---------------------------------------------------------------------------
// Break any spell require maintaining concentration
//---------------------------------------------------------------------------

View File

@@ -50,7 +50,7 @@ void PopulateList(object oPC, int nLevel, int iClass, int nChoice)
while(i < MaxValue)
{
nSpellID = StringToInt(Get2DACache(sFile, "RealSpellID", array_get_int(oToken, "Lkup", i)));
if(GetHasSpell(nSpellID, oPC))
if(PRCGetHasSpell(nSpellID, oPC))
{
string sName = GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpellID)));
AddChoice(sName, nChoice, oPC);
@@ -79,7 +79,7 @@ void PopulateList(object oPC, int nLevel, int iClass, int nChoice)
while(i < MaxValue)
{
nSpellID = StringToInt(Get2DACache(sFile, "RealSpellID", array_get_int(oToken, "Lkup", i)));
if(GetHasSpell(nSpellID, oPC))
if(PRCGetHasSpell(nSpellID, oPC))
{
string sName = GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpellID)));
AddChoice(sName, nChoice, oPC);
@@ -99,7 +99,7 @@ void PopulateList(object oPC, int nLevel, int iClass, int nChoice)
while(i < MaxValue)
{
nSpellID = StringToInt(Get2DACache(sFile, "RealSpellID", array_get_int(oToken, "Lkup", i)));
if(GetHasSpell(nSpellID, oPC))
if(PRCGetHasSpell(nSpellID, oPC))
{
string sName = GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpellID)));
AddChoice(sName, nChoice, oPC);
@@ -119,7 +119,7 @@ void PopulateList(object oPC, int nLevel, int iClass, int nChoice)
while(i < MaxValue)
{
nSpellID = StringToInt(Get2DACache(sFile, "RealSpellID", array_get_int(oToken, "Lkup", i)));
if(GetHasSpell(nSpellID, oPC))
if(PRCGetHasSpell(nSpellID, oPC))
{
string sName = GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpellID)));
AddChoice(sName, nChoice, oPC);

View File

@@ -20,7 +20,26 @@
The smell of blood drives you into a fury. As you slash into your foe,
each fresh wound you inflict spurs you onward.
Whenever you successfully critical hit a creature, you gain a +1 Attack and Damage bonus for one minute.
Whenever you successfully critical hit a creature, you gain a +1
Attack and Damage bonus for one minute.
DEV NOTE: This *should* process on undead & constructs
Magic Items and Critical Hits (Dungeon Masters Guide Pg. 222)
Magic Weapons and Critical Hits: Some weapon qualities and some
specific weapons have an extra effect on a critical hit. A flaming
burst weapon, for example, does extra fire damage on a critical hit.
This special effect functions against creatures not subject to
critical hits, such as undead, elementals, and constructs. When
fighting against such creatures, roll for critical hits as you
would against humanoids or any other creature subject to critical
hits. On a successful critical roll, apply the special effect, but
do not multiply the weapon<6F>s regular damage.
Things in the ToB that work on critical hits specify they do not
work on things that are unaffected by critical hits (i.e., Feral
Death Blow & Flesh Ripper); this one does not.
*/
#include "tob_inc_move"
@@ -59,7 +78,8 @@ void main()
int nHasEffect = 0;
// --- add harmless anchor so chain persists ---
eDur = EffectLinkEffects(EffectAttackIncrease(1), EffectAttackDecrease(1));
//eDur = EffectLinkEffects(EffectAttackIncrease(1), EffectAttackDecrease(1));
eDur = EffectIcon(EFFECT_ICON_ATTACK_INCREASE);
nHasEffect = 1;
if (GetHasDefensiveStance(oInitiator, DISCIPLINE_TIGER_CLAW))
@@ -87,7 +107,7 @@ void main()
else eDur = EffectLinkEffects(eDur, eTmp);
}
// apply stance bonuses permanently (cleared by your stance removal code elsewhere)
// apply stance bonuses permanently
if (nHasEffect)
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, ExtraordinaryEffect(eDur), oTarget);

View File

@@ -76,6 +76,7 @@ void main()
}
// Impact Effects
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_DUR_FLOATING_DISK), GetLocation(oTarget));
//ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_DUR_FLOATING_DISK), GetLocation(oTarget));
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_FLOATING_DISK), GetLocation(oTarget), 3.0f);
}// end if - Successful utterance
}

View File

@@ -109,4 +109,4 @@ void main()
NaturalSecondaryWeaponTempCheck(oManifester, oTarget, manif.nSpellID, FloatToInt(fDuration) / 6, sResRef));
}// end if - Successfull manifestation
}
}

View File

@@ -37,9 +37,110 @@
#include "psi_spellhook"
#include "prc_alterations"
void main()
// Cleanup function for Metaphysical Claw virtual enhancements
void MetaphysicalClawCleanup(object oManifester, object oTarget, int nSpellID, int nBeatsRemaining)
{
if(!((nBeatsRemaining-- == 0) ||
PRCGetDelayedSpellEffectsExpired(nSpellID, oTarget, oManifester) ||
PRCGetHasEffect(EFFECT_TYPE_POLYMORPH, oTarget))
)
{
// Schedule next check
DelayCommand(6.0f, MetaphysicalClawCleanup(oManifester, oTarget, nSpellID, nBeatsRemaining));
}
// Power expired - clean up variables
else
{
DeleteLocalInt(oTarget, "PRC_NAT_WEAPON_ENHANCE");
DeleteLocalFloat(oTarget, "PRC_NAT_WEAPON_ENH_DUR");
}
}
void main()
{
if (!PsiPrePowerCastCode())
{
return;
}
object oManifester = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
struct manifestation manif =
EvaluateManifestation(oManifester, oTarget,
PowerAugmentationProfile(4,
4, PRC_UNLIMITED_AUGMENTATION
),
METAPSIONIC_EXTEND
);
if(manif.bCanManifest)
{
int nBonus = 1 + manif.nTimesAugOptUsed_1;
object oLClaw = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oTarget);
object oRClaw = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oTarget);
object oBite = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oTarget);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eVis = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE);
itemproperty ipBonus = ItemPropertyEnhancementBonus(nBonus);
float fDuration = (manif.nTimesAugOptUsed_1 == 0 ? 60.0f : HoursToSeconds(1)) * manif.nManifesterLevel;
if(manif.bExtend) fDuration *= 2;
// Check for natural weapons - both physical and virtual
int bHasNaturalWeapon = FALSE;
int bHasVirtualWeapon = FALSE;
// Check physical slots
if(GetIsObjectValid(oLClaw) || GetIsObjectValid(oRClaw) || GetIsObjectValid(oBite))
{
bHasNaturalWeapon = TRUE;
}
// ALWAYS check for virtual secondary weapons
if(array_exists(oTarget, ARRAY_NAT_SEC_WEAP_RESREF))
{
bHasVirtualWeapon = TRUE;
bHasNaturalWeapon = TRUE;
}
// Must have a natural attack
if(!bHasNaturalWeapon)
{
FloatingTextStrRefOnCreature(16826656, oManifester, FALSE);
return;
}
// Apply enhancement to physical weapons
if(GetIsObjectValid(oLClaw))
AddItemProperty(DURATION_TYPE_TEMPORARY, ipBonus, oLClaw, fDuration);
if(GetIsObjectValid(oRClaw))
AddItemProperty(DURATION_TYPE_TEMPORARY, ipBonus, oRClaw, fDuration);
if(GetIsObjectValid(oBite))
AddItemProperty(DURATION_TYPE_TEMPORARY, ipBonus, oBite, fDuration);
// Apply enhancement to virtual weapons
if(bHasVirtualWeapon)
{
// Store enhancement on the creature for the virtual weapon system
SetLocalInt(oTarget, "PRC_NAT_WEAPON_ENHANCE", nBonus);
SetLocalFloat(oTarget, "PRC_NAT_WEAPON_ENH_DUR", fDuration);
// Start cleanup monitor - similar to Bite of the Wolf
DelayCommand(6.0f,
MetaphysicalClawCleanup(oManifester, oTarget, manif.nSpellID, FloatToInt(fDuration) / 6));
}
// Do VFX
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
DelayCommand(1.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
DelayCommand(2.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDur, oTarget, fDuration);
}
}
/*void main()
{
/*
Spellcast Hook Code
Added 2004-11-02 by Stratovarius
If you want to make changes to all powers,
@@ -47,7 +148,7 @@ void main()
*/
if (!PsiPrePowerCastCode())
/* if (!PsiPrePowerCastCode())
{
// If code within the PrePowerCastHook (i.e. UMD) reports FALSE, do not run this spell
return;
@@ -97,4 +198,4 @@ void main()
DelayCommand(2.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDur, oTarget, fDuration);
}// end if - Successfull manifestation
}
} */

View File

@@ -120,8 +120,15 @@ void main()
object oSpellTarget = PRCGetSpellTargetObject(oSpellOrigin); // On a weapon: The one being hit. On an armor: The one hitting the armor
// Make sure you don't hit yourself.
if (oSpellOrigin == oSpellTarget)
oSpellTarget = GetProperTarget(oSpellOrigin, oSpellTarget);
if (oSpellOrigin == oSpellTarget || !GetIsEnemy(oSpellOrigin, oSpellTarget))
{
if (DEBUG) DoDebug("prc_onhitcast: Preventing on-hit spell on non-enemy or self");
// Clear the local int and exit without applying on-hit effects
DeleteLocalInt(oSpellOrigin, "prc_ohc");
return;
}
/* if (oSpellOrigin == oSpellTarget)
oSpellTarget = GetProperTarget(oSpellOrigin, oSpellTarget); */
// motu99: replacing call to Bioware's GetSpellCastItem with new PRC wrapper function
// will ensure that we retrieve a valid item when we are called from scripted combat (prc_inc_combat) or

View File

@@ -1462,7 +1462,60 @@ void LichPrereq(object oPC)
SetLocalInt(oPC, "PRC_PrereqLich", 0);
}
void DragDisciple(object oPC)
void DragDisciple(object oPC)
{
int bRace = FALSE;
int bSpells = FALSE;
SetLocalInt(oPC, "PRC_PrereqDrDis", 1);
//Any nondragon (cannot already be a half-dragon)
int nRace = GetRacialType(oPC);
if(!GetHasTemplate(TEMPLATE_HALF_DRAGON, oPC)
&& nRace != RACIAL_TYPE_SPIRETOPDRAGON
&& nRace != RACIAL_TYPE_BOZAK
&& nRace != RACIAL_TYPE_KAPAK)
bRace = TRUE;
// Ability to cast arcane spells without preparation
// (dragon blooded feat eliminates that requirement)
if(GetHasFeat(DRAGON_BLOODED, oPC))
bSpells = TRUE;
else if(GetLevelByClass(CLASS_TYPE_ASSASSIN, oPC)
|| GetLevelByClass(CLASS_TYPE_BARD, oPC)
|| GetLevelByClass(CLASS_TYPE_BEGUILER, oPC)
|| GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oPC)
|| GetLevelByClass(CLASS_TYPE_DUSKBLADE, oPC)
|| GetLevelByClass(CLASS_TYPE_HEXBLADE, oPC)
|| GetLevelByClass(CLASS_TYPE_KNIGHT_WEAVE, oPC)
|| GetLevelByClass(CLASS_TYPE_SORCERER, oPC)
|| GetLevelByClass(CLASS_TYPE_SUEL_ARCHANAMACH, oPC)
|| GetLevelByClass(CLASS_TYPE_WARMAGE, oPC)
|| GetLevelByClass(CLASS_TYPE_WITCH, oPC))
{
if(!GetLocalInt(oPC, "PRC_ArcSpell0")
|| !GetLocalInt(oPC, "PRC_ArcSpell1"))
bSpells = TRUE;
}
// Racial spellcasters that qualify via racial hit dice
// They have innate ability to cast arcane spells without preparation
if(nRace == RACIAL_TYPE_ARANEA
|| nRace == RACIAL_TYPE_RAKSHASA
|| nRace == RACIAL_TYPE_DRIDER
|| nRace == RACIAL_TYPE_ARKAMOI
|| nRace == RACIAL_TYPE_HOBGOBLIN_WARSOUL
|| nRace == RACIAL_TYPE_REDSPAWN_ARCANISS
|| nRace == RACIAL_TYPE_MARRUTACT
|| nRace == RACIAL_TYPE_GLOURA)
{
bSpells = TRUE;
}
if(bRace && bSpells)
SetLocalInt(oPC, "PRC_PrereqDrDis", 0);
}
/* void DragDisciple(object oPC)
{
int bRace = FALSE;
int bSpells = FALSE;
@@ -1500,7 +1553,7 @@ void DragDisciple(object oPC)
if(bRace && bSpells)
SetLocalInt(oPC, "PRC_PrereqDrDis", 0);
}
*/
void WarlockPrCs(object oPC)
{
SetLocalInt(oPC, "PRC_PrereqHFWar", 1);

View File

@@ -23,6 +23,14 @@ Called Elsewhere:
void main()
{
object oPC = OBJECT_SELF;
// Block forsakers from using spellfire
if(GetLevelByClass(CLASS_TYPE_FORSAKER, oPC) > 0)
{
SendMessageToPC(oPC, "Forsakers cannot use the power of spellfire.");
return;
}
if(GetHasFeat(FEAT_SHADOWWEAVE, oPC))
{
SendMessageToPC(oPC, "You no longer have access to the weave and cannot use spellfire");

View File

@@ -221,7 +221,47 @@ void main()
break;
}
case SPELL_VIRTUOSO_SHARP_NOTE:
case SPELL_VIRTUOSO_SHARP_NOTE:
{
oItem = IPGetTargetedOrEquippedMeleeWeapon();
if(GetIsObjectValid(oItem))
{
// Check if Dragonfire Inspiration is active and preserve its properties
int bHasDragonfire = GetHasFeat(FEAT_DRAGONFIRE_INSPIRATION, oPC) &&
GetLocalInt(oPC, "DragonFireInspirationOn");
// Store existing Dragonfire properties if present
itemproperty ipDragonfire = GetFirstItemProperty(oItem);
int bDragonfireFound = FALSE;
if(bHasDragonfire)
{
ipDragonfire = GetFirstItemProperty(oItem);
while(GetIsItemPropertyValid(ipDragonfire))
{
if(GetItemPropertyType(ipDragonfire) == ITEM_PROPERTY_ONHITCASTSPELL)
{
bDragonfireFound = TRUE;
break;
}
ipDragonfire = GetNextItemProperty(oItem);
}
}
// Apply Keen property
nTemp = StringToInt(Get2DACache("baseitems", "WeaponType", GetBaseItemType(oItem)));
if(nTemp && (nTemp != 2)) //piercing and slashing weapons
IPSafeAddItemProperty(oItem,ItemPropertyKeen(), 600.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING ,TRUE,TRUE);
// Restore Dragonfire property if it was removed
if(bHasDragonfire && bDragonfireFound && !GetItemHasItemProperty(oItem, ITEM_PROPERTY_ONHITCASTSPELL))
{
IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 99999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE);
}
}
break;
}
/* case SPELL_VIRTUOSO_SHARP_NOTE:
{
oItem = IPGetTargetedOrEquippedMeleeWeapon();
if(GetIsObjectValid(oItem))
@@ -231,7 +271,7 @@ void main()
IPSafeAddItemProperty(oItem,ItemPropertyKeen(), 600.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING ,TRUE,TRUE);
}
break;
}
} */
case SPELL_VIRTUOSO_MINDBENDING_MELODY:
{
break;

View File

@@ -75031,11 +75031,11 @@ Spellcasting: At each class level the epic Contemplative continues to increase i
Epic Contemplative Bonus Feat List:
Armor Skin, Automatic Quicken Spell, Automatic Silent Spell, Automatic Still Spell, Blinding Speed, Epic Divine Might, Epic Divine Resistance, Epic Divine Shield, Epic Divine Vigor, Epic Energy Resistance, Epic Dodge, Epic Spell Focus, Epic Spell Penetration, Epic Prowess, Epic Toughness, Epic Spellcasting, Fast Healing, Focused Spell Penetration, Great Charisma, Great Wisdom, Improved Combat Casting, Improved Ki Strike, Improved Spell Resistance, Improved Stunning Fist, Legendary Wrestler, Perfect Health, Planar Turning, Self-Concealment, Superior Initiative, Tenacious Magic. </entry>
<entry id="205194" lang="en" sex="m">Epic Runecaster</entry>
<entry id="205195" lang="en" sex="m">The epic runecaster no longer simply inscribes symbols of divine power, they weave divine essence into the world itself. Their runes thrum with ancient energy, etched into stone, metal, and air alike. Each mark is a silent hymn, a declaration of faith and force, holding power that rivals full incantations. Thieves no longer dare approach the runecaster's artifacts, and foes learn too late that every step toward a runecaster is a step deeper into a trap. Their runes do not merely cast spells, they shape destiny.
<entry id="205195" lang="en" sex="m">The epic runecaster no longer simply inscribes symbols of divine power, they weave divine essence into the world itself. Their runes thrum with ancient energy, etched into stone, metal, and the earth itself. Each mark is a silent hymn, a declaration of faith and force, holding power that rivals full incantations. Thieves no longer dare approach the runecaster's artifacts, and foes learn too late that every step toward a runecaster is a step deeper into a trap. Their runes do not merely cast spells, they shape destiny.
Hit Die: d8
Skill Points at Each Additional Level: 2 + Int Modifier
Bonus Feats: The epic Runecaster gains a bonus feat every three levels
Bonus Feats: The epic Runecaster gains a bonus feat every four levels.
Special:
Rune Craft: The epic Runecaster continues to gain a +1 on Runecarving checks at every odd level.
@@ -75043,7 +75043,7 @@ Rune Power: The epic Runecaster's Rune Power ability continues to gain +1 to DC
Spellcasting: The epic Runecaster continues to increase in divine caster level (and spells known, if applicable).
Epic Runecaster Bonus Feat List:
Armor Skin, Automatic Quicken Spell, Automatic Silent Spell, Automatic Still Spell, Blinding Speed, Epic Energy Resistance, Epic Fortitude, Epic Spell Focus, Epic Spell Penetration, Epic Prowess, Epic Toughness, Epic Spellcasting, Epic Weapon Focus, Fast Healing, Focused Spell Penetration, Improved Combat Casting, Great Charisma, Great Wisdom, Perfect Health, Planar Turning, Tenacious Magic.</entry>
Armor Skin, Automatic Quicken Spell, Automatic Silent Spell, Automatic Still Spell, Blinding Speed, Epic Energy Resistance, Epic Fortitude, Epic Spell Focus, Epic Spell Penetration, Epic Prowess, Epic Toughness, Epic Spellcasting, Epic Weapon Focus, Fast Healing, Focused Spell Penetration, Improved Combat Casting, Inscribe Epic Runes, Great Charisma, Great Intelligence, Great Wisdom, Perfect Health, Planar Turning, Tenacious Magic.</entry>
<entry id="205196" lang="en" sex="m">Epic Warchief</entry>
<entry id="205197" lang="en" sex="m">The epic Warchief becomes the stuff of legend, feared and revered by entire nations. His warcries shake enemy lines, and his presence alone can rally tribes to conquer cities and kingdoms. As he grows in power, his influence spreads like wildfire, turning even the most fractured clans into an unstoppable force. Epic Warchiefs inspire absolute loyalty and demand unquestioning obedience, forging empires from chaos and blood.
@@ -75577,6 +75577,13 @@ Benefit: You create an infusion of any divine spell available to you. Infusing a
<entry id="212169" lang="en" sex="m">****</entry>
<entry id="212170" lang="en" sex="m">Mundane Herbs</entry>
<entry id="212171" lang="en" sex="m">These herbs can be used with the create infusion feat. Target them with the spell you want to store for later use.</entry>
<entry id="212172" lang="en" sex="m">****</entry>
<entry id="212173" lang="en" sex="m">Inscribe Epic Runes</entry>
<entry id="212174" lang="en" sex="m">Type of Feat: Epic
Prerequisite: Inscribe Rune, Craft (armor) 24 ranks, INT 19
Benefit: You can inscribe runes that exceed the normal limits and as such can craft runes with a caster level greater than 20th. Even this feat does not allow you to inscribe a rune with an epic spell. Such magic defies the power of the written word and thus cannot be scribed into runic form.
Use: Selected</entry>
<entry id="212175" lang="en" sex="m">****</entry>
<entry id="212179" lang="en" sex="m">### PRC8 CRAFT SCEPTER RESERVE ###</entry>
<entry id="212180" lang="en" sex="m">Craft Scepter</entry>
<entry id="212181" lang="en" sex="m">Type of Feat: Item Creation