2025/05/25 Update
Updated all ToB maneuvers with saves to respect Blade Meditation. Added HasBladeMeditationForDiscipline() Expanded Witchborn Binder for epic progression. Fixed a few bugs around Vile Martial strike. Echo Spell shouldn't target self or items. Muckdweller should have a -6 STR. Added new Vile Martial feats to GetVileFeats(). Grappling something now removes invisibility. Started on Power Attack NUI. Starmantle shouldn't stack. Factotum & Shadow Thief of Amn require UMD checks for scroll casting.
This commit is contained in:
parent
41e2f2b91c
commit
8a034b0da0
@ -199,7 +199,7 @@
|
||||
195 MasterOfNine 16790679 16847557 16847558 16847559 16847560 IR_PSYWARRIOR 8 CLS_ATK_2 CLS_FEAT_MONINE CLS_SAVTHR_WIZ CLS_SKILL_MONINE CLS_BFEAT_MONINE 6 **** **** 1 0 12 16 14 8 14 12 DEX 0X00 0X0 0 CLASS_TYPE_MASTER_OF_NINE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_MONINE 5 0 0 0 5 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||
196 EternalBlade 16790680 16834750 16834751 16834752 16834753 IR_FH 10 CLS_ATK_1 CLS_FEAT_ETBL CLS_SAVTHR_FIGHT CLS_SKILL_ETBL CLS_BFEAT_ETBL 2 **** **** 1 0 16 13 16 10 10 9 STR 0X00 0X0 0 CLASS_TYPE_ETERNAL_BLADE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ETBL 10 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||
197 ShadowSunNinja 16790681 16834778 16834779 16834780 16834781 IR_SHADADEPT 8 CLS_ATK_2 CLS_FEAT_SSN CLS_SAVTHR_MONK CLS_SKILL_SSN CLS_BFEAT_SSN 4 **** **** 1 0 16 13 16 10 10 9 STR 0X11 0X2 0 CLASS_TYPE_SHADOW_SUN_NINJA 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SSN 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||
198 WitchbornBinder 16790682 16838144 16838145 16838146 16838147 IR_WITCH 6 CLS_ATK_2 CLS_FEAT_WCHBRN CLS_SAVTHR_WIZ CLS_SKILL_WCHBRN CLS_BFEAT_BLANK 4 **** **** 1 0 10 14 14 10 12 16 CHA 0X00 0X0 0 CLASS_TYPE_WITCHBORN_BINDER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WCHBRN 10 0 0 0 10 6 2 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||
198 WitchbornBinder 16790682 16838144 16838145 16838146 16838147 IR_WITCH 6 CLS_ATK_2 CLS_FEAT_WCHBRN CLS_SAVTHR_WIZ CLS_SKILL_WCHBRN CLS_BFEAT_WCHBRN 4 **** **** 1 0 10 14 14 10 12 16 CHA 0X00 0X0 0 CLASS_TYPE_WITCHBORN_BINDER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WCHBRN 40 0 0 0 10 6 2 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||
199 Baelnorn 16790683 16829216 16829217 16829218 16829219 IR_BAELNORN 4 CLS_ATK_4 CLS_FEAT_BAELN CLS_SAVTHR_LICH CLS_SKILL_WIZ CLS_BFEAT_LICH 2 **** **** 1 0 13 13 13 13 13 13 CHA 0X11 0X2 0 CLASS_TYPE_BAELNORN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_BAELN 4 0 0 0 4 10 0 cls_stat_baeln **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||
200 Disciple_of_Meph 16790684 16823016 16823017 16823018 16823019 IR_DISCMEPH 8 CLS_ATK_1 CLS_FEAT_MEPH CLS_SAVTHR_MONK CLS_SKILL_MEPH CLS_BFEAT_MEPH 4 **** **** 1 0 12 16 14 8 14 12 CHA 0X09 0X2 0 CLASS_TYPE_DISCIPLE_OF_MEPH 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_MEPH 10 0 0 0 10 2 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||
201 Soul_Eater 16790685 16832116 16832117 16832118 16832119 IR_SOULEATER 8 CLS_ATK_1 CLS_FEAT_SLEAT CLS_SAVTHR_MONK CLS_SKILL_SLEAT CLS_BFEAT_SLEAT 4 **** **** 1 0 14 16 10 12 14 10 INT 0X09 0X2 0 CLASS_TYPE_SOUL_EATER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SLEAT 10 0 0 0 10 1 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||
|
63
nwn/nwnprc/trunk/2das/cls_bfeat_wchbm.2da
Normal file
63
nwn/nwnprc/trunk/2das/cls_bfeat_wchbm.2da
Normal file
@ -0,0 +1,63 @@
|
||||
2DA V2.0
|
||||
|
||||
Bonus
|
||||
0 0
|
||||
1 0
|
||||
2 0
|
||||
3 0
|
||||
4 0
|
||||
5 0
|
||||
6 0
|
||||
7 0
|
||||
8 0
|
||||
9 0
|
||||
10 0
|
||||
11 0
|
||||
12 1
|
||||
13 0
|
||||
14 0
|
||||
15 1
|
||||
16 0
|
||||
17 0
|
||||
18 1
|
||||
19 0
|
||||
20 0
|
||||
21 1
|
||||
22 0
|
||||
23 0
|
||||
24 1
|
||||
25 0
|
||||
26 0
|
||||
27 1
|
||||
28 0
|
||||
29 0
|
||||
30 1
|
||||
31 0
|
||||
32 0
|
||||
33 1
|
||||
34 0
|
||||
35 0
|
||||
36 1
|
||||
37 0
|
||||
38 0
|
||||
39 1
|
||||
40 0
|
||||
41 0
|
||||
42 1
|
||||
43 0
|
||||
44 0
|
||||
45 1
|
||||
46 0
|
||||
47 0
|
||||
48 1
|
||||
49 0
|
||||
50 0
|
||||
51 1
|
||||
52 0
|
||||
53 0
|
||||
54 1
|
||||
55 0
|
||||
56 0
|
||||
57 1
|
||||
58 0
|
||||
59 0
|
@ -1,16 +1,183 @@
|
||||
2DA V2.0
|
||||
|
||||
FeatLabel FeatIndex List GrantedOnLevel OnMenu
|
||||
0 Lorestealer_DetectMagic 22867 3 1 1
|
||||
1 Meldshield_Invest 8953 3 1 1
|
||||
2 Meldshield 8954 3 99 1
|
||||
3 DispellingOrb_Invest 8955 3 2 1
|
||||
4 DispellingOrb 8956 3 2 1
|
||||
5 MageShackles_Invest 8957 3 4 1
|
||||
6 MageShackles 8958 3 4 1
|
||||
7 Abrogation_Invest 8959 3 6 1
|
||||
8 Abrogation 8960 3 6 1
|
||||
9 SpiritFlay_Invest 8961 3 8 1
|
||||
10 SpiritFlay 8962 3 8 1
|
||||
11 Integument_Invest 8963 3 10 1
|
||||
12 Integument 8964 3 10 1
|
||||
FeatLabel FeatIndex List GrantedOnLevel OnMenu
|
||||
0 Lorestealer_DetectMagic 22867 3 1 1
|
||||
1 Meldshield_Invest 8953 3 1 1
|
||||
2 Meldshield 8954 3 99 1
|
||||
3 DispellingOrb_Invest 8955 3 2 1
|
||||
4 DispellingOrb 8956 3 2 1
|
||||
5 MageShackles_Invest 8957 3 4 1
|
||||
6 MageShackles 8958 3 4 1
|
||||
7 Abrogation_Invest 8959 3 6 1
|
||||
8 Abrogation 8960 3 6 1
|
||||
9 SpiritFlay_Invest 8961 3 8 1
|
||||
10 SpiritFlay 8962 3 8 1
|
||||
11 Integument_Invest 8963 3 10 1
|
||||
12 Integument 8964 3 10 1
|
||||
13 EPIC_WITCHBORN_BINDER 25083 3 11 0
|
||||
14 FEAT_EPIC_ARMOR_SKIN 490 1 -1 0
|
||||
15 FEAT_EPIC_BLINDING_SPEED 491 1 -1 1
|
||||
16 FEAT_EPIC_PROWESS 584 1 -1 0
|
||||
17 FEAT_EPIC_TOUGHNESS_1 754 1 -1 0
|
||||
18 FEAT_EPIC_TOUGHNESS_2 755 1 -1 0
|
||||
19 FEAT_EPIC_TOUGHNESS_3 756 1 -1 0
|
||||
20 FEAT_EPIC_TOUGHNESS_4 757 1 -1 0
|
||||
21 FEAT_EPIC_TOUGHNESS_5 758 1 -1 0
|
||||
22 FEAT_EPIC_TOUGHNESS_6 759 1 -1 0
|
||||
23 FEAT_EPIC_TOUGHNESS_7 760 1 -1 0
|
||||
24 FEAT_EPIC_TOUGHNESS_8 761 1 -1 0
|
||||
25 FEAT_EPIC_TOUGHNESS_9 762 1 -1 0
|
||||
26 FEAT_EPIC_TOUGHNESS_10 763 1 -1 0
|
||||
27 ExpandedSoulmeldCapacity_1 8946 1 -1 0
|
||||
28 ExpandedSoulmeldCapacity_2 8947 1 -1 0
|
||||
29 ExpandedSoulmeldCapacity_3 8948 1 -1 0
|
||||
30 ExpandedSoulmeldCapacity_4 8949 1 -1 0
|
||||
31 ExpandedSoulmeldCapacity_5 8950 1 -1 0
|
||||
32 BonusSoulmeld_1 8965 1 -1 0
|
||||
33 BonusSoulmeld_2 8966 1 -1 0
|
||||
34 BonusSoulmeld_3 8967 1 -1 0
|
||||
35 BonusSoulmeld_4 8968 1 -1 0
|
||||
36 BonusSoulmeld_5 8969 1 -1 0
|
||||
37 BonusSoulmeld_6 8970 1 -1 0
|
||||
38 BonusSoulmeld_7 8971 1 -1 0
|
||||
39 BonusSoulmeld_8 8972 1 -1 0
|
||||
40 BonusSoulmeld_9 8973 1 -1 0
|
||||
41 BonusSoulmeld_10 8974 1 -1 0
|
||||
42 EpicEssentia_1 8975 1 -1 0
|
||||
43 EpicEssentia_2 8976 1 -1 0
|
||||
44 EpicEssentia_3 8977 1 -1 0
|
||||
45 EpicEssentia_4 8978 1 -1 0
|
||||
46 EpicEssentia_5 8979 1 -1 0
|
||||
47 EpicEssentia_6 8980 1 -1 0
|
||||
48 ExtraChakraBind_1 8981 1 -1 0
|
||||
49 ExtraChakraBind_2 8982 1 -1 0
|
||||
50 ExtraChakraBind_3 8983 1 -1 0
|
||||
51 ExtraChakraBind_4 8984 1 -1 0
|
||||
52 ExtraChakraBind_5 8985 1 -1 0
|
||||
53 ExtraChakraBind_6 8986 1 -1 0
|
||||
54 ExtraChakraBind_7 8987 1 -1 0
|
||||
55 ExtraChakraBind_8 8988 1 -1 0
|
||||
56 ExtraChakraBind_9 8989 1 -1 0
|
||||
57 ExtraChakraBind_10 8990 1 -1 0
|
||||
58 OpenHeartChakra 8991 1 -1 0
|
||||
59 OpenSoulChakra 8992 1 -1 0
|
||||
60 Epic_RapidMeldshaping_1 8993 1 -1 0
|
||||
61 Epic_RapidMeldshaping_2 8994 1 -1 0
|
||||
62 Epic_RapidMeldshaping_3 8995 1 -1 0
|
||||
63 Epic_RapidMeldshaping_4 8996 1 -1 0
|
||||
64 Epic_RapidMeldshaping_5 8997 1 -1 0
|
||||
65 Epic_RapidMeldshaping_6 8998 1 -1 0
|
||||
66 Epic_RapidMeldshaping_7 8999 1 -1 0
|
||||
67 Epic_RapidMeldshaping_8 9000 1 -1 0
|
||||
68 Epic_RapidMeldshaping_9 9001 1 -1 0
|
||||
69 Epic_RapidMeldshaping_10 9002 1 -1 0
|
||||
70 Epic_RebindSoulmeld_Crown 9003 1 -1 1
|
||||
71 Epic_RebindSoulmeld_Feet 9004 1 -1 1
|
||||
72 Epic_RebindSoulmeld_Hands 9005 1 -1 1
|
||||
73 Epic_RebindSoulmeld_Arms 9006 1 -1 1
|
||||
74 Epic_RebindSoulmeld_Brow 9007 1 -1 1
|
||||
75 Epic_RebindSoulmeld_Shoulders 9008 1 -1 1
|
||||
76 Epic_RebindSoulmeld_Throat 9009 1 -1 1
|
||||
77 Epic_RebindSoulmeld_Waist 9010 1 -1 1
|
||||
78 Epic_RebindSoulmeld_Heart 9011 1 -1 1
|
||||
79 Epic_RebindSoulmeld_Soul 9012 1 -1 1
|
||||
80 Epic_RebindSoulmeld_Totem 9013 1 -1 1
|
||||
81 FEAT_EPIC_ENERGY_RESISTANCE_COLD_1 533 1 -1 0
|
||||
82 FEAT_EPIC_ENERGY_RESISTANCE_COLD_2 534 1 -1 0
|
||||
83 FEAT_EPIC_ENERGY_RESISTANCE_COLD_3 535 1 -1 0
|
||||
84 FEAT_EPIC_ENERGY_RESISTANCE_COLD_4 536 1 -1 0
|
||||
85 FEAT_EPIC_ENERGY_RESISTANCE_COLD_5 537 1 -1 0
|
||||
86 FEAT_EPIC_ENERGY_RESISTANCE_COLD_6 538 1 -1 0
|
||||
87 FEAT_EPIC_ENERGY_RESISTANCE_COLD_7 539 1 -1 0
|
||||
88 FEAT_EPIC_ENERGY_RESISTANCE_COLD_8 540 1 -1 0
|
||||
89 FEAT_EPIC_ENERGY_RESISTANCE_COLD_9 541 1 -1 0
|
||||
90 FEAT_EPIC_ENERGY_RESISTANCE_COLD_10 542 1 -1 0
|
||||
91 FEAT_EPIC_ENERGY_RESISTANCE_ACID_1 543 1 -1 0
|
||||
92 FEAT_EPIC_ENERGY_RESISTANCE_ACID_2 544 1 -1 0
|
||||
93 FEAT_EPIC_ENERGY_RESISTANCE_ACID_3 545 1 -1 0
|
||||
94 FEAT_EPIC_ENERGY_RESISTANCE_ACID_4 546 1 -1 0
|
||||
95 FEAT_EPIC_ENERGY_RESISTANCE_ACID_5 547 1 -1 0
|
||||
96 FEAT_EPIC_ENERGY_RESISTANCE_ACID_6 548 1 -1 0
|
||||
97 FEAT_EPIC_ENERGY_RESISTANCE_ACID_7 549 1 -1 0
|
||||
98 FEAT_EPIC_ENERGY_RESISTANCE_ACID_8 550 1 -1 0
|
||||
99 FEAT_EPIC_ENERGY_RESISTANCE_ACID_9 551 1 -1 0
|
||||
100 FEAT_EPIC_ENERGY_RESISTANCE_ACID_10 552 1 -1 0
|
||||
101 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_1 553 1 -1 0
|
||||
102 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_2 554 1 -1 0
|
||||
103 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_3 555 1 -1 0
|
||||
104 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_4 556 1 -1 0
|
||||
105 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_5 557 1 -1 0
|
||||
106 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_6 558 1 -1 0
|
||||
107 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_7 559 1 -1 0
|
||||
108 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_8 560 1 -1 0
|
||||
109 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_9 561 1 -1 0
|
||||
110 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_10 562 1 -1 0
|
||||
111 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_1 563 1 -1 0
|
||||
112 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_2 564 1 -1 0
|
||||
113 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_3 565 1 -1 0
|
||||
114 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_4 566 1 -1 0
|
||||
115 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_5 567 1 -1 0
|
||||
116 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_6 568 1 -1 0
|
||||
117 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_7 569 1 -1 0
|
||||
118 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_8 570 1 -1 0
|
||||
119 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_9 571 1 -1 0
|
||||
120 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_10 572 1 -1 0
|
||||
121 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_1 573 1 -1 0
|
||||
122 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_2 574 1 -1 0
|
||||
123 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_3 575 1 -1 0
|
||||
124 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_4 576 1 -1 0
|
||||
125 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_5 577 1 -1 0
|
||||
126 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_6 578 1 -1 0
|
||||
127 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_7 579 1 -1 0
|
||||
128 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_8 580 1 -1 0
|
||||
129 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_9 581 1 -1 0
|
||||
130 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_10 582 1 -1 0
|
||||
131 FEAT_EPIC_REPUTATION 586 1 -1 0
|
||||
132 FEAT_EPIC_SUPERIOR_INITIATIVE 753 1 -1 0
|
||||
133 FEAT_EPIC_FORTITUDE 583 1 -1 0
|
||||
134 FEAT_EPIC_REFLEXES 585 1 -1 0
|
||||
135 FEAT_EPIC_WILL 695 1 -1 0
|
||||
136 FEAT_EPIC_SKILL_FOCUS_USEMAGICDEVICE 609 1 -1 0
|
||||
137 FEAT_EPIC_SKILL_FOCUS_RIDE 3038 1 -1 0
|
||||
138 FEAT_EPIC_SKILL_FOCUS_JUMP 3040 1 -1 0
|
||||
139 FEAT_EPIC_SKILL_FOCUS_SENSE_MOTIVE 3042 1 -1 0
|
||||
140 FEAT_EPIC_SKILL_FOCUS_MARTIAL_LORE 3044 1 -1 0
|
||||
141 FEAT_EPIC_SKILL_FOCUS_BALANCE 3046 1 -1 0
|
||||
142 FEAT_EPIC_SKILL_FOCUS_CRAFT_POISON 3048 1 -1 0
|
||||
143 FEAT_EPIC_SKILL_FOCUS_PSICRAFT 3050 1 -1 0
|
||||
144 FEAT_EPIC_SKILL_FOCUS_CLIMB 3052 1 -1 0
|
||||
145 FEAT_EPIC_SKILL_FOCUS_CRAFT_GENERAL 3054 1 -1 0
|
||||
146 FEAT_EPIC_SKILL_FOCUS_APPRAISE 588 1 -1 0
|
||||
147 FEAT_EPIC_SKILL_FOCUS_CONCENTRATION 589 1 -1 0
|
||||
148 FEAT_EPIC_SKILL_FOCUS_CRAFT_TRAP 590 1 -1 0
|
||||
149 FEAT_EPIC_SKILL_FOCUS_DISABLETRAP 591 1 -1 0
|
||||
150 FEAT_EPIC_SKILL_FOCUS_DISCIPLINE 592 1 -1 0
|
||||
151 FEAT_EPIC_SKILL_FOCUS_HEAL 593 1 -1 0
|
||||
152 FEAT_EPIC_SKILL_FOCUS_HIDE 594 1 -1 0
|
||||
153 FEAT_EPIC_SKILL_FOCUS_LISTEN 595 1 -1 0
|
||||
154 FEAT_EPIC_SKILL_FOCUS_LORE 596 1 -1 0
|
||||
155 FEAT_EPIC_SKILL_FOCUS_MOVESILENTLY 597 1 -1 0
|
||||
156 FEAT_EPIC_SKILL_FOCUS_OPENLOCK 598 1 -1 0
|
||||
157 FEAT_EPIC_SKILL_FOCUS_PARRY 599 1 -1 0
|
||||
158 FEAT_EPIC_SKILL_FOCUS_PERSUADE 601 1 -1 0
|
||||
159 FEAT_EPIC_SKILL_FOCUS_PICKPOCKET 602 1 -1 0
|
||||
160 FEAT_EPIC_SKILL_FOCUS_SEARCH 603 1 -1 0
|
||||
161 FEAT_EPIC_SKILL_FOCUS_SETTRAP 604 1 -1 0
|
||||
162 FEAT_EPIC_SKILL_FOCUS_SPELLCRAFT 605 1 -1 0
|
||||
163 FEAT_EPIC_SKILL_FOCUS_SPOT 606 1 -1 0
|
||||
164 FEAT_EPIC_SKILL_FOCUS_TAUNT 607 1 -1 0
|
||||
165 FEAT_EPIC_SKILL_FOCUS_TUMBLE 608 1 -1 0
|
||||
166 FEAT_EPIC_SKILL_FOCUS_CRAFT_ARMOR 913 1 -1 0
|
||||
167 FEAT_EPIC_SKILL_FOCUS_CRAFT_WEAPON 914 1 -1 0
|
||||
168 FEAT_EPIC_SKILL_FOCUS_BLUFF 917 1 -1 0
|
||||
169 FEAT_EPIC_SKILL_FOCUS_INTIMIDATE 918 1 -1 0
|
||||
170 FEAT_EPIC_GREAT_CONSTITUTION_1 774 1 -1 0
|
||||
171 FEAT_EPIC_GREAT_CONSTITUTION_2 775 1 -1 0
|
||||
172 FEAT_EPIC_GREAT_CONSTITUTION_3 776 1 -1 0
|
||||
173 FEAT_EPIC_GREAT_CONSTITUTION_4 777 1 -1 0
|
||||
174 FEAT_EPIC_GREAT_CONSTITUTION_5 778 1 -1 0
|
||||
175 FEAT_EPIC_GREAT_CONSTITUTION_6 779 1 -1 0
|
||||
176 FEAT_EPIC_GREAT_CONSTITUTION_7 780 1 -1 0
|
||||
177 FEAT_EPIC_GREAT_CONSTITUTION_8 781 1 -1 0
|
||||
178 FEAT_EPIC_GREAT_CONSTITUTION_9 782 1 -1 0
|
||||
179 FEAT_EPIC_GREAT_CONSTITUTION_10 783 1 -1 0
|
||||
|
File diff suppressed because it is too large
Load Diff
1193
nwn/nwnprc/trunk/include/nw_inc_nui.nss
Normal file
1193
nwn/nwnprc/trunk/include/nw_inc_nui.nss
Normal file
File diff suppressed because it is too large
Load Diff
@ -169,22 +169,22 @@ const int FEAT_VILE_MARTIAL_ELVEN_THINBLADE = 24814;
|
||||
const int FEAT_VILE_MARTIAL_ELVEN_COURTBLADE = 24815;
|
||||
|
||||
//:: Sanctify Martial Strike Expansion
|
||||
const int FEAT_SANCTIFY_MARTIAL_EAGLE_CLAW = 24850;
|
||||
const int FEAT_SANCTIFY_MARTIAL_LIGHT_LANCE = 24851;
|
||||
const int FEAT_SANCTIFY_MARTIAL_HEAVY_PICK = 24852;
|
||||
const int FEAT_SANCTIFY_MARTIAL_LIGHT_PICK = 24853;
|
||||
const int FEAT_SANCTIFY_MARTIAL_SAI = 24854;
|
||||
const int FEAT_SANCTIFY_MARTIAL_NUNCHAKU = 24855;
|
||||
const int FEAT_SANCTIFY_MARTIAL_FALCHION = 24856;
|
||||
const int FEAT_SANCTIFY_MARTIAL_SAP = 24857;
|
||||
const int FEAT_SANCTIFY_MARTIAL_KATAR = 24858;
|
||||
const int FEAT_SANCTIFY_MARTIAL_HEAVY_MACE = 24859;
|
||||
const int FEAT_SANCTIFY_MARTIAL_MAUL = 24860;
|
||||
const int FEAT_SANCTIFY_MARTIAL_DBL_SCIMITAR = 24861;
|
||||
const int FEAT_SANCTIFY_MARTIAL_GOAD = 24862;
|
||||
const int FEAT_SANCTIFY_MARTIAL_ELVEN_LIGHTBLADE = 24863;
|
||||
const int FEAT_SANCTIFY_MARTIAL_ELVEN_THINBLADE = 24864;
|
||||
const int FEAT_SANCTIFY_MARTIAL_ELVEN_COURTBLADE = 24865;
|
||||
const int FEAT_SANCTIFY_MARTIAL_EAGLE_CLAW = 24850;
|
||||
const int FEAT_SANCTIFY_MARTIAL_LIGHT_LANCE = 24851;
|
||||
const int FEAT_SANCTIFY_MARTIAL_HEAVY_PICK = 24852;
|
||||
const int FEAT_SANCTIFY_MARTIAL_LIGHT_PICK = 24853;
|
||||
const int FEAT_SANCTIFY_MARTIAL_SAI = 24854;
|
||||
const int FEAT_SANCTIFY_MARTIAL_NUNCHAKU = 24855;
|
||||
const int FEAT_SANCTIFY_MARTIAL_FALCHION = 24856;
|
||||
const int FEAT_SANCTIFY_MARTIAL_SAP = 24857;
|
||||
const int FEAT_SANCTIFY_MARTIAL_KATAR = 24858;
|
||||
const int FEAT_SANCTIFY_MARTIAL_HEAVY_MACE = 24859;
|
||||
const int FEAT_SANCTIFY_MARTIAL_MAUL = 24860;
|
||||
const int FEAT_SANCTIFY_MARTIAL_DBL_SCIMITAR = 24861;
|
||||
const int FEAT_SANCTIFY_MARTIAL_GOAD = 24862;
|
||||
const int FEAT_SANCTIFY_MARTIAL_ELVEN_LIGHTBLADE = 24863;
|
||||
const int FEAT_SANCTIFY_MARTIAL_ELVEN_THINBLADE = 24864;
|
||||
const int FEAT_SANCTIFY_MARTIAL_ELVEN_COURTBLADE = 24865;
|
||||
|
||||
//:: Web Enhancement Feats
|
||||
const int FEAT_CHARMING_THE_ARROW = 25997;
|
||||
|
@ -1506,8 +1506,8 @@ struct WeaponFeat GetAllFeatsOfWeaponType(int iWeaponType)
|
||||
sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTMACE;
|
||||
sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTMACE;
|
||||
sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_LIGHTMACE;
|
||||
sFeat.SanctifyMartialStrike = FEAT_VILE_MARTIAL_LIGHTMACE;
|
||||
sFeat.VileMartialStrike = FEAT_SANCTIFY_MARTIAL_LIGHTMACE;
|
||||
sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_LIGHTMACE;
|
||||
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_LIGHTMACE;
|
||||
break;
|
||||
}
|
||||
case BASE_ITEM_LONGBOW: {
|
||||
|
@ -1355,7 +1355,8 @@ const int IP_CONST_FEAT_VILE_MARTIAL_SICKLE = 24794;
|
||||
const int IP_CONST_FEAT_VILE_MARTIAL_DWARVENAXE = 24795;
|
||||
const int IP_CONST_FEAT_VILE_MARTIAL_WHIP = 24796;
|
||||
const int IP_CONST_FEAT_VILE_MARTIAL_TRIDENT = 24797;
|
||||
const int IP_CONST_FEAT_VILE_MARTIAL_MINDBLADE = 24898;
|
||||
const int IP_CONST_FEAT_VILE_MARTIAL_MINDBLADE = 24798;
|
||||
|
||||
//:: New Weapons
|
||||
const int IP_CONST_FEAT_VILE_MARTIAL_EAGLE_CLAW = 26500;
|
||||
const int IP_CONST_FEAT_VILE_MARTIAL_LIGHT_LANCE = 26501;
|
||||
|
@ -1,5 +1,8 @@
|
||||
//const int FOOBAR = -1; // Comment or uncomment whenever the compiler croaks on an error code 5.
|
||||
|
||||
//:: NUI Spell constants
|
||||
const int SPELL_NUI_POWER_ATTACK = 2691;
|
||||
|
||||
//spell
|
||||
const int SPELL_MAJOR_MAGIC_MISSILE = 2247;
|
||||
const int SPELL_GREAT_WALL_OF_DISPEL = 2096;
|
||||
|
@ -228,8 +228,10 @@ int GetSanctifyMartialStrikeFeatItemProperty(int nFeatNumber)
|
||||
int GetVileMartialStrikeFeatItemProperty(int nFeatNumber)
|
||||
{
|
||||
int nItemProperty;
|
||||
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_VILE_MARTIAL_CLUB, IP_CONST_FEAT_VILE_MARTIAL_MINDBLADE);
|
||||
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_VILE_MARTIAL_CLUB, IP_CONST_FEAT_VILE_MARTIAL_TRIDENT);
|
||||
if(nItemProperty != -1) return nItemProperty;
|
||||
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_VILE_MARTIAL_MINDBLADE, IP_CONST_FEAT_VILE_MARTIAL_MINDBLADE);
|
||||
if(nItemProperty != -1) return nItemProperty;
|
||||
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_VILE_MARTIAL_EAGLE_CLAW, IP_CONST_FEAT_VILE_MARTIAL_ELVEN_COURTBLADE);
|
||||
if(nItemProperty != -1) return nItemProperty;
|
||||
return -1;
|
||||
|
@ -341,6 +341,16 @@ int BladeMeditationFeat(object oInitiator);
|
||||
*/
|
||||
int BladeMeditationDamage(object oInitiator, int nMoveId);
|
||||
|
||||
|
||||
/**
|
||||
* Returns 1 if Blade Meditation & Discipline match
|
||||
* @param oInitiator Person to check
|
||||
* @param nDiscipline Discipline to match
|
||||
*
|
||||
* @return 1 or 0
|
||||
*/
|
||||
int HasBladeMeditationForDiscipline(object oInitiator, int nDiscipline);
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Includes */
|
||||
//////////////////////////////////////////////////
|
||||
@ -1266,4 +1276,18 @@ int BladeMeditationDamage(object oInitiator, int nMoveId)
|
||||
return 1;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int HasBladeMeditationForDiscipline(object oInitiator, int nDiscipline)
|
||||
{
|
||||
if (!GetIsObjectValid(oInitiator))
|
||||
return FALSE;
|
||||
|
||||
int nFeatDiscipline = BladeMeditationFeat(oInitiator);
|
||||
|
||||
// If the discipline for Blade Meditation matches the one we're checking, return true
|
||||
if (nFeatDiscipline == nDiscipline)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
@ -24,6 +24,60 @@ mystery or a spell of higher than 4th level.
|
||||
#include "shd_inc_shdfunc"
|
||||
#include "shd_mysthook"
|
||||
|
||||
void main()
|
||||
{
|
||||
object oShadow = OBJECT_SELF;
|
||||
int nMyst = PRCGetSpellId();
|
||||
|
||||
if(DEBUG) DoDebug("shd_myst_echospl: nMyst " + IntToString(nMyst));
|
||||
|
||||
// Disallow if this spell is from an item
|
||||
if (PRCGetSpellCastItem(oShadow) != OBJECT_INVALID)
|
||||
{
|
||||
FloatingTextStringOnCreature("You cannot Echo spells cast from items.", oShadow);
|
||||
if(DEBUG) DoDebug("shd_myst_echospl: Disallowed - item cast");
|
||||
return;
|
||||
}
|
||||
// Disallow if this spell is cast by the shadowcaster itself
|
||||
if (GetLastSpellCaster() == oShadow)
|
||||
{
|
||||
FloatingTextStringOnCreature("You cannot Echo your own spells.", oShadow);
|
||||
if(DEBUG) DoDebug("shd_myst_echospl: Disallowed - item cast or cast by oShadow");
|
||||
return;
|
||||
}
|
||||
|
||||
if (GetLocalInt(oShadow, "EchoedSpell"))
|
||||
{
|
||||
int nSpellId = GetLocalInt(oShadow, "EchoedSpell");
|
||||
int nDC = 10 + StringToInt(Get2DACache("spells", "Innate", nSpellId)) + GetAbilityModifier(ABILITY_CHARISMA, oShadow);
|
||||
|
||||
if(DEBUG) DoDebug("shd_myst_echospl: Echo SpellId " + IntToString(nSpellId) + " at DC " + IntToString(nDC));
|
||||
|
||||
AssignCommand(oShadow, ActionCastSpell(nSpellId, GetShadowcasterLevel(oShadow), 0, nDC));
|
||||
}
|
||||
else
|
||||
{
|
||||
if(DEBUG) DoDebug("shd_myst_echospl: MYST_ECHO_SPELL");
|
||||
if (!ShadPreMystCastCode()) return;
|
||||
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
struct mystery myst = EvaluateMystery(oShadow, oTarget, METASHADOW_NONE);
|
||||
|
||||
if (myst.bCanMyst)
|
||||
{
|
||||
if(DEBUG) DoDebug("shd_myst_echospl: MYST_ECHO_SPELL bCanMyst");
|
||||
SetLocalInt(oTarget, "EchoSpell", TRUE);
|
||||
SetLocalObject(oTarget, "EchoSpell", oShadow);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DIMENSIONANCHOR), oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* #include "shd_inc_shdfunc"
|
||||
#include "shd_mysthook"
|
||||
|
||||
void main()
|
||||
{
|
||||
object oShadow = OBJECT_SELF;
|
||||
@ -56,4 +110,4 @@ void main()
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DIMENSIONANCHOR), oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
} */
|
@ -46,7 +46,7 @@ void main()
|
||||
if(move.bCanManeuver)
|
||||
{
|
||||
effect eNone;
|
||||
int nDC = GetDefenderAC(oTarget, oInitiator);
|
||||
int nDC = GetDefenderAC(oTarget, oInitiator);
|
||||
int nAB = -2;
|
||||
if (GetIsSkillSuccessful(oInitiator, SKILL_CONCENTRATION, nDC))
|
||||
{
|
||||
|
@ -27,19 +27,26 @@ or be unable to take any actions for 1 round.
|
||||
|
||||
void TOBAttack(object oTarget, object oInitiator)
|
||||
{
|
||||
effect eNone;
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Disrupting Blow Hit", "Disrupting Blow Miss");
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
int nDC = 15 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
|
||||
|
||||
// Saving Throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC))
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDazed(), oTarget, RoundsToSeconds(1));
|
||||
}
|
||||
}
|
||||
effect eNone;
|
||||
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Disrupting Blow Hit", "Disrupting Blow Miss");
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
int nDC = 15 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
// Saving Throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC))
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDazed(), oTarget, RoundsToSeconds(1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void main()
|
||||
|
@ -29,14 +29,22 @@
|
||||
|
||||
void TOBAttack(object oTarget, object oInitiator)
|
||||
{
|
||||
effect eNone = EffectVisualEffect(VFX_IMP_BLINDDEAD_DN_CYAN);
|
||||
int nDC = 14 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
effect eNone = EffectVisualEffect(VFX_IMP_BLINDDEAD_DN_CYAN);
|
||||
int nAB = 0;
|
||||
if (GetLocalInt(oInitiator, "SupernalAttack")) nAB += 1;
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, nAB, 0, 0, "Mind Strike Hit", "Mind Strike Miss");
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
// Saving Throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, (14 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator))))
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC))
|
||||
{
|
||||
ApplyAbilityDamage(oTarget, ABILITY_WISDOM, d4(), DURATION_TYPE_PERMANENT);
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ Range: Personal
|
||||
Target: You
|
||||
|
||||
In the blink of an eye, you make your move. Your speed, reflexes, and boundless confidence
|
||||
combine to allow you to make a fast, bold move that catches your fores off guard.
|
||||
combine to allow you to make a fast, bold move that catches your foes off guard.
|
||||
|
||||
Your speed doubles for one round.
|
||||
|
||||
|
@ -41,8 +41,15 @@ void main()
|
||||
// Enemy check
|
||||
if (GetIsEnemy(oProneTarget, oInitiator))
|
||||
{
|
||||
int nDC = 10 + GetHitDice(oInitiator)/2 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
// Save check
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oProneTarget, (10 + GetHitDice(oInitiator)/2 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator))))
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oProneTarget, nDC))
|
||||
{
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oProneTarget, 6.0);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(12)), oProneTarget);
|
||||
|
@ -32,8 +32,16 @@ void main()
|
||||
object oProneTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(10.0), GetLocation(oInitiator));
|
||||
while(GetIsObjectValid(oProneTarget))
|
||||
{
|
||||
// Skill check
|
||||
if (!GetIsSkillSuccessful(oProneTarget, SKILL_BALANCE, 15))
|
||||
int nDC = 15;
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
// Skill check
|
||||
if (!GetIsSkillSuccessful(oProneTarget, SKILL_BALANCE, nDC))
|
||||
{
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oProneTarget, 6.0);
|
||||
}
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
You cause a 10 foot tall pillar of stone to appear, tossing enemies to the ground.
|
||||
*/
|
||||
|
||||
#include "tob_inc_move"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
@ -26,11 +26,18 @@ void main()
|
||||
object oProneTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(10.0), GetLocation(oInitiator));
|
||||
while(GetIsObjectValid(oProneTarget))
|
||||
{
|
||||
// Save check
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oProneTarget, (10 + GetHitDice(oInitiator)/2 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator))))
|
||||
int nDC = 10 + GetHitDice(oInitiator)/2 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
// Save check
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oProneTarget, nDC))
|
||||
{
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oProneTarget, 6.0);
|
||||
}
|
||||
}
|
||||
|
||||
oProneTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(10.0), GetLocation(oInitiator));
|
||||
}
|
||||
|
@ -28,8 +28,17 @@ void main()
|
||||
{
|
||||
//Declare major variables
|
||||
object oTarget = GetEnteringObject();
|
||||
object oInitiator = GetAreaOfEffectCreator(OBJECT_SELF);
|
||||
|
||||
int nDC = 10;
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, DISCIPLINE_STONE_DRAGON);
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
// Cleaned up on exit
|
||||
if (!GetIsSkillSuccessful(oTarget, SKILL_BALANCE, 10) && GetIsEnemy(oTarget, GetAreaOfEffectCreator()))
|
||||
if (!GetIsSkillSuccessful(oTarget, SKILL_BALANCE, nDC) && GetIsEnemy(oTarget, GetAreaOfEffectCreator()))
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oTarget, 6.0);
|
||||
}
|
@ -39,8 +39,15 @@ void TOBAttack(object oTarget, object oInitiator)
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(8), 0, "Castigating Strike Hit", "Castigating Strike Miss");
|
||||
if(GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
int nDC = 17 + GetAbilityModifier(ABILITY_CHARISMA, oInitiator);
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
// Saving Throw for the primary target
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (17 + GetAbilityModifier(ABILITY_CHARISMA, oInitiator))))
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
|
||||
{
|
||||
effect eLink = ExtraordinaryEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
|
||||
@ -64,7 +71,7 @@ void TOBAttack(object oTarget, object oInitiator)
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M_PURPLE), oAreaTarget);
|
||||
|
||||
// Saving Throw for the secondary targets
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oAreaTarget, (17 + GetAbilityModifier(ABILITY_CHARISMA, oInitiator))))
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oAreaTarget, nDC))
|
||||
{
|
||||
effect eLink = ExtraordinaryEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oAreaTarget);
|
||||
|
@ -35,8 +35,14 @@ void TOBAttack(object oTarget, object oInitiator)
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Daunting Strike Hit", "Daunting Strike Miss");
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
// Saving Throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (15 + GetAbilityModifier(ABILITY_CHARISMA, oInitiator))))
|
||||
int nDC = 15 + GetAbilityModifier(ABILITY_CHARISMA, oInitiator);
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
// Saving Throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
|
||||
{
|
||||
effect eLink = ExtraordinaryEffect(EffectLinkEffects(EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED), EffectShaken()));
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 60.0);
|
||||
|
@ -46,6 +46,6 @@ void main()
|
||||
{
|
||||
effect eNone = EffectVisualEffect(PSI_IMP_CONCUSSION_BLAST);
|
||||
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator);
|
||||
DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d8(8), GetWeaponDamageType(oWeap), "Divine Surge Hit", "Divine Surge Miss"));
|
||||
DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d8(8), GetWeaponDamageType(oWeap), "Divine Surge Hit", "Divine Surge Miss"));
|
||||
}
|
||||
}
|
@ -41,6 +41,13 @@ void main()
|
||||
effect eExplode = EffectVisualEffect(VFX_FNF_FIREBALL);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget);
|
||||
int nDC = 11 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
//Get the first target in the radius around the caster
|
||||
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(30.0), lTarget);
|
||||
while(GetIsObjectValid(oTarget))
|
||||
|
@ -66,6 +66,13 @@ void Deathmark(object oInitiator, object oTarget)
|
||||
float fDist = DoDeathmarkArea(oTarget);
|
||||
//FloatingTextStringOnCreature("Deathmark Area "+FloatToString(fDist), oInitiator);
|
||||
int nDC = 13 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
|
||||
|
||||
//Get the first target in the radius around the caster
|
||||
|
@ -51,6 +51,13 @@ void main()
|
||||
float fLength = FeetToMeters(60.0);
|
||||
vector vOrigin = GetPosition(oInitiator);
|
||||
int nDC = 14 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M);
|
||||
// Loop over targets in the line shape
|
||||
oTarget = MyFirstObjectInShape(SHAPE_SPELLCYLINDER, fLength, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, vOrigin);
|
||||
|
@ -48,6 +48,13 @@ void main()
|
||||
{
|
||||
location lTarget = GetLocation(oInitiator);
|
||||
int nDC = 12 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
|
||||
//Get the first target in the radius around the caster
|
||||
oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, FeetToMeters(30.0), PRCGetSpellTargetLocation(), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
||||
|
@ -50,6 +50,13 @@ void main()
|
||||
{
|
||||
location lTarget = GetLocation(oInitiator);
|
||||
int nDC = 19 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
|
||||
//Get the first target in the radius around the caster
|
||||
oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(60.0), PRCGetSpellTargetLocation(), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
||||
|
@ -49,6 +49,13 @@ void main()
|
||||
{
|
||||
location lTarget = GetLocation(oInitiator);
|
||||
int nDC = 16 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M);
|
||||
//Get the first target in the radius around the caster
|
||||
oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(30.0), PRCGetSpellTargetLocation(), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
||||
|
@ -49,6 +49,13 @@ void main()
|
||||
{
|
||||
location lTarget = GetLocation(oInitiator);
|
||||
int nDC = 18 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
|
||||
//Get the first target in the radius around the caster
|
||||
oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, FeetToMeters(30.0), PRCGetSpellTargetLocation(), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
||||
|
@ -31,17 +31,24 @@ Str modifier) or be dazed for 1 round.
|
||||
|
||||
void TOBAttack(object oTarget, object oInitiator)
|
||||
{
|
||||
effect eNone;
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Dazing Strike Hit", "Dazing Strike Miss");
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
// Saving Throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (15 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator))))
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDazed(), oTarget, RoundsToSeconds(1));
|
||||
}
|
||||
}
|
||||
effect eNone;
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Dazing Strike Hit", "Dazing Strike Miss");
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
int nDC = 15 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
` // Saving Throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDazed(), oTarget, RoundsToSeconds(1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void main()
|
||||
|
@ -39,6 +39,13 @@ void TOBAttack(object oTarget, object oInitiator)
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
int nDC = 13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
int nDamage = 4;
|
||||
if (PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_NONE))
|
||||
nDamage = 2;
|
||||
|
@ -50,7 +50,14 @@ void main()
|
||||
if(move.bCanManeuver)
|
||||
{
|
||||
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator);
|
||||
int nDC = d20(1) + GetAttackBonus(oTarget, oInitiator, oWeap);
|
||||
int nDC = d20(1) + GetAttackBonus(oTarget, oInitiator, oWeap);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
SetLocalInt(oInitiator, "IHLightningThrow", TRUE);
|
||||
float fLength = FeetToMeters(30.0);
|
||||
location lTarget = PRCGetSpellTargetLocation();
|
||||
|
@ -26,18 +26,25 @@ to 2 points, although the foe still takes full normal melee damage.
|
||||
|
||||
void TOBAttack(object oTarget, object oInitiator)
|
||||
{
|
||||
effect eNone;
|
||||
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Bloodletting Strike Hit", "Bloodletting Strike Miss");
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
int nDam = 4;
|
||||
|
||||
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (15 + GetAbilityModifier(ABILITY_WISDOM, oInitiator)))) nDam = 2;
|
||||
|
||||
ApplyAbilityDamage(oTarget, ABILITY_CONSTITUTION, nDam, DURATION_TYPE_TEMPORARY, TRUE, -1.0);
|
||||
}
|
||||
effect eNone;
|
||||
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Bloodletting Strike Hit", "Bloodletting Strike Miss");
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
int nDam = 4;
|
||||
|
||||
int nDC = 15 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC)) nDam = 2;
|
||||
|
||||
ApplyAbilityDamage(oTarget, ABILITY_CONSTITUTION, nDam, DURATION_TYPE_TEMPORARY, TRUE, -1.0);
|
||||
}
|
||||
}
|
||||
|
||||
void main()
|
||||
|
@ -38,8 +38,16 @@ void TOBAttack(object oTarget, object oInitiator)
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, nDamage, nDamageType, "Clinging Shadow Strike Hit", "Clinging Shadow Strike Miss");
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
// Saving Throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (11 + GetAbilityModifier(ABILITY_WISDOM, oInitiator))))
|
||||
int nDC = 11 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
// Saving Throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
|
||||
{
|
||||
effect eLink = SupernaturalEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL));
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
|
||||
|
@ -31,14 +31,22 @@
|
||||
|
||||
void TOBAttack(object oTarget, object oInitiator)
|
||||
{
|
||||
effect eNone;
|
||||
effect eNone;
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Drain Vitality Hit", "Drain Vitality Miss");
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCMySavingThrow(SAVING_THROW_FORT, oTarget, 12 + GetAbilityModifier(ABILITY_WISDOM, oInitiator),SAVING_THROW_TYPE_NONE))
|
||||
{
|
||||
ApplyAbilityDamage(oTarget, ABILITY_CONSTITUTION, 2, DURATION_TYPE_TEMPORARY, TRUE, -1.0f);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE_RED), oTarget);
|
||||
}
|
||||
|
||||
int nDC = 12 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE))
|
||||
{
|
||||
ApplyAbilityDamage(oTarget, ABILITY_CONSTITUTION, 2, DURATION_TYPE_TEMPORARY, TRUE, -1.0f);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE_RED), oTarget);
|
||||
}
|
||||
}
|
||||
|
||||
void main()
|
||||
|
@ -31,8 +31,15 @@ void TOBAttack(object oTarget, object oInitiator)
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
int nDam = d6(15);
|
||||
|
||||
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (15 + GetAbilityModifier(ABILITY_WISDOM, oInitiator)))) nDam = d6(5);
|
||||
|
||||
int nDC = 15 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC)) nDam = d6(5);
|
||||
|
||||
if(!GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT))
|
||||
{
|
||||
|
@ -45,7 +45,15 @@ void TOBAttack(object oTarget, object oInitiator)
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (18 + GetAbilityModifier(ABILITY_WISDOM, oInitiator))))
|
||||
int nDC = 18 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
|
||||
{
|
||||
int nLevels = d4();
|
||||
|
||||
|
@ -53,7 +53,15 @@ void TOBAttack(object oTarget, object oInitiator)
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCGetIsAliveCreature(oTarget))
|
||||
{
|
||||
// Saving Throw
|
||||
int nSave = PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (19 + GetAbilityModifier(ABILITY_WISDOM, oInitiator)));
|
||||
int nDC = 19 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
int nSave = PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC);
|
||||
int nRoll = d20(1);
|
||||
int nDam;
|
||||
|
||||
|
@ -47,22 +47,28 @@ void main()
|
||||
int nTouchAttack = PRCDoMeleeTouchAttack(oTarget);
|
||||
if(nTouchAttack > 0)
|
||||
{
|
||||
|
||||
// Saving Throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (14 + GetAbilityModifier(ABILITY_WISDOM, oInitiator))))
|
||||
{
|
||||
effect eParal = EffectParalyze();
|
||||
effect eVis = EffectVisualEffect(82);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eDur2 = EffectVisualEffect(VFX_DUR_PARALYZED);
|
||||
effect eDur3 = EffectVisualEffect(VFX_DUR_PARALYZE_HOLD);
|
||||
int nDC = 14 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
effect eLink = EffectLinkEffects(eDur2, eDur);
|
||||
eLink = EffectLinkEffects(eLink, eParal);
|
||||
eLink = EffectLinkEffects(eLink, eVis);
|
||||
eLink = EffectLinkEffects(eLink, eDur3);
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(d3()));
|
||||
}
|
||||
// Saving Throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
|
||||
{
|
||||
effect eParal = EffectParalyze();
|
||||
effect eVis = EffectVisualEffect(82);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eDur2 = EffectVisualEffect(VFX_DUR_PARALYZED);
|
||||
effect eDur3 = EffectVisualEffect(VFX_DUR_PARALYZE_HOLD);
|
||||
|
||||
effect eLink = EffectLinkEffects(eDur2, eDur);
|
||||
eLink = EffectLinkEffects(eLink, eParal);
|
||||
eLink = EffectLinkEffects(eLink, eVis);
|
||||
eLink = EffectLinkEffects(eLink, eDur3);
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(d3()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -40,14 +40,21 @@ void TOBAttack(object oTarget, object oInitiator)
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, nDamage, nDamageType, "Obscuring Shadow Veil Hit", "Obscuring Shadow Veil Miss");
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
int nDC = 14 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
// Saving Throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (14 + GetAbilityModifier(ABILITY_WISDOM, oInitiator))))
|
||||
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
|
||||
{
|
||||
effect eLink = SupernaturalEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL));
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
|
||||
eLink = SupernaturalEffect(EffectMissChance(50));
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0);
|
||||
}
|
||||
effect eLink = SupernaturalEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL));
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
|
||||
eLink = SupernaturalEffect(EffectMissChance(50));
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -63,6 +63,13 @@ void main()
|
||||
|
||||
//Apply the flat-footed effect
|
||||
int nDC = 13 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE))
|
||||
{
|
||||
AssignCommand(oTarget, ClearAllActions(TRUE));
|
||||
|
@ -61,7 +61,14 @@ void main()
|
||||
ApplyTouchAttackDamage(oInitiator, oTarget, iAttackRoll, d6(8), DAMAGE_TYPE_MAGICAL);
|
||||
|
||||
//Apply the stun effect
|
||||
int nDC = 16 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
|
||||
int nDC = 16 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE))
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectStunned(), oTarget, RoundsToSeconds(1));
|
||||
|
@ -40,11 +40,18 @@ void TOBAttack(object oTarget, object oInitiator)
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
int nDC = 13 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
int nDamage = 4;
|
||||
if (PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE))
|
||||
if (PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE))
|
||||
nDamage = 2;
|
||||
ApplyAbilityDamage(oTarget, ABILITY_STRENGTH, nDamage, DURATION_TYPE_PERMANENT);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY), oTarget);
|
||||
ApplyAbilityDamage(oTarget, ABILITY_STRENGTH, nDamage, DURATION_TYPE_PERMANENT);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY), oTarget);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -34,8 +34,14 @@ void TOBAttack(object oTarget, object oInitiator)
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(4), GetWeaponDamageType(oWeap), "Bone Crusher Hit", "Bone Crusher Miss");
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
// Saving Throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator))))
|
||||
int nDC = 13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
// Saving Throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
|
||||
{
|
||||
effect eLink = SupernaturalEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL));
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
|
||||
|
@ -31,19 +31,26 @@ square.
|
||||
|
||||
void TOBAttack(object oTarget, object oInitiator)
|
||||
{
|
||||
effect eNone;
|
||||
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator);
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(6), GetWeaponDamageType(oWeap), "Colossus Strike Hit", "Colossus Strike Miss");
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
int nDC = 17 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE, oInitiator, 1.0))
|
||||
{
|
||||
float fFeet = IntToFloat(5 * d4(1));
|
||||
_DoBullRushKnockBack(oTarget, oInitiator, fFeet);
|
||||
}
|
||||
}
|
||||
effect eNone;
|
||||
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator);
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(6), GetWeaponDamageType(oWeap), "Colossus Strike Hit", "Colossus Strike Miss");
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
int nDC = 17 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE, oInitiator, 1.0))
|
||||
{
|
||||
float fFeet = IntToFloat(5 * d4(1));
|
||||
_DoBullRushKnockBack(oTarget, oInitiator, fFeet);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void main()
|
||||
|
@ -54,6 +54,12 @@ void main()
|
||||
|
||||
location lLoc = GetLocation(oInitiator);
|
||||
int nDC = 18 + (GetAbilityModifier(ABILITY_STRENGTH, oInitiator));
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
//Shaking
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), lLoc);
|
||||
|
@ -35,18 +35,23 @@ damage.
|
||||
|
||||
void TOBAttack(object oTarget, object oInitiator)
|
||||
{
|
||||
effect eNone;
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(4), 0, "Iron Bones Hit", "Iron Bones Miss");
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
//Save
|
||||
int nDC = 16 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE, oInitiator, 1.0))
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDazed(), oTarget, RoundsToSeconds(1));
|
||||
}
|
||||
}
|
||||
effect eNone;
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(4), 0, "Iron Bones Hit", "Iron Bones Miss");
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
//Save
|
||||
int nDC = 16 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE, oInitiator, 1.0))
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDazed(), oTarget, RoundsToSeconds(1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void main()
|
||||
|
@ -34,25 +34,25 @@ times you move into or through its space.
|
||||
|
||||
void main()
|
||||
{
|
||||
if (!PreManeuverCastCode())
|
||||
{
|
||||
// If code within the PreManeuverCastCode (i.e. UMD) reports FALSE, do not run this spell
|
||||
return;
|
||||
}
|
||||
|
||||
// End of Spell Cast Hook
|
||||
|
||||
object oInitiator = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
struct maneuver move = EvaluateManeuver(oInitiator, oTarget);
|
||||
|
||||
if(move.bCanManeuver)
|
||||
{
|
||||
//Twice the speed
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectMovementSpeedIncrease(99), oInitiator, RoundsToSeconds(1));
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(AOE_MOB_MOUNTAIN_AVALANCHE), oInitiator, 6.0);
|
||||
}
|
||||
if (!PreManeuverCastCode())
|
||||
{
|
||||
// If code within the PreManeuverCastCode (i.e. UMD) reports FALSE, do not run this spell
|
||||
return;
|
||||
}
|
||||
|
||||
// End of Spell Cast Hook
|
||||
|
||||
object oInitiator = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
struct maneuver move = EvaluateManeuver(oInitiator, oTarget);
|
||||
|
||||
if(move.bCanManeuver)
|
||||
{
|
||||
//Twice the speed
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectMovementSpeedIncrease(99), oInitiator, RoundsToSeconds(1));
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(AOE_MOB_MOUNTAIN_AVALANCHE), oInitiator, 6.0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -30,18 +30,27 @@
|
||||
|
||||
void TOBAttack(object oTarget, object oInitiator)
|
||||
{
|
||||
effect eNone = EffectVisualEffect(PSI_IMP_CONCUSSION_BLAST);
|
||||
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator);
|
||||
effect eNone = EffectVisualEffect(PSI_IMP_CONCUSSION_BLAST);
|
||||
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator);
|
||||
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(2), GetWeaponDamageType(oWeap), "Overwhelming Mountain Strike Hit", "Overwhelming Mountain Strike Miss");
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
// Saving Throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator))))
|
||||
{
|
||||
{
|
||||
int nDC = 13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
// Saving Throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
|
||||
{
|
||||
effect eLink = ExtraordinaryEffect(EffectSlow());
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void main()
|
||||
|
@ -29,15 +29,22 @@
|
||||
|
||||
void TOBAttack(object oTarget, object oInitiator)
|
||||
{
|
||||
effect eNone;
|
||||
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator);
|
||||
effect eNone;
|
||||
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator);
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(1), GetWeaponDamageType(oWeap), "Stone Vise Hit", "Stone Vise Miss");
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCMySavingThrow(SAVING_THROW_FORT, oTarget, 12 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator),SAVING_THROW_TYPE_NONE))
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectCutsceneParalyze()), oTarget, 6.0);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DIMENSIONLOCK), oTarget);
|
||||
}
|
||||
|
||||
int nDC = 12 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE))
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectCutsceneParalyze()), oTarget, 6.0);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DIMENSIONLOCK), oTarget);
|
||||
}
|
||||
}
|
||||
|
||||
void main()
|
||||
|
@ -37,8 +37,14 @@ void TOBAttack(object oTarget, object oInitiator)
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(4), 0, "Strike of the Broken Shield Hit", "Strike of the Broken Shield Miss");
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
// Saving Throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, (14 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator))))
|
||||
int nDC = 14 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
// Saving Throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, nDC))
|
||||
{
|
||||
AssignCommand(oTarget, ClearAllActions(TRUE));
|
||||
}
|
||||
|
@ -77,7 +77,13 @@ void main()
|
||||
// Saving Throw for area target
|
||||
int nDamage = d6(4);
|
||||
// Adjust damage according to Reflex Save, Evasion or Improved Evasion
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oAreaTarget, (13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator)), SAVING_THROW_TYPE_NONE);
|
||||
int nDC = 13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oAreaTarget, nDC, SAVING_THROW_TYPE_NONE);
|
||||
|
||||
if(nDamage > 0)
|
||||
{
|
||||
|
@ -31,14 +31,22 @@
|
||||
|
||||
void TOBAttack(object oTarget, object oInitiator)
|
||||
{
|
||||
effect eNone;
|
||||
effect eNone;
|
||||
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Clever Positioning Hit", "Clever Positioning Miss");
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, 12 + GetAbilityModifier(ABILITY_DEXTERITY, oInitiator),SAVING_THROW_TYPE_NONE))
|
||||
{
|
||||
DoTransposition(TRUE, FALSE);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_WIND), oTarget);
|
||||
}
|
||||
int nDC = 12 + GetAbilityModifier(ABILITY_DEXTERITY, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, nDC, SAVING_THROW_TYPE_NONE))
|
||||
{
|
||||
DoTransposition(TRUE, FALSE);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_WIND), oTarget);
|
||||
}
|
||||
}
|
||||
|
||||
void main()
|
||||
|
@ -50,11 +50,11 @@ void main()
|
||||
if (IPGetIsMeleeWeapon(oItem))
|
||||
{
|
||||
// Perform first bonus attack, overriding weapon just to make sure
|
||||
DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Raging Mongoose Hit", "Raging Mongoose Miss", FALSE, oItem));
|
||||
DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Dancing Mongoose Hit", "Dancing Mongoose Miss", FALSE, oItem));
|
||||
if (IPGetIsMeleeWeapon(oItem2))
|
||||
{
|
||||
// Perform second bonus attack, overriding weapon just to make sure
|
||||
DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Raging Mongoose Hit", "Raging Mongoose Miss", FALSE, oItem2));
|
||||
DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Dancing Mongoose Hit", "Dancing Mongoose Miss", FALSE, oItem2));
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -47,6 +47,13 @@ void TOBAttack(object oTarget, object oInitiator)
|
||||
{
|
||||
//Save
|
||||
int nDC = 19 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_DEATH) && !GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT))
|
||||
{
|
||||
DeathlessFrenzyCheck(oTarget);
|
||||
|
@ -31,11 +31,20 @@ void TOBAttack(object oTarget, object oInitiator)
|
||||
{
|
||||
effect eNone = EffectVisualEffect(PSI_IMP_CONCUSSION_BLAST);
|
||||
int nBonus = TOBSituationalAttackBonuses(oInitiator, DISCIPLINE_TIGER_CLAW);
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Flesh Ripper Hit", "Flesh Ripper Miss");
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && !GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT))
|
||||
int nDC = 13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Flesh Ripper Hit", "Flesh Ripper Miss");
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && !GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT))
|
||||
{
|
||||
// Saving Throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator))))
|
||||
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
|
||||
{
|
||||
effect eLink = EffectLinkEffects(EffectAttackDecrease(4), EffectACDecrease(4));
|
||||
eLink = ExtraordinaryEffect(eLink);
|
||||
|
@ -58,8 +58,16 @@ void main()
|
||||
{
|
||||
if(GetIsEnemy(oTarget, oInitiator))
|
||||
{
|
||||
// Saving Throw
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, (14 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator))))
|
||||
// Saving Throw
|
||||
int nDC = 14 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC))
|
||||
{
|
||||
effect eLink = ExtraordinaryEffect(EffectLinkEffects(EffectShaken(), EffectVisualEffect(VFX_IMP_DOOM)));
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 60.0);
|
||||
|
@ -27,25 +27,32 @@ Dexterity damage and the speed penalty.
|
||||
|
||||
void TOBAttack(object oTarget, object oInitiator)
|
||||
{
|
||||
effect eNone;
|
||||
int nBonus = TOBSituationalAttackBonuses(oInitiator, DISCIPLINE_TIGER_CLAW);
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Hamstring Attack Hit", "Hamstring Attack Miss");
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
int nDexDam = d8(1);
|
||||
effect eSlow = EffectMovementSpeedDecrease(33);
|
||||
|
||||
//Save
|
||||
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (17 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator)), SAVING_THROW_TYPE_NONE))
|
||||
{
|
||||
nDexDam = nDexDam/2;
|
||||
eSlow = EffectMovementSpeedDecrease(17);
|
||||
}
|
||||
|
||||
ApplyAbilityDamage(oTarget, ABILITY_DEXTERITY, nDexDam, DURATION_TYPE_PERMANENT);
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSlow, oTarget, TurnsToSeconds(1));
|
||||
}
|
||||
effect eNone;
|
||||
int nDC = 17 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
|
||||
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
|
||||
if (nBladeMed)
|
||||
{
|
||||
nDC += 1;
|
||||
}
|
||||
int nBonus = TOBSituationalAttackBonuses(oInitiator, DISCIPLINE_TIGER_CLAW);
|
||||
PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Hamstring Attack Hit", "Hamstring Attack Miss");
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
{
|
||||
int nDexDam = d8(1);
|
||||
effect eSlow = EffectMovementSpeedDecrease(33);
|
||||
|
||||
//Save
|
||||
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE))
|
||||
{
|
||||
nDexDam = nDexDam/2;
|
||||
eSlow = EffectMovementSpeedDecrease(17);
|
||||
}
|
||||
|
||||
ApplyAbilityDamage(oTarget, ABILITY_DEXTERITY, nDexDam, DURATION_TYPE_PERMANENT);
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSlow, oTarget, TurnsToSeconds(1));
|
||||
}
|
||||
}
|
||||
|
||||
void main()
|
||||
|
@ -43,6 +43,12 @@ void TOBAttack(object oTarget, object oInitiator, int iJumpRoll)
|
||||
effect eNone;
|
||||
int nAB = GetAbilityModifier(ABILITY_DEXTERITY, oTarget);
|
||||
int nBonus = TOBSituationalAttackBonuses(oInitiator, DISCIPLINE_TIGER_CLAW);
|
||||
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
|
||||
if (nBladeMed)
|
||||
{
|
||||
iJumpRoll += 1;
|
||||
}
|
||||
|
||||
DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, nAB + nBonus, d6(10), GetWeaponDamageType(oWeap), "Swooping Dragon Strike Hit", "Swooping Dragon Strike Miss"));
|
||||
|
||||
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
Swarm Tactics
|
||||
|
||||
Devoted Spirit (Stance)
|
||||
White Raven (Stance)
|
||||
Level: Crusader 5, Warblade 5
|
||||
Prerequisite: One White Raven maneuver
|
||||
Initiation Action: 1 Swift Action
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
Swarm Tactics
|
||||
|
||||
Devoted Spirit (Stance)
|
||||
White Raven (Stance)
|
||||
Level: Crusader 5, Warblade 5
|
||||
Prerequisite: One White Raven maneuver
|
||||
Initiation Action: 1 Swift Action
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
White Raven Tactics
|
||||
|
||||
Iron Heart (Boost)
|
||||
White Raven (Boost)
|
||||
Level: Crusader 3, Warblade 3
|
||||
Initiation Action: 1 Swift Action
|
||||
Range: 10 ft.
|
||||
|
@ -75,7 +75,7 @@
|
||||
71 Hadrimoi Ha 16790329 16790329 16790330 16790331 16790332 **** 1 2 8 2 0 2 4 30 8 RACE_FEAT_HADRIM 8163 1 RACIAL_TYPE_HADRIMOI 15 8 1 ushemoi **** **** **** 4 30 3 1 INT 274
|
||||
72 RedspawnArcaniss Ra 16790334 16790334 16790335 16790336 16790337 **** 353 0 2 0 6 0 4 40 9 RACE_FEAT_REDARC 8163 1 RACIAL_TYPE_REDSPAWN_ARCANISS 15 9 1 redspawn **** **** **** 4 30 3 1 INT 274
|
||||
73 Gloura Gl 16790346 16790346 16790347 16790348 16790349 **** 6 0 10 0 6 2 4 30 1 RACE_FEAT_GLOURA 8163 1 RACIAL_TYPE_GLOURA 15 1 1 gloura **** **** **** 4 30 3 1 INT 278
|
||||
74 Muckdweller Mr 16836018 16836018 16836019 16836020 16836021 **** 206 -2 6 0 -2 -2 0 20 8 RACE_FEAT_MUCKD 8163 1 RACIAL_TYPE_MUCKDWELLER 15 8 1 muckdweller **** **** **** 4 30 3 1 INT 276
|
||||
74 Muckdweller Mr 16836018 16836018 16836019 16836020 16836021 **** 206 -6 6 0 -2 -2 0 20 8 RACE_FEAT_MUCKD 8163 1 RACIAL_TYPE_MUCKDWELLER 15 8 1 muckdweller **** **** **** 4 30 3 1 INT 276
|
||||
75 Aranea Ae 16836006 16836006 16836007 16836008 16836009 **** 158 0 4 4 4 2 4 50 9 RACE_FEAT_ARANEA 8163 1 RACIAL_TYPE_ARANEA 15 9 1 aranea **** **** **** 4 30 3 1 INT 284
|
||||
76 Chitine Ch 16832294 16832294 16832295 16832296 16832297 **** 2 **** 2 2 -4 **** 2 30 8 RACE_FEAT_CHIT 16832294 1 RACIAL_TYPE_CHITINE 15 8 1 chitine **** **** **** 4 30 3 1 INT 274
|
||||
77 SpiretopDragon Sd 16835965 16835966 16835967 16835968 16835969 **** 375 -4 8 -4 -2 0 2 60 8 RACE_FEAT_SPDRAG 16835970 1 RACIAL_TYPE_SPIRETOPDRAGON 25 8 1 dragon **** **** **** 4 30 3 1 INT 272
|
||||
|
@ -400,7 +400,6 @@ void main()
|
||||
|
||||
Pwatk(oPC);
|
||||
|
||||
|
||||
object oSkin = GetPCSkin(oPC);
|
||||
|
||||
if (GetAlignmentGoodEvil(oPC)!= ALIGNMENT_GOOD)
|
||||
|
@ -96,7 +96,23 @@ int GetVileFeats(object oPC)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_DART, oPC)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_SICKLE, oPC)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_DWAXE, oPC)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_MINDBLADE, oPC)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_MINDBLADE, oPC)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_EAGLE_CLAW)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_LIGHT_LANCE)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_HEAVY_PICK)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_LIGHT_PICK)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_SAI)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_NUNCHAKU)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_FALCHION)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_SAP)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_KATAR)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_HEAVY_MACE)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_MAUL)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_DBL_SCIMITAR)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_GOAD)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_ELVEN_LIGHTBLADE)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_ELVEN_THINBLADE)
|
||||
+ GetHasFeat(FEAT_VILE_MARTIAL_ELVEN_COURTBLADE)
|
||||
+ GetHasFeat(FEAT_APOSTATE, oPC)
|
||||
+ GetHasFeat(FEAT_DARK_WHISPERS, oPC)
|
||||
+ GetHasFeat(FEAT_MASTERS_WILL, oPC)
|
||||
|
@ -115,6 +115,7 @@ void main()
|
||||
{
|
||||
// And now we can grab them
|
||||
DoGrapple(oPC, oTarget, 0);
|
||||
GZPRCRemoveSpellEffects(SPELL_INVISIBILITY, oPC);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,16 +1,260 @@
|
||||
//:: prc_nui_pwrattk
|
||||
//::
|
||||
//::
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Power Attack script
|
||||
//:: ft_poweratk
|
||||
//::///////////////////////////////////////////////
|
||||
/*
|
||||
This script handles the PRC power attack feats.
|
||||
|
||||
<Ornedan> For PA, I was thinking 3 radials
|
||||
<Ornedan> One for the presets
|
||||
<Ornedan> One for +0, +1, +2, +3, +4
|
||||
<Ornedan> One for +0, +5, +10, +15, +20
|
||||
<Ornedan> And a bunch of switches to control it:
|
||||
<Ornedan> PRC_POWER_ATTACK - 3 values:
|
||||
<Ornedan> -1 -- Disabled. Never apply the PRC PA feats to hide
|
||||
<Ornedan> 0 -- Default. As it is now, you can't go higher than the equivalent BW feat you have
|
||||
<Ornedan> 1 -- Full PnP. Ignores the BW IPA
|
||||
<Ornedan> PRC_POWER_ATTACK_STACK_WITH_BW
|
||||
<Ornedan> 0 - Default. Allow people to use both at the same time
|
||||
<Ornedan> 1 - Add the BW effects in when limiting to BAB
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_inc_combat"
|
||||
#include "inc_addragebonus"
|
||||
//#include "prc_inc_sneak" //for Dragonfire damage type resolving
|
||||
|
||||
/*
|
||||
const int SINGLE_START = 2171;
|
||||
const int SINGLE_LAST = 2175;
|
||||
const int FIVES_START = 2177;
|
||||
const int FIVES_LAST = 2181;
|
||||
*/
|
||||
|
||||
// Converts the given amount of bonus damage to equivalent DAMAGE_BONUS constant
|
||||
// Due to the bonus cap, bonuses are cropped to +20
|
||||
int BonusAtk(int nDmg)
|
||||
{
|
||||
switch (nDmg)
|
||||
{
|
||||
case 1: return DAMAGE_BONUS_1;
|
||||
case 2: return DAMAGE_BONUS_2;
|
||||
case 3: return DAMAGE_BONUS_3;
|
||||
case 4: return DAMAGE_BONUS_4;
|
||||
case 5: return DAMAGE_BONUS_5;
|
||||
case 6: return DAMAGE_BONUS_6;
|
||||
case 7: return DAMAGE_BONUS_7;
|
||||
case 8: return DAMAGE_BONUS_8;
|
||||
case 9: return DAMAGE_BONUS_9;
|
||||
case 10: return DAMAGE_BONUS_10;
|
||||
case 11: return DAMAGE_BONUS_11;
|
||||
case 12: return DAMAGE_BONUS_12;
|
||||
case 13: return DAMAGE_BONUS_13;
|
||||
case 14: return DAMAGE_BONUS_14;
|
||||
case 15: return DAMAGE_BONUS_15;
|
||||
case 16: return DAMAGE_BONUS_16;
|
||||
case 17: return DAMAGE_BONUS_17;
|
||||
case 18: return DAMAGE_BONUS_18;
|
||||
case 19: return DAMAGE_BONUS_19;
|
||||
case 20: return DAMAGE_BONUS_20;
|
||||
case 21: return DAMAGE_BONUS_21;
|
||||
case 22: return DAMAGE_BONUS_22;
|
||||
case 23: return DAMAGE_BONUS_23;
|
||||
case 24: return DAMAGE_BONUS_24;
|
||||
case 25: return DAMAGE_BONUS_25;
|
||||
case 26: return DAMAGE_BONUS_26;
|
||||
case 27: return DAMAGE_BONUS_27;
|
||||
case 28: return DAMAGE_BONUS_28;
|
||||
case 29: return DAMAGE_BONUS_29;
|
||||
case 30: return DAMAGE_BONUS_30;
|
||||
case 31: return DAMAGE_BONUS_31;
|
||||
case 32: return DAMAGE_BONUS_32;
|
||||
case 33: return DAMAGE_BONUS_33;
|
||||
case 34: return DAMAGE_BONUS_34;
|
||||
case 35: return DAMAGE_BONUS_35;
|
||||
case 36: return DAMAGE_BONUS_36;
|
||||
case 37: return DAMAGE_BONUS_37;
|
||||
case 38: return DAMAGE_BONUS_38;
|
||||
case 39: return DAMAGE_BONUS_39;
|
||||
case 40: return DAMAGE_BONUS_40;
|
||||
case 41: return DAMAGE_BONUS_41;
|
||||
case 42: return DAMAGE_BONUS_42;
|
||||
case 43: return DAMAGE_BONUS_43;
|
||||
case 44: return DAMAGE_BONUS_44;
|
||||
case 45: return DAMAGE_BONUS_45;
|
||||
case 46: return DAMAGE_BONUS_46;
|
||||
case 47: return DAMAGE_BONUS_47;
|
||||
case 48: return DAMAGE_BONUS_48;
|
||||
case 49: return DAMAGE_BONUS_49;
|
||||
case 50: return DAMAGE_BONUS_50;
|
||||
}
|
||||
if(nDmg > 50) return DAMAGE_BONUS_50;
|
||||
|
||||
return -1; // Invalid value received
|
||||
}
|
||||
|
||||
/*
|
||||
int CalculatePower(object oUser)
|
||||
{
|
||||
int nPower = GetLocalInt(oUser, "PRC_PowerAttack_Level");
|
||||
int nSID = GetSpellID();
|
||||
|
||||
// Changing the value of +0,+1,+2,+3,+4 radial
|
||||
if(nSID >= SINGLE_START && <= SINGLE_LAST)
|
||||
{
|
||||
// Extract the old fives value
|
||||
nPower = (nPower / 5) * 5;
|
||||
// Add in the new single value
|
||||
nPower += nSID - SINGLE_START;
|
||||
}
|
||||
// Changing the value of +0,+5,+10,+15,+20 radial
|
||||
else if(nSID >= FIVES_START && <= FIVES_LAST)
|
||||
{
|
||||
// Extract the old single value
|
||||
nPower = nPower % 5;
|
||||
// Add in the new fives value
|
||||
nPower += (nSID - FIVES_START) * 5;
|
||||
}
|
||||
// Unknown SpellId
|
||||
else
|
||||
{
|
||||
WriteTimestampedLogEntry("ft_poweratk called with unknown SpellID: " + IntToString(nSID));
|
||||
nPower = 0;
|
||||
}
|
||||
|
||||
// Cache the new PA level
|
||||
SetLocalInt(oUser, "PRC_PowerAttack_Level", nPower);
|
||||
|
||||
return nPower;
|
||||
}
|
||||
*/
|
||||
void main()
|
||||
{
|
||||
|
||||
int nSpellID = PRCGetSpellId();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
object oUser = OBJECT_SELF;
|
||||
int nPower = GetLocalInt(oUser, "PRC_PowerAttack_Level");
|
||||
|
||||
// The PRC Power Attack must be active for this to do anything
|
||||
if(GetPRCSwitch(PRC_POWER_ATTACK) == PRC_POWER_ATTACK_DISABLED)
|
||||
return;
|
||||
|
||||
// Get the old Power Attack, if any
|
||||
int nOld = GetLocalInt(oUser, "PRC_PowerAttackSpellID");
|
||||
|
||||
// Remove effects from it
|
||||
if(nOld)
|
||||
{
|
||||
PRCRemoveSpellEffects(nOld, oUser, oUser);
|
||||
DeleteLocalInt(oUser, "PRC_PowerAttackSpellID");
|
||||
DeleteLocalInt(oUser, "PRC_PowerAttack_DamageBonus");
|
||||
}
|
||||
|
||||
// Activate Power Attack if the new value is non-zero
|
||||
if(nPower)
|
||||
{
|
||||
// Requires the appropriate BW PA feat.
|
||||
if(!GetHasFeat(FEAT_POWER_ATTACK))
|
||||
{
|
||||
FloatingTextStrRefOnCreature(16823148, oUser, FALSE); //Prereq: Power Attack feat
|
||||
return;
|
||||
}
|
||||
if(nPower > 5 && // If the power attack is in BW IPA range
|
||||
!GetHasFeat(FEAT_IMPROVED_POWER_ATTACK) && // And they don't have IPA
|
||||
GetPRCSwitch(PRC_POWER_ATTACK) != PRC_POWER_ATTACK_FULL_PNP) // And full PnP PA, which ignores BW IPA isn't active
|
||||
{
|
||||
FloatingTextStrRefOnCreature(16823149, oUser, FALSE); // Prereq: Improved Power Attack feat
|
||||
return;
|
||||
}
|
||||
|
||||
// This script is for the melee weapon PA. If Power Shot is implemented using the same script
|
||||
// at some future date, change this.
|
||||
object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oUser);
|
||||
int nBase = GetBaseItemType(oWeapon);
|
||||
int nThrow = FALSE;
|
||||
if (GetIsThrowingWeaponType(nBase) && GetHasFeat(FEAT_POWER_THROW, oUser)) nThrow = TRUE; // Power throw allows power attacking with throwing weapons
|
||||
if(GetWeaponRanged(oWeapon) && !nThrow)
|
||||
{
|
||||
FloatingTextStrRefOnCreature(16823150, oUser, FALSE); // You may not use this feat with a ranged weapon.
|
||||
return;
|
||||
}
|
||||
|
||||
// All checks are done, initialize variables for calculating the effect.
|
||||
int nDamageBonusType = GetDamageTypeOfWeapon(INVENTORY_SLOT_RIGHTHAND, oUser);
|
||||
if(GetLocalInt(oUser, "DragonFireAssOn")) nDamageBonusType = GetDragonfireDamageType(oUser);
|
||||
int nDmg, nHit, nDex, nTemp;
|
||||
effect eDamage;
|
||||
effect eToHit;
|
||||
|
||||
// Initialize the calculation with the power attack value given by the user.
|
||||
nHit = nPower;
|
||||
|
||||
// Check if we are set to care about BW power attack being active
|
||||
if(GetPRCSwitch(PRC_POWER_ATTACK_STACK_WITH_BW))
|
||||
{
|
||||
nTemp += GetActionMode(oUser, ACTION_MODE_POWER_ATTACK) ? 5 : 0;
|
||||
nTemp += GetActionMode(oUser, ACTION_MODE_IMPROVED_POWER_ATTACK) ? 10 : 0;
|
||||
}
|
||||
// The attack bonus paid to PA is limited to one's BAB
|
||||
if(GetBaseAttackBonus(oUser) < (nHit + nTemp))
|
||||
{
|
||||
nHit = GetBaseAttackBonus(oUser) - ((GetActionMode(oUser, ACTION_MODE_POWER_ATTACK) ? 5 : 0) +
|
||||
(GetActionMode(oUser, ACTION_MODE_IMPROVED_POWER_ATTACK ? 10 : 0)));
|
||||
if(nHit < 0) nHit = 0;
|
||||
|
||||
FloatingTextStrRefOnCreature(16823151, oUser, FALSE); // Your base attack bonus isn't high enough to pay for chosen Power Attack level.
|
||||
}
|
||||
|
||||
// Focused Strike adds Dex mod to damage, limited to number of AB paid.
|
||||
if(GetHasFeat(FEAT_FOCUSED_STRIKE))
|
||||
{
|
||||
// Negative Dex mod won't reduce damage
|
||||
nDex = GetAbilityModifier(ABILITY_DEXTERITY) > 0 ? GetAbilityModifier(ABILITY_DEXTERITY) : 0;
|
||||
if(nDex > nHit) nDex = nHit;
|
||||
}
|
||||
|
||||
// Calculate in Frenzied Berserker PA feats
|
||||
nTemp = GetHasFeat(FEAT_SUPREME_POWER_ATTACK, oUser) ? nHit * 2 :
|
||||
GetHasFeat(FEAT_FREBZK_IMPROVED_POWER_ATTACK, oUser) ? FloatToInt(1.5 * nHit) :
|
||||
nHit;
|
||||
|
||||
// Calculate the damage. Supreme Power Attack doubles the damage
|
||||
nDmg = BonusAtk(nTemp + nDex + GetEssentiaInvestedFeat(oUser, FEAT_COBALT_POWER));
|
||||
|
||||
eDamage = EffectDamageIncrease(nDmg, nDamageBonusType);
|
||||
eToHit = EffectAttackDecrease(nHit);
|
||||
|
||||
effect eLink = ExtraordinaryEffect(EffectLinkEffects(eDamage, eToHit));
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oUser);
|
||||
|
||||
// Cache the spellid of the power attack used. Also acts as a marker
|
||||
//SetLocalInt(oUser, "PRC_PowerAttackSpellID", PRCGetSpellId());
|
||||
SetLocalInt(oUser, "PRC_PowerAttackSpellID", SPELL_NUI_POWER_ATTACK);
|
||||
// Cache the amount of damage granted. This is used by the PRC combat engine
|
||||
SetLocalInt(oUser, "PRC_PowerAttack_DamageBonus", nDmg);
|
||||
// Add an eventscript that makes sure the PC does not use a ranged weapon with Power Attack
|
||||
AddEventScript(oUser, EVENT_ONPLAYEREQUIPITEM, "prc_powatk_equ", TRUE, FALSE);
|
||||
|
||||
// Power Attack Activated
|
||||
string sMes = "*" + GetStringByStrRef(417) + " " + IntToString(nHit) + " " + GetStringByStrRef(63798) + "*";
|
||||
FloatingTextStringOnCreature(sMes, oUser, FALSE);
|
||||
|
||||
if (GetHasFeat(FEAT_FAVORED_POWER_ATTACK, oUser))
|
||||
{
|
||||
ActionCastSpellAtObject(SPELL_UR_FAVORITE_ENEMY, oUser, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
|
||||
}
|
||||
}
|
||||
// Turn Power Attack off
|
||||
else
|
||||
{
|
||||
RemoveEventScript(oUser, EVENT_ONPLAYEREQUIPITEM, "prc_powatk_equ", TRUE);
|
||||
|
||||
// Power Attack Mode Deactivated
|
||||
string sMes = "* " + GetStringByStrRef(58282) + " *";
|
||||
FloatingTextStringOnCreature(sMes, oUser, FALSE);
|
||||
|
||||
if(GetHasFeat(FEAT_FAVORED_POWER_ATTACK, oUser))
|
||||
{
|
||||
ActionCastSpellAtObject(SPELL_UR_FAVORITE_ENEMY, oUser, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -87,7 +87,8 @@ void main()
|
||||
ExecuteScript(GetLocalString(oPC, PRC_CHAT_HOOK_SCRIPT), oPC);
|
||||
_clear_chat_vars(oPC);
|
||||
}
|
||||
|
||||
|
||||
ExecuteScript("hp_pa_chatscript", oPC);
|
||||
// Execute scripts hooked to this event for the player triggering it
|
||||
ExecuteAllScriptsHookedToEvent(oPC, EVENT_ONPLAYERCHAT);
|
||||
}
|
@ -67,6 +67,13 @@ void main()
|
||||
return;
|
||||
}
|
||||
|
||||
//can't stack Starmantels
|
||||
if (GetHasSpellEffect(SPELL_STARMANTLE, oPC))
|
||||
{
|
||||
PRCRemoveSpellEffects(SPELL_STARMANTLE, OBJECT_SELF, OBJECT_SELF);
|
||||
RemoveEventScript(oTarget, EVENT_ONHIT, "prc_evnt_strmtl", TRUE, FALSE);
|
||||
}
|
||||
|
||||
//VFX
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_SANCTUARY), oTarget, fDur);
|
||||
|
||||
|
@ -100,8 +100,9 @@ int X2_UMD()
|
||||
// -------------------------------------------------------------------------
|
||||
if(!GetHasSkill(SKILL_USE_MAGIC_DEVICE, oCaster)
|
||||
&& !GetLevelByClass(CLASS_TYPE_ROGUE, oCaster)
|
||||
&& !GetLevelByClass(CLASS_TYPE_ASSASSIN, oCaster)
|
||||
&& !GetLevelByClass(CLASS_TYPE_SHADOWDANCER, oCaster))
|
||||
&& !GetLevelByClass(CLASS_TYPE_SHADOW_THIEF_AMN, oCaster)
|
||||
&& !GetLevelByClass(CLASS_TYPE_FACTOTUM, oCaster)
|
||||
&& !GetLevelByClass(CLASS_TYPE_ASSASSIN, oCaster))
|
||||
{
|
||||
// ---------------------------------------------------------------------
|
||||
//SpeakString("I have no UMD, thus I can cast the spell... ");
|
||||
|
Binary file not shown.
@ -51087,7 +51087,8 @@ Aranea Ability Adjustments: +4 Dex, +4 Con, +4 Int, +2 Wis, +4 Cha
|
||||
Favored Class (Sorcerer): A multiclass aranea's sorcerer class does not count when determining whether they suffer an XP penalty for multiclassing.
|
||||
|
||||
Racial Traits:
|
||||
- A aranea's base land speed is 50 feet in spider form, 30 in hybrid or humanoid forms.
|
||||
- An aranea's base land speed is 50 feet in spider form, 30 in hybrid or humanoid forms.
|
||||
- Racial Hit Dice: An aranea begins with three levels of shapechanger, which provide 3d8 Hit Dice.
|
||||
- Medium: As Medium creatures, aranea have no special bonuses or penalties due to their size.
|
||||
- Natural Weapons: An aranea can bite 1d6 points of damage in spider & hybrid form.
|
||||
- Poison: An aranea's bite is poisonous & does 1d6 STR initial damage & 2d6 secondary damage.
|
||||
@ -73833,7 +73834,6 @@ Bonus Feats: The epic Umbral Disciple gains a bonus feat every three levels
|
||||
|
||||
Special:
|
||||
Sneak Attack: The epic Umbral Disciple's sneak attack continues to increase by 1d6 every 3 levels.
|
||||
Meldshaping: Increases as if gaining a level in your meldshaper class at each level.
|
||||
|
||||
Epic Umbral Disciple Bonus Feat List:
|
||||
Armor Skin, Blinding Speed, Bonus Soulmeld, Epic Dodge, Epic Energy Resistance, Epic Essentia, Epic Prowess, Epic Reflexes, Epic Reputation, Epic Self-Concealment, Epic Skill Focus, Epic Superior Initiative, Epic Weapon Focus, Extra Chakra Bind, Great Dexterity, Improved Sneak Attack, Lingering Damage, Open Heart Chakra, Open Soul Chakra, Rapid Meldshaping, Rebind Soulmeld.</entry>
|
||||
|
@ -27,7 +27,10 @@ void SetPowerAttack();
|
||||
//
|
||||
void main()
|
||||
{
|
||||
int amount = GetLocalInt(OBJECT_SELF, "PRC_PowerAttack_Level");
|
||||
|
||||
ExecuteScript("prc_nui_pwrattk");
|
||||
|
||||
/* int amount = GetLocalInt(OBJECT_SELF, "PRC_PowerAttack_Level");
|
||||
int prevPowerAttack5 = GetLocalInt(OBJECT_SELF, "prevPowerAttack5");
|
||||
int prevPowerAttack1 = GetLocalInt(OBJECT_SELF, "prevPowerAttack1");
|
||||
int powerAttack5Amount = amount / 5;
|
||||
@ -89,4 +92,5 @@ void main()
|
||||
}
|
||||
SetLocalInt(OBJECT_SELF, "prevPowerAttack1", powerAttack1Amount);
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
99
nwn/nwnprc/trunk/users/jaysyn/hp_string_util.nss
Normal file
99
nwn/nwnprc/trunk/users/jaysyn/hp_string_util.nss
Normal file
@ -0,0 +1,99 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: String Util
|
||||
//:: hp_string_util
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
A util class for providing useful string functions.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Rakiov
|
||||
//:: Created On: 22.05.2005
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
//
|
||||
// StringSplit
|
||||
// Takes a string and splits it by " " into a json list of strings
|
||||
// i.e. "this is a test" returns
|
||||
// {
|
||||
// "this",
|
||||
// "is",
|
||||
// "a",
|
||||
// "test"
|
||||
// }
|
||||
//
|
||||
// Parameters:
|
||||
// string input the string input
|
||||
//
|
||||
// Returns:
|
||||
// json the json list of words
|
||||
//
|
||||
json StringSplit(string input);
|
||||
|
||||
//
|
||||
// TrimString
|
||||
// Takes a string and trims any leading whitespace characters
|
||||
// i.e. " this is a test" returns
|
||||
// "this is a test"
|
||||
//
|
||||
// Parameters:
|
||||
// input string the input string to trim
|
||||
//
|
||||
// Returns:
|
||||
// string the trimmed string
|
||||
//
|
||||
string TrimString(string input);
|
||||
|
||||
json StringSplit(string input)
|
||||
{
|
||||
json retValue = JsonArray();
|
||||
|
||||
string subString = "";
|
||||
//trim any whitespace characters first
|
||||
string currString = TrimString(input);
|
||||
|
||||
// loop until we process the whole string
|
||||
while(currString != "")
|
||||
{
|
||||
string currChar = GetStringLeft(currString, 1);
|
||||
if (currChar != "" && currChar != " ")
|
||||
{
|
||||
// if the current character isn't nothing or whitespace, then add it
|
||||
// to the current sub string.
|
||||
subString += currChar;
|
||||
}
|
||||
else
|
||||
{
|
||||
// otherwise if the substring is not empty, then add it to the list
|
||||
// of words to return
|
||||
if(subString != "")
|
||||
{
|
||||
retValue = JsonArrayInsert(retValue, JsonString(subString));
|
||||
subString = "";
|
||||
}
|
||||
}
|
||||
|
||||
// pop and move to next character
|
||||
currString = GetStringRight(currString, GetStringLength(currString)-1);
|
||||
}
|
||||
|
||||
// if there is any sub string left at the end of the loop, add it to the list
|
||||
if(subString != "")
|
||||
{
|
||||
retValue = JsonArrayInsert(retValue, JsonString(subString));
|
||||
}
|
||||
|
||||
return retValue;
|
||||
}
|
||||
|
||||
string TrimString(string input)
|
||||
{
|
||||
string retValue = input;
|
||||
|
||||
// while the string is not empty and we are looking at a whitespace, pop it.
|
||||
while(retValue != "" && GetStringLeft(retValue, 1) == " ")
|
||||
{
|
||||
retValue = GetStringRight(retValue, GetStringLength(retValue)-1);
|
||||
}
|
||||
|
||||
return retValue;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user