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:
Jaysyn904 2025-05-25 16:16:36 -04:00
parent 41e2f2b91c
commit 8a034b0da0
76 changed files with 3280 additions and 1090 deletions

View File

@ -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 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 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 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 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 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 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 **** **** **** **** **** **** **** **** **** **** **** **** **** **** 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 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 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 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 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 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****

View 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

View File

@ -1,16 +1,183 @@
2DA V2.0 2DA V2.0
FeatLabel FeatIndex List GrantedOnLevel OnMenu FeatLabel FeatIndex List GrantedOnLevel OnMenu
0 Lorestealer_DetectMagic 22867 3 1 1 0 Lorestealer_DetectMagic 22867 3 1 1
1 Meldshield_Invest 8953 3 1 1 1 Meldshield_Invest 8953 3 1 1
2 Meldshield 8954 3 99 1 2 Meldshield 8954 3 99 1
3 DispellingOrb_Invest 8955 3 2 1 3 DispellingOrb_Invest 8955 3 2 1
4 DispellingOrb 8956 3 2 1 4 DispellingOrb 8956 3 2 1
5 MageShackles_Invest 8957 3 4 1 5 MageShackles_Invest 8957 3 4 1
6 MageShackles 8958 3 4 1 6 MageShackles 8958 3 4 1
7 Abrogation_Invest 8959 3 6 1 7 Abrogation_Invest 8959 3 6 1
8 Abrogation 8960 3 6 1 8 Abrogation 8960 3 6 1
9 SpiritFlay_Invest 8961 3 8 1 9 SpiritFlay_Invest 8961 3 8 1
10 SpiritFlay 8962 3 8 1 10 SpiritFlay 8962 3 8 1
11 Integument_Invest 8963 3 10 1 11 Integument_Invest 8963 3 10 1
12 Integument 8964 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

File diff suppressed because it is too large Load Diff

View File

@ -169,22 +169,22 @@ const int FEAT_VILE_MARTIAL_ELVEN_THINBLADE = 24814;
const int FEAT_VILE_MARTIAL_ELVEN_COURTBLADE = 24815; const int FEAT_VILE_MARTIAL_ELVEN_COURTBLADE = 24815;
//:: Sanctify Martial Strike Expansion //:: Sanctify Martial Strike Expansion
const int FEAT_SANCTIFY_MARTIAL_EAGLE_CLAW = 24850; const int FEAT_SANCTIFY_MARTIAL_EAGLE_CLAW = 24850;
const int FEAT_SANCTIFY_MARTIAL_LIGHT_LANCE = 24851; const int FEAT_SANCTIFY_MARTIAL_LIGHT_LANCE = 24851;
const int FEAT_SANCTIFY_MARTIAL_HEAVY_PICK = 24852; const int FEAT_SANCTIFY_MARTIAL_HEAVY_PICK = 24852;
const int FEAT_SANCTIFY_MARTIAL_LIGHT_PICK = 24853; const int FEAT_SANCTIFY_MARTIAL_LIGHT_PICK = 24853;
const int FEAT_SANCTIFY_MARTIAL_SAI = 24854; const int FEAT_SANCTIFY_MARTIAL_SAI = 24854;
const int FEAT_SANCTIFY_MARTIAL_NUNCHAKU = 24855; const int FEAT_SANCTIFY_MARTIAL_NUNCHAKU = 24855;
const int FEAT_SANCTIFY_MARTIAL_FALCHION = 24856; const int FEAT_SANCTIFY_MARTIAL_FALCHION = 24856;
const int FEAT_SANCTIFY_MARTIAL_SAP = 24857; const int FEAT_SANCTIFY_MARTIAL_SAP = 24857;
const int FEAT_SANCTIFY_MARTIAL_KATAR = 24858; const int FEAT_SANCTIFY_MARTIAL_KATAR = 24858;
const int FEAT_SANCTIFY_MARTIAL_HEAVY_MACE = 24859; const int FEAT_SANCTIFY_MARTIAL_HEAVY_MACE = 24859;
const int FEAT_SANCTIFY_MARTIAL_MAUL = 24860; const int FEAT_SANCTIFY_MARTIAL_MAUL = 24860;
const int FEAT_SANCTIFY_MARTIAL_DBL_SCIMITAR = 24861; const int FEAT_SANCTIFY_MARTIAL_DBL_SCIMITAR = 24861;
const int FEAT_SANCTIFY_MARTIAL_GOAD = 24862; const int FEAT_SANCTIFY_MARTIAL_GOAD = 24862;
const int FEAT_SANCTIFY_MARTIAL_ELVEN_LIGHTBLADE = 24863; const int FEAT_SANCTIFY_MARTIAL_ELVEN_LIGHTBLADE = 24863;
const int FEAT_SANCTIFY_MARTIAL_ELVEN_THINBLADE = 24864; const int FEAT_SANCTIFY_MARTIAL_ELVEN_THINBLADE = 24864;
const int FEAT_SANCTIFY_MARTIAL_ELVEN_COURTBLADE = 24865; const int FEAT_SANCTIFY_MARTIAL_ELVEN_COURTBLADE = 24865;
//:: Web Enhancement Feats //:: Web Enhancement Feats
const int FEAT_CHARMING_THE_ARROW = 25997; const int FEAT_CHARMING_THE_ARROW = 25997;

View File

@ -1506,8 +1506,8 @@ struct WeaponFeat GetAllFeatsOfWeaponType(int iWeaponType)
sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTMACE; sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTMACE;
sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTMACE; sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTMACE;
sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_LIGHTMACE; sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_LIGHTMACE;
sFeat.SanctifyMartialStrike = FEAT_VILE_MARTIAL_LIGHTMACE; sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_LIGHTMACE;
sFeat.VileMartialStrike = FEAT_SANCTIFY_MARTIAL_LIGHTMACE; sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_LIGHTMACE;
break; break;
} }
case BASE_ITEM_LONGBOW: { case BASE_ITEM_LONGBOW: {

View File

@ -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_DWARVENAXE = 24795;
const int IP_CONST_FEAT_VILE_MARTIAL_WHIP = 24796; 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_TRIDENT = 24797;
const int IP_CONST_FEAT_VILE_MARTIAL_MINDBLADE = 24898; const int IP_CONST_FEAT_VILE_MARTIAL_MINDBLADE = 24798;
//:: New Weapons //:: New Weapons
const int IP_CONST_FEAT_VILE_MARTIAL_EAGLE_CLAW = 26500; const int IP_CONST_FEAT_VILE_MARTIAL_EAGLE_CLAW = 26500;
const int IP_CONST_FEAT_VILE_MARTIAL_LIGHT_LANCE = 26501; const int IP_CONST_FEAT_VILE_MARTIAL_LIGHT_LANCE = 26501;

View File

@ -1,5 +1,8 @@
//const int FOOBAR = -1; // Comment or uncomment whenever the compiler croaks on an error code 5. //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 //spell
const int SPELL_MAJOR_MAGIC_MISSILE = 2247; const int SPELL_MAJOR_MAGIC_MISSILE = 2247;
const int SPELL_GREAT_WALL_OF_DISPEL = 2096; const int SPELL_GREAT_WALL_OF_DISPEL = 2096;

View File

@ -228,8 +228,10 @@ int GetSanctifyMartialStrikeFeatItemProperty(int nFeatNumber)
int GetVileMartialStrikeFeatItemProperty(int nFeatNumber) int GetVileMartialStrikeFeatItemProperty(int nFeatNumber)
{ {
int nItemProperty; 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; 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); nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_VILE_MARTIAL_EAGLE_CLAW, IP_CONST_FEAT_VILE_MARTIAL_ELVEN_COURTBLADE);
if(nItemProperty != -1) return nItemProperty; if(nItemProperty != -1) return nItemProperty;
return -1; return -1;

View File

@ -341,6 +341,16 @@ int BladeMeditationFeat(object oInitiator);
*/ */
int BladeMeditationDamage(object oInitiator, int nMoveId); 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 */ /* Includes */
////////////////////////////////////////////////// //////////////////////////////////////////////////
@ -1266,4 +1276,18 @@ int BladeMeditationDamage(object oInitiator, int nMoveId)
return 1; return 1;
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;
} }

View File

@ -24,6 +24,60 @@ mystery or a spell of higher than 4th level.
#include "shd_inc_shdfunc" #include "shd_inc_shdfunc"
#include "shd_mysthook" #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() void main()
{ {
object oShadow = OBJECT_SELF; object oShadow = OBJECT_SELF;
@ -56,4 +110,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DIMENSIONANCHOR), oTarget); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DIMENSIONANCHOR), oTarget);
} }
} }
} } */

View File

@ -46,7 +46,7 @@ void main()
if(move.bCanManeuver) if(move.bCanManeuver)
{ {
effect eNone; effect eNone;
int nDC = GetDefenderAC(oTarget, oInitiator); int nDC = GetDefenderAC(oTarget, oInitiator);
int nAB = -2; int nAB = -2;
if (GetIsSkillSuccessful(oInitiator, SKILL_CONCENTRATION, nDC)) if (GetIsSkillSuccessful(oInitiator, SKILL_CONCENTRATION, nDC))
{ {

View File

@ -27,19 +27,26 @@ or be unable to take any actions for 1 round.
void TOBAttack(object oTarget, object oInitiator) void TOBAttack(object oTarget, object oInitiator)
{ {
effect eNone; effect eNone;
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Disrupting Blow Hit", "Disrupting Blow Miss");
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Disrupting Blow Hit", "Disrupting Blow Miss");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{ if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
int nDC = 15 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); {
int nDC = 15 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
// Saving Throw
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC)) int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
{ if (nBladeMed)
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDazed(), oTarget, RoundsToSeconds(1)); {
} nDC += 1;
} }
// Saving Throw
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC))
{
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDazed(), oTarget, RoundsToSeconds(1));
}
}
} }
void main() void main()

View File

@ -29,14 +29,22 @@
void TOBAttack(object oTarget, object oInitiator) 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; int nAB = 0;
if (GetLocalInt(oInitiator, "SupernalAttack")) nAB += 1; if (GetLocalInt(oInitiator, "SupernalAttack")) nAB += 1;
PerformAttack(oTarget, oInitiator, eNone, 0.0, nAB, 0, 0, "Mind Strike Hit", "Mind Strike Miss"); PerformAttack(oTarget, oInitiator, eNone, 0.0, nAB, 0, 0, "Mind Strike Hit", "Mind Strike Miss");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{ {
// Saving Throw // 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); ApplyAbilityDamage(oTarget, ABILITY_WISDOM, d4(), DURATION_TYPE_PERMANENT);
} }

View File

@ -12,7 +12,7 @@ Range: Personal
Target: You Target: You
In the blink of an eye, you make your move. Your speed, reflexes, and boundless confidence 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. Your speed doubles for one round.

View File

@ -41,8 +41,15 @@ void main()
// Enemy check // Enemy check
if (GetIsEnemy(oProneTarget, oInitiator)) 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 // 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_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oProneTarget, 6.0);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(12)), oProneTarget); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(12)), oProneTarget);

View File

@ -32,8 +32,16 @@ void main()
object oProneTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(10.0), GetLocation(oInitiator)); object oProneTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(10.0), GetLocation(oInitiator));
while(GetIsObjectValid(oProneTarget)) while(GetIsObjectValid(oProneTarget))
{ {
// Skill check int nDC = 15;
if (!GetIsSkillSuccessful(oProneTarget, SKILL_BALANCE, 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); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oProneTarget, 6.0);
} }

View File

@ -16,7 +16,7 @@
You cause a 10 foot tall pillar of stone to appear, tossing enemies to the ground. You cause a 10 foot tall pillar of stone to appear, tossing enemies to the ground.
*/ */
#include "tob_inc_move"
#include "prc_inc_spells" #include "prc_inc_spells"
void main() void main()
@ -26,11 +26,18 @@ void main()
object oProneTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(10.0), GetLocation(oInitiator)); object oProneTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(10.0), GetLocation(oInitiator));
while(GetIsObjectValid(oProneTarget)) while(GetIsObjectValid(oProneTarget))
{ {
// Save check int nDC = 10 + GetHitDice(oInitiator)/2 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
if (!PRCMySavingThrow(SAVING_THROW_WILL, oProneTarget, (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); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oProneTarget, 6.0);
} }
oProneTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(10.0), GetLocation(oInitiator)); oProneTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(10.0), GetLocation(oInitiator));
} }

View File

@ -28,8 +28,17 @@ void main()
{ {
//Declare major variables //Declare major variables
object oTarget = GetEnteringObject(); 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 // 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); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oTarget, 6.0);
} }

View File

@ -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"); PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(8), 0, "Castigating Strike Hit", "Castigating Strike Miss");
if(GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) 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 // 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)); effect eLink = ExtraordinaryEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL));
ApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget); 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); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M_PURPLE), oAreaTarget);
// Saving Throw for the secondary targets // 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)); effect eLink = ExtraordinaryEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL));
ApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oAreaTarget); ApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oAreaTarget);

View File

@ -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"); PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Daunting Strike Hit", "Daunting Strike Miss");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{ {
// Saving Throw int nDC = 15 + GetAbilityModifier(ABILITY_CHARISMA, oInitiator);
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (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())); effect eLink = ExtraordinaryEffect(EffectLinkEffects(EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED), EffectShaken()));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 60.0); SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 60.0);

View File

@ -46,6 +46,6 @@ void main()
{ {
effect eNone = EffectVisualEffect(PSI_IMP_CONCUSSION_BLAST); effect eNone = EffectVisualEffect(PSI_IMP_CONCUSSION_BLAST);
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator); 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"));
} }
} }

View File

@ -41,6 +41,13 @@ void main()
effect eExplode = EffectVisualEffect(VFX_FNF_FIREBALL); effect eExplode = EffectVisualEffect(VFX_FNF_FIREBALL);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget);
int nDC = 11 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); 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 //Get the first target in the radius around the caster
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(30.0), lTarget); object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(30.0), lTarget);
while(GetIsObjectValid(oTarget)) while(GetIsObjectValid(oTarget))

View File

@ -66,6 +66,13 @@ void Deathmark(object oInitiator, object oTarget)
float fDist = DoDeathmarkArea(oTarget); float fDist = DoDeathmarkArea(oTarget);
//FloatingTextStringOnCreature("Deathmark Area "+FloatToString(fDist), oInitiator); //FloatingTextStringOnCreature("Deathmark Area "+FloatToString(fDist), oInitiator);
int nDC = 13 + GetAbilityModifier(ABILITY_WISDOM, 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); effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
//Get the first target in the radius around the caster //Get the first target in the radius around the caster

View File

@ -51,6 +51,13 @@ void main()
float fLength = FeetToMeters(60.0); float fLength = FeetToMeters(60.0);
vector vOrigin = GetPosition(oInitiator); vector vOrigin = GetPosition(oInitiator);
int nDC = 14 + GetAbilityModifier(ABILITY_WISDOM, 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); effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M);
// Loop over targets in the line shape // Loop over targets in the line shape
oTarget = MyFirstObjectInShape(SHAPE_SPELLCYLINDER, fLength, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, vOrigin); oTarget = MyFirstObjectInShape(SHAPE_SPELLCYLINDER, fLength, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, vOrigin);

View File

@ -48,6 +48,13 @@ void main()
{ {
location lTarget = GetLocation(oInitiator); location lTarget = GetLocation(oInitiator);
int nDC = 12 + GetAbilityModifier(ABILITY_WISDOM, 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); effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
//Get the first target in the radius around the caster //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); oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, FeetToMeters(30.0), PRCGetSpellTargetLocation(), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);

View File

@ -50,6 +50,13 @@ void main()
{ {
location lTarget = GetLocation(oInitiator); location lTarget = GetLocation(oInitiator);
int nDC = 19 + GetAbilityModifier(ABILITY_WISDOM, 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); effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
//Get the first target in the radius around the caster //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); oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(60.0), PRCGetSpellTargetLocation(), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);

View File

@ -49,6 +49,13 @@ void main()
{ {
location lTarget = GetLocation(oInitiator); location lTarget = GetLocation(oInitiator);
int nDC = 16 + GetAbilityModifier(ABILITY_WISDOM, 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); effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M);
//Get the first target in the radius around the caster //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); oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(30.0), PRCGetSpellTargetLocation(), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);

View File

@ -49,6 +49,13 @@ void main()
{ {
location lTarget = GetLocation(oInitiator); location lTarget = GetLocation(oInitiator);
int nDC = 18 + GetAbilityModifier(ABILITY_WISDOM, 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); effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
//Get the first target in the radius around the caster //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); oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, FeetToMeters(30.0), PRCGetSpellTargetLocation(), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);

View File

@ -31,17 +31,24 @@ Str modifier) or be dazed for 1 round.
void TOBAttack(object oTarget, object oInitiator) void TOBAttack(object oTarget, object oInitiator)
{ {
effect eNone; effect eNone;
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Dazing Strike Hit", "Dazing Strike Miss"); PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Dazing Strike Hit", "Dazing Strike Miss");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{ {
// Saving Throw int nDC = 15 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (15 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator))))
{ int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDazed(), oTarget, RoundsToSeconds(1)); if (nBladeMed)
} {
} nDC += 1;
}
` // Saving Throw
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
{
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDazed(), oTarget, RoundsToSeconds(1));
}
}
} }
void main() void main()

View File

@ -39,6 +39,13 @@ void TOBAttack(object oTarget, object oInitiator)
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{ {
int nDC = 13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); int nDC = 13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
if (nBladeMed)
{
nDC += 1;
}
int nDamage = 4; int nDamage = 4;
if (PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_NONE)) if (PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_NONE))
nDamage = 2; nDamage = 2;

View File

@ -50,7 +50,14 @@ void main()
if(move.bCanManeuver) if(move.bCanManeuver)
{ {
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator); 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); SetLocalInt(oInitiator, "IHLightningThrow", TRUE);
float fLength = FeetToMeters(30.0); float fLength = FeetToMeters(30.0);
location lTarget = PRCGetSpellTargetLocation(); location lTarget = PRCGetSpellTargetLocation();

View File

@ -26,18 +26,25 @@ to 2 points, although the foe still takes full normal melee damage.
void TOBAttack(object oTarget, object oInitiator) void TOBAttack(object oTarget, object oInitiator)
{ {
effect eNone; effect eNone;
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Bloodletting Strike Hit", "Bloodletting Strike Miss"); PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Bloodletting Strike Hit", "Bloodletting Strike Miss");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{ {
int nDam = 4; int nDam = 4;
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (15 + GetAbilityModifier(ABILITY_WISDOM, oInitiator)))) nDam = 2; int nDC = 15 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
ApplyAbilityDamage(oTarget, ABILITY_CONSTITUTION, nDam, DURATION_TYPE_TEMPORARY, TRUE, -1.0); 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() void main()

View File

@ -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"); PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, nDamage, nDamageType, "Clinging Shadow Strike Hit", "Clinging Shadow Strike Miss");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{ {
// Saving Throw int nDC = 11 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (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)); effect eLink = SupernaturalEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget); SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);

View File

@ -31,14 +31,22 @@
void TOBAttack(object oTarget, object oInitiator) 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"); 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)) int nDC = 12 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
{
ApplyAbilityDamage(oTarget, ABILITY_CONSTITUTION, 2, DURATION_TYPE_TEMPORARY, TRUE, -1.0f); int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE_RED), oTarget); 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() void main()

View File

@ -31,8 +31,15 @@ void TOBAttack(object oTarget, object oInitiator)
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{ {
int nDam = d6(15); 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)) if(!GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT))
{ {

View File

@ -45,7 +45,15 @@ void TOBAttack(object oTarget, object oInitiator)
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) 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(); int nLevels = d4();

View File

@ -53,7 +53,15 @@ void TOBAttack(object oTarget, object oInitiator)
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCGetIsAliveCreature(oTarget)) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCGetIsAliveCreature(oTarget))
{ {
// Saving Throw // 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 nRoll = d20(1);
int nDam; int nDam;

View File

@ -47,22 +47,28 @@ void main()
int nTouchAttack = PRCDoMeleeTouchAttack(oTarget); int nTouchAttack = PRCDoMeleeTouchAttack(oTarget);
if(nTouchAttack > 0) if(nTouchAttack > 0)
{ {
int nDC = 14 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
// Saving Throw int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (14 + GetAbilityModifier(ABILITY_WISDOM, oInitiator)))) if (nBladeMed)
{ {
effect eParal = EffectParalyze(); nDC += 1;
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); // Saving Throw
eLink = EffectLinkEffects(eLink, eParal); if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
eLink = EffectLinkEffects(eLink, eVis); {
eLink = EffectLinkEffects(eLink, eDur3); effect eParal = EffectParalyze();
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(d3())); 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()));
}
} }
} }
} }

View File

@ -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"); PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, nDamage, nDamageType, "Obscuring Shadow Veil Hit", "Obscuring Shadow Veil Miss");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{ {
int nDC = 14 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
if (nBladeMed)
{
nDC += 1;
}
// Saving Throw // 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)); effect eLink = SupernaturalEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget); SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
eLink = SupernaturalEffect(EffectMissChance(50)); eLink = SupernaturalEffect(EffectMissChance(50));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0); SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0);
} }
} }
} }

View File

@ -63,6 +63,13 @@ void main()
//Apply the flat-footed effect //Apply the flat-footed effect
int nDC = 13 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); 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)) if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE))
{ {
AssignCommand(oTarget, ClearAllActions(TRUE)); AssignCommand(oTarget, ClearAllActions(TRUE));

View File

@ -61,7 +61,14 @@ void main()
ApplyTouchAttackDamage(oInitiator, oTarget, iAttackRoll, d6(8), DAMAGE_TYPE_MAGICAL); ApplyTouchAttackDamage(oInitiator, oTarget, iAttackRoll, d6(8), DAMAGE_TYPE_MAGICAL);
//Apply the stun effect //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)) if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE))
{ {
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectStunned(), oTarget, RoundsToSeconds(1)); SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectStunned(), oTarget, RoundsToSeconds(1));

View File

@ -40,11 +40,18 @@ void TOBAttack(object oTarget, object oInitiator)
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{ {
int nDC = 13 + GetAbilityModifier(ABILITY_WISDOM, oInitiator); int nDC = 13 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
if (nBladeMed)
{
nDC += 1;
}
int nDamage = 4; 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; nDamage = 2;
ApplyAbilityDamage(oTarget, ABILITY_STRENGTH, nDamage, DURATION_TYPE_PERMANENT); ApplyAbilityDamage(oTarget, ABILITY_STRENGTH, nDamage, DURATION_TYPE_PERMANENT);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY), oTarget); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY), oTarget);
} }
} }

View File

@ -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"); PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(4), GetWeaponDamageType(oWeap), "Bone Crusher Hit", "Bone Crusher Miss");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{ {
// Saving Throw int nDC = 13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (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)); effect eLink = SupernaturalEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget); SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);

View File

@ -31,19 +31,26 @@ square.
void TOBAttack(object oTarget, object oInitiator) void TOBAttack(object oTarget, object oInitiator)
{ {
effect eNone; effect eNone;
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator); object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator);
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(6), GetWeaponDamageType(oWeap), "Colossus Strike Hit", "Colossus Strike Miss"); PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(6), GetWeaponDamageType(oWeap), "Colossus Strike Hit", "Colossus Strike Miss");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{ {
int nDC = 17 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); int nDC = 17 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE, oInitiator, 1.0))
{ int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
float fFeet = IntToFloat(5 * d4(1)); if (nBladeMed)
_DoBullRushKnockBack(oTarget, oInitiator, fFeet); {
} 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() void main()

View File

@ -54,6 +54,12 @@ void main()
location lLoc = GetLocation(oInitiator); location lLoc = GetLocation(oInitiator);
int nDC = 18 + (GetAbilityModifier(ABILITY_STRENGTH, oInitiator)); int nDC = 18 + (GetAbilityModifier(ABILITY_STRENGTH, oInitiator));
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
if (nBladeMed)
{
nDC += 1;
}
//Shaking //Shaking
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), lLoc); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), lLoc);

View File

@ -35,18 +35,23 @@ damage.
void TOBAttack(object oTarget, object oInitiator) void TOBAttack(object oTarget, object oInitiator)
{ {
effect eNone; effect eNone;
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(4), 0, "Iron Bones Hit", "Iron Bones Miss"); PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(4), 0, "Iron Bones Hit", "Iron Bones Miss");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{ {
//Save //Save
int nDC = 16 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); int nDC = 16 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE, oInitiator, 1.0)) int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
{ if (nBladeMed)
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDazed(), oTarget, RoundsToSeconds(1)); {
} 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() void main()

View File

@ -34,25 +34,25 @@ times you move into or through its space.
void main() void main()
{ {
if (!PreManeuverCastCode()) if (!PreManeuverCastCode())
{ {
// If code within the PreManeuverCastCode (i.e. UMD) reports FALSE, do not run this spell // If code within the PreManeuverCastCode (i.e. UMD) reports FALSE, do not run this spell
return; return;
} }
// End of Spell Cast Hook // End of Spell Cast Hook
object oInitiator = OBJECT_SELF; object oInitiator = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject(); object oTarget = PRCGetSpellTargetObject();
struct maneuver move = EvaluateManeuver(oInitiator, oTarget); struct maneuver move = EvaluateManeuver(oInitiator, oTarget);
if(move.bCanManeuver) if(move.bCanManeuver)
{ {
//Twice the speed //Twice the speed
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectMovementSpeedIncrease(99), oInitiator, RoundsToSeconds(1)); SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectMovementSpeedIncrease(99), oInitiator, RoundsToSeconds(1));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(AOE_MOB_MOUNTAIN_AVALANCHE), oInitiator, 6.0); SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(AOE_MOB_MOUNTAIN_AVALANCHE), oInitiator, 6.0);
} }
} }

View File

@ -30,18 +30,27 @@
void TOBAttack(object oTarget, object oInitiator) void TOBAttack(object oTarget, object oInitiator)
{ {
effect eNone = EffectVisualEffect(PSI_IMP_CONCUSSION_BLAST); effect eNone = EffectVisualEffect(PSI_IMP_CONCUSSION_BLAST);
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator); 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"); PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(2), GetWeaponDamageType(oWeap), "Overwhelming Mountain Strike Hit", "Overwhelming Mountain Strike Miss");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{ {
// Saving Throw int nDC = 13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (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()); effect eLink = ExtraordinaryEffect(EffectSlow());
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0); SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0);
} }
} }
} }
void main() void main()

View File

@ -29,15 +29,22 @@
void TOBAttack(object oTarget, object oInitiator) void TOBAttack(object oTarget, object oInitiator)
{ {
effect eNone; effect eNone;
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator); object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator);
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(1), GetWeaponDamageType(oWeap), "Stone Vise Hit", "Stone Vise Miss"); 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)) int nDC = 12 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
{
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectCutsceneParalyze()), oTarget, 6.0); int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DIMENSIONLOCK), oTarget); 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() void main()

View File

@ -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"); 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")) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{ {
// Saving Throw int nDC = 14 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
if (!PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, (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)); AssignCommand(oTarget, ClearAllActions(TRUE));
} }

View File

@ -77,7 +77,13 @@ void main()
// Saving Throw for area target // Saving Throw for area target
int nDamage = d6(4); int nDamage = d6(4);
// Adjust damage according to Reflex Save, Evasion or Improved Evasion // 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) if(nDamage > 0)
{ {

View File

@ -31,14 +31,22 @@
void TOBAttack(object oTarget, object oInitiator) 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"); PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Clever Positioning Hit", "Clever Positioning Miss");
int nDC = 12 + GetAbilityModifier(ABILITY_DEXTERITY, oInitiator);
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, 12 + GetAbilityModifier(ABILITY_DEXTERITY, oInitiator),SAVING_THROW_TYPE_NONE))
{ int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
DoTransposition(TRUE, FALSE); if (nBladeMed)
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_WIND), oTarget); {
} 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() void main()

View File

@ -50,11 +50,11 @@ void main()
if (IPGetIsMeleeWeapon(oItem)) if (IPGetIsMeleeWeapon(oItem))
{ {
// Perform first bonus attack, overriding weapon just to make sure // 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)) if (IPGetIsMeleeWeapon(oItem2))
{ {
// Perform second bonus attack, overriding weapon just to make sure // 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 else

View File

@ -47,6 +47,13 @@ void TOBAttack(object oTarget, object oInitiator)
{ {
//Save //Save
int nDC = 19 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator); 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)) if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_DEATH) && !GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT))
{ {
DeathlessFrenzyCheck(oTarget); DeathlessFrenzyCheck(oTarget);

View File

@ -31,11 +31,20 @@ void TOBAttack(object oTarget, object oInitiator)
{ {
effect eNone = EffectVisualEffect(PSI_IMP_CONCUSSION_BLAST); effect eNone = EffectVisualEffect(PSI_IMP_CONCUSSION_BLAST);
int nBonus = TOBSituationalAttackBonuses(oInitiator, DISCIPLINE_TIGER_CLAW); int nBonus = TOBSituationalAttackBonuses(oInitiator, DISCIPLINE_TIGER_CLAW);
PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Flesh Ripper Hit", "Flesh Ripper Miss"); int nDC = 13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && !GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT))
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 // 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)); effect eLink = EffectLinkEffects(EffectAttackDecrease(4), EffectACDecrease(4));
eLink = ExtraordinaryEffect(eLink); eLink = ExtraordinaryEffect(eLink);

View File

@ -58,8 +58,16 @@ void main()
{ {
if(GetIsEnemy(oTarget, oInitiator)) if(GetIsEnemy(oTarget, oInitiator))
{ {
// Saving Throw // Saving Throw
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, (14 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator)))) 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))); effect eLink = ExtraordinaryEffect(EffectLinkEffects(EffectShaken(), EffectVisualEffect(VFX_IMP_DOOM)));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 60.0); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 60.0);

View File

@ -27,25 +27,32 @@ Dexterity damage and the speed penalty.
void TOBAttack(object oTarget, object oInitiator) void TOBAttack(object oTarget, object oInitiator)
{ {
effect eNone; effect eNone;
int nBonus = TOBSituationalAttackBonuses(oInitiator, DISCIPLINE_TIGER_CLAW); int nDC = 17 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Hamstring Attack Hit", "Hamstring Attack Miss");
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack")) if (nBladeMed)
{ {
int nDexDam = d8(1); nDC += 1;
effect eSlow = EffectMovementSpeedDecrease(33); }
int nBonus = TOBSituationalAttackBonuses(oInitiator, DISCIPLINE_TIGER_CLAW);
//Save PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Hamstring Attack Hit", "Hamstring Attack Miss");
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (17 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator)), SAVING_THROW_TYPE_NONE))
{ if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
nDexDam = nDexDam/2; {
eSlow = EffectMovementSpeedDecrease(17); int nDexDam = d8(1);
} effect eSlow = EffectMovementSpeedDecrease(33);
ApplyAbilityDamage(oTarget, ABILITY_DEXTERITY, nDexDam, DURATION_TYPE_PERMANENT); //Save
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSlow, oTarget, TurnsToSeconds(1)); 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() void main()

View File

@ -43,6 +43,12 @@ void TOBAttack(object oTarget, object oInitiator, int iJumpRoll)
effect eNone; effect eNone;
int nAB = GetAbilityModifier(ABILITY_DEXTERITY, oTarget); int nAB = GetAbilityModifier(ABILITY_DEXTERITY, oTarget);
int nBonus = TOBSituationalAttackBonuses(oInitiator, DISCIPLINE_TIGER_CLAW); 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")); 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")) if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))

View File

@ -10,7 +10,7 @@
Swarm Tactics Swarm Tactics
Devoted Spirit (Stance) White Raven (Stance)
Level: Crusader 5, Warblade 5 Level: Crusader 5, Warblade 5
Prerequisite: One White Raven maneuver Prerequisite: One White Raven maneuver
Initiation Action: 1 Swift Action Initiation Action: 1 Swift Action

View File

@ -10,7 +10,7 @@
Swarm Tactics Swarm Tactics
Devoted Spirit (Stance) White Raven (Stance)
Level: Crusader 5, Warblade 5 Level: Crusader 5, Warblade 5
Prerequisite: One White Raven maneuver Prerequisite: One White Raven maneuver
Initiation Action: 1 Swift Action Initiation Action: 1 Swift Action

View File

@ -10,7 +10,7 @@
White Raven Tactics White Raven Tactics
Iron Heart (Boost) White Raven (Boost)
Level: Crusader 3, Warblade 3 Level: Crusader 3, Warblade 3
Initiation Action: 1 Swift Action Initiation Action: 1 Swift Action
Range: 10 ft. Range: 10 ft.

View File

@ -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 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 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 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 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 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 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

View File

@ -400,7 +400,6 @@ void main()
Pwatk(oPC); Pwatk(oPC);
object oSkin = GetPCSkin(oPC); object oSkin = GetPCSkin(oPC);
if (GetAlignmentGoodEvil(oPC)!= ALIGNMENT_GOOD) if (GetAlignmentGoodEvil(oPC)!= ALIGNMENT_GOOD)

View File

@ -96,7 +96,23 @@ int GetVileFeats(object oPC)
+ GetHasFeat(FEAT_VILE_MARTIAL_DART, oPC) + GetHasFeat(FEAT_VILE_MARTIAL_DART, oPC)
+ GetHasFeat(FEAT_VILE_MARTIAL_SICKLE, oPC) + GetHasFeat(FEAT_VILE_MARTIAL_SICKLE, oPC)
+ GetHasFeat(FEAT_VILE_MARTIAL_DWAXE, 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_APOSTATE, oPC)
+ GetHasFeat(FEAT_DARK_WHISPERS, oPC) + GetHasFeat(FEAT_DARK_WHISPERS, oPC)
+ GetHasFeat(FEAT_MASTERS_WILL, oPC) + GetHasFeat(FEAT_MASTERS_WILL, oPC)

View File

@ -115,6 +115,7 @@ void main()
{ {
// And now we can grab them // And now we can grab them
DoGrapple(oPC, oTarget, 0); DoGrapple(oPC, oTarget, 0);
GZPRCRemoveSpellEffects(SPELL_INVISIBILITY, oPC);
} }
} }
} }

View File

@ -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() void main()
{ {
object oUser = OBJECT_SELF;
int nSpellID = PRCGetSpellId(); 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);
}
}
}

View File

@ -87,7 +87,8 @@ void main()
ExecuteScript(GetLocalString(oPC, PRC_CHAT_HOOK_SCRIPT), oPC); ExecuteScript(GetLocalString(oPC, PRC_CHAT_HOOK_SCRIPT), oPC);
_clear_chat_vars(oPC); _clear_chat_vars(oPC);
} }
ExecuteScript("hp_pa_chatscript", oPC);
// Execute scripts hooked to this event for the player triggering it // Execute scripts hooked to this event for the player triggering it
ExecuteAllScriptsHookedToEvent(oPC, EVENT_ONPLAYERCHAT); ExecuteAllScriptsHookedToEvent(oPC, EVENT_ONPLAYERCHAT);
} }

View File

@ -67,6 +67,13 @@ void main()
return; 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 //VFX
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_SANCTUARY), oTarget, fDur); SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_SANCTUARY), oTarget, fDur);

View File

@ -100,8 +100,9 @@ int X2_UMD()
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
if(!GetHasSkill(SKILL_USE_MAGIC_DEVICE, oCaster) if(!GetHasSkill(SKILL_USE_MAGIC_DEVICE, oCaster)
&& !GetLevelByClass(CLASS_TYPE_ROGUE, oCaster) && !GetLevelByClass(CLASS_TYPE_ROGUE, oCaster)
&& !GetLevelByClass(CLASS_TYPE_ASSASSIN, oCaster) && !GetLevelByClass(CLASS_TYPE_SHADOW_THIEF_AMN, oCaster)
&& !GetLevelByClass(CLASS_TYPE_SHADOWDANCER, oCaster)) && !GetLevelByClass(CLASS_TYPE_FACTOTUM, oCaster)
&& !GetLevelByClass(CLASS_TYPE_ASSASSIN, oCaster))
{ {
// --------------------------------------------------------------------- // ---------------------------------------------------------------------
//SpeakString("I have no UMD, thus I can cast the spell... "); //SpeakString("I have no UMD, thus I can cast the spell... ");

View File

@ -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. Favored Class (Sorcerer): A multiclass aranea's sorcerer class does not count when determining whether they suffer an XP penalty for multiclassing.
Racial Traits: 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. - 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 &amp; hybrid form. - Natural Weapons: An aranea can bite 1d6 points of damage in spider &amp; hybrid form.
- Poison: An aranea's bite is poisonous &amp; does 1d6 STR initial damage &amp; 2d6 secondary damage. - Poison: An aranea's bite is poisonous &amp; does 1d6 STR initial damage &amp; 2d6 secondary damage.
@ -73833,7 +73834,6 @@ Bonus Feats: The epic Umbral Disciple gains a bonus feat every three levels
Special: Special:
Sneak Attack: The epic Umbral Disciple's sneak attack continues to increase by 1d6 every 3 levels. 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: 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> 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>

View File

@ -27,7 +27,10 @@ void SetPowerAttack();
// //
void main() 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 prevPowerAttack5 = GetLocalInt(OBJECT_SELF, "prevPowerAttack5");
int prevPowerAttack1 = GetLocalInt(OBJECT_SELF, "prevPowerAttack1"); int prevPowerAttack1 = GetLocalInt(OBJECT_SELF, "prevPowerAttack1");
int powerAttack5Amount = amount / 5; int powerAttack5Amount = amount / 5;
@ -89,4 +92,5 @@ void main()
} }
SetLocalInt(OBJECT_SELF, "prevPowerAttack1", powerAttack1Amount); SetLocalInt(OBJECT_SELF, "prevPowerAttack1", powerAttack1Amount);
} }
} */
}

View 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;
}