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 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
196 EternalBlade 16790680 16834750 16834751 16834752 16834753 IR_FH 10 CLS_ATK_1 CLS_FEAT_ETBL CLS_SAVTHR_FIGHT CLS_SKILL_ETBL CLS_BFEAT_ETBL 2 **** **** 1 0 16 13 16 10 10 9 STR 0X00 0X0 0 CLASS_TYPE_ETERNAL_BLADE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ETBL 10 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
197 ShadowSunNinja 16790681 16834778 16834779 16834780 16834781 IR_SHADADEPT 8 CLS_ATK_2 CLS_FEAT_SSN CLS_SAVTHR_MONK CLS_SKILL_SSN CLS_BFEAT_SSN 4 **** **** 1 0 16 13 16 10 10 9 STR 0X11 0X2 0 CLASS_TYPE_SHADOW_SUN_NINJA 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SSN 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
198 WitchbornBinder 16790682 16838144 16838145 16838146 16838147 IR_WITCH 6 CLS_ATK_2 CLS_FEAT_WCHBRN CLS_SAVTHR_WIZ CLS_SKILL_WCHBRN CLS_BFEAT_BLANK 4 **** **** 1 0 10 14 14 10 12 16 CHA 0X00 0X0 0 CLASS_TYPE_WITCHBORN_BINDER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WCHBRN 10 0 0 0 10 6 2 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
198 WitchbornBinder 16790682 16838144 16838145 16838146 16838147 IR_WITCH 6 CLS_ATK_2 CLS_FEAT_WCHBRN CLS_SAVTHR_WIZ CLS_SKILL_WCHBRN CLS_BFEAT_WCHBRN 4 **** **** 1 0 10 14 14 10 12 16 CHA 0X00 0X0 0 CLASS_TYPE_WITCHBORN_BINDER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WCHBRN 40 0 0 0 10 6 2 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
199 Baelnorn 16790683 16829216 16829217 16829218 16829219 IR_BAELNORN 4 CLS_ATK_4 CLS_FEAT_BAELN CLS_SAVTHR_LICH CLS_SKILL_WIZ CLS_BFEAT_LICH 2 **** **** 1 0 13 13 13 13 13 13 CHA 0X11 0X2 0 CLASS_TYPE_BAELNORN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_BAELN 4 0 0 0 4 10 0 cls_stat_baeln **** **** **** **** **** **** **** **** **** **** **** **** **** ****
200 Disciple_of_Meph 16790684 16823016 16823017 16823018 16823019 IR_DISCMEPH 8 CLS_ATK_1 CLS_FEAT_MEPH CLS_SAVTHR_MONK CLS_SKILL_MEPH CLS_BFEAT_MEPH 4 **** **** 1 0 12 16 14 8 14 12 CHA 0X09 0X2 0 CLASS_TYPE_DISCIPLE_OF_MEPH 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_MEPH 10 0 0 0 10 2 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
201 Soul_Eater 16790685 16832116 16832117 16832118 16832119 IR_SOULEATER 8 CLS_ATK_1 CLS_FEAT_SLEAT CLS_SAVTHR_MONK CLS_SKILL_SLEAT CLS_BFEAT_SLEAT 4 **** **** 1 0 14 16 10 12 14 10 INT 0X09 0X2 0 CLASS_TYPE_SOUL_EATER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SLEAT 10 0 0 0 10 1 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****

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
FeatLabel FeatIndex List GrantedOnLevel OnMenu
0 Lorestealer_DetectMagic 22867 3 1 1
1 Meldshield_Invest 8953 3 1 1
2 Meldshield 8954 3 99 1
3 DispellingOrb_Invest 8955 3 2 1
4 DispellingOrb 8956 3 2 1
5 MageShackles_Invest 8957 3 4 1
6 MageShackles 8958 3 4 1
7 Abrogation_Invest 8959 3 6 1
8 Abrogation 8960 3 6 1
9 SpiritFlay_Invest 8961 3 8 1
10 SpiritFlay 8962 3 8 1
11 Integument_Invest 8963 3 10 1
12 Integument 8964 3 10 1
FeatLabel FeatIndex List GrantedOnLevel OnMenu
0 Lorestealer_DetectMagic 22867 3 1 1
1 Meldshield_Invest 8953 3 1 1
2 Meldshield 8954 3 99 1
3 DispellingOrb_Invest 8955 3 2 1
4 DispellingOrb 8956 3 2 1
5 MageShackles_Invest 8957 3 4 1
6 MageShackles 8958 3 4 1
7 Abrogation_Invest 8959 3 6 1
8 Abrogation 8960 3 6 1
9 SpiritFlay_Invest 8961 3 8 1
10 SpiritFlay 8962 3 8 1
11 Integument_Invest 8963 3 10 1
12 Integument 8964 3 10 1
13 EPIC_WITCHBORN_BINDER 25083 3 11 0
14 FEAT_EPIC_ARMOR_SKIN 490 1 -1 0
15 FEAT_EPIC_BLINDING_SPEED 491 1 -1 1
16 FEAT_EPIC_PROWESS 584 1 -1 0
17 FEAT_EPIC_TOUGHNESS_1 754 1 -1 0
18 FEAT_EPIC_TOUGHNESS_2 755 1 -1 0
19 FEAT_EPIC_TOUGHNESS_3 756 1 -1 0
20 FEAT_EPIC_TOUGHNESS_4 757 1 -1 0
21 FEAT_EPIC_TOUGHNESS_5 758 1 -1 0
22 FEAT_EPIC_TOUGHNESS_6 759 1 -1 0
23 FEAT_EPIC_TOUGHNESS_7 760 1 -1 0
24 FEAT_EPIC_TOUGHNESS_8 761 1 -1 0
25 FEAT_EPIC_TOUGHNESS_9 762 1 -1 0
26 FEAT_EPIC_TOUGHNESS_10 763 1 -1 0
27 ExpandedSoulmeldCapacity_1 8946 1 -1 0
28 ExpandedSoulmeldCapacity_2 8947 1 -1 0
29 ExpandedSoulmeldCapacity_3 8948 1 -1 0
30 ExpandedSoulmeldCapacity_4 8949 1 -1 0
31 ExpandedSoulmeldCapacity_5 8950 1 -1 0
32 BonusSoulmeld_1 8965 1 -1 0
33 BonusSoulmeld_2 8966 1 -1 0
34 BonusSoulmeld_3 8967 1 -1 0
35 BonusSoulmeld_4 8968 1 -1 0
36 BonusSoulmeld_5 8969 1 -1 0
37 BonusSoulmeld_6 8970 1 -1 0
38 BonusSoulmeld_7 8971 1 -1 0
39 BonusSoulmeld_8 8972 1 -1 0
40 BonusSoulmeld_9 8973 1 -1 0
41 BonusSoulmeld_10 8974 1 -1 0
42 EpicEssentia_1 8975 1 -1 0
43 EpicEssentia_2 8976 1 -1 0
44 EpicEssentia_3 8977 1 -1 0
45 EpicEssentia_4 8978 1 -1 0
46 EpicEssentia_5 8979 1 -1 0
47 EpicEssentia_6 8980 1 -1 0
48 ExtraChakraBind_1 8981 1 -1 0
49 ExtraChakraBind_2 8982 1 -1 0
50 ExtraChakraBind_3 8983 1 -1 0
51 ExtraChakraBind_4 8984 1 -1 0
52 ExtraChakraBind_5 8985 1 -1 0
53 ExtraChakraBind_6 8986 1 -1 0
54 ExtraChakraBind_7 8987 1 -1 0
55 ExtraChakraBind_8 8988 1 -1 0
56 ExtraChakraBind_9 8989 1 -1 0
57 ExtraChakraBind_10 8990 1 -1 0
58 OpenHeartChakra 8991 1 -1 0
59 OpenSoulChakra 8992 1 -1 0
60 Epic_RapidMeldshaping_1 8993 1 -1 0
61 Epic_RapidMeldshaping_2 8994 1 -1 0
62 Epic_RapidMeldshaping_3 8995 1 -1 0
63 Epic_RapidMeldshaping_4 8996 1 -1 0
64 Epic_RapidMeldshaping_5 8997 1 -1 0
65 Epic_RapidMeldshaping_6 8998 1 -1 0
66 Epic_RapidMeldshaping_7 8999 1 -1 0
67 Epic_RapidMeldshaping_8 9000 1 -1 0
68 Epic_RapidMeldshaping_9 9001 1 -1 0
69 Epic_RapidMeldshaping_10 9002 1 -1 0
70 Epic_RebindSoulmeld_Crown 9003 1 -1 1
71 Epic_RebindSoulmeld_Feet 9004 1 -1 1
72 Epic_RebindSoulmeld_Hands 9005 1 -1 1
73 Epic_RebindSoulmeld_Arms 9006 1 -1 1
74 Epic_RebindSoulmeld_Brow 9007 1 -1 1
75 Epic_RebindSoulmeld_Shoulders 9008 1 -1 1
76 Epic_RebindSoulmeld_Throat 9009 1 -1 1
77 Epic_RebindSoulmeld_Waist 9010 1 -1 1
78 Epic_RebindSoulmeld_Heart 9011 1 -1 1
79 Epic_RebindSoulmeld_Soul 9012 1 -1 1
80 Epic_RebindSoulmeld_Totem 9013 1 -1 1
81 FEAT_EPIC_ENERGY_RESISTANCE_COLD_1 533 1 -1 0
82 FEAT_EPIC_ENERGY_RESISTANCE_COLD_2 534 1 -1 0
83 FEAT_EPIC_ENERGY_RESISTANCE_COLD_3 535 1 -1 0
84 FEAT_EPIC_ENERGY_RESISTANCE_COLD_4 536 1 -1 0
85 FEAT_EPIC_ENERGY_RESISTANCE_COLD_5 537 1 -1 0
86 FEAT_EPIC_ENERGY_RESISTANCE_COLD_6 538 1 -1 0
87 FEAT_EPIC_ENERGY_RESISTANCE_COLD_7 539 1 -1 0
88 FEAT_EPIC_ENERGY_RESISTANCE_COLD_8 540 1 -1 0
89 FEAT_EPIC_ENERGY_RESISTANCE_COLD_9 541 1 -1 0
90 FEAT_EPIC_ENERGY_RESISTANCE_COLD_10 542 1 -1 0
91 FEAT_EPIC_ENERGY_RESISTANCE_ACID_1 543 1 -1 0
92 FEAT_EPIC_ENERGY_RESISTANCE_ACID_2 544 1 -1 0
93 FEAT_EPIC_ENERGY_RESISTANCE_ACID_3 545 1 -1 0
94 FEAT_EPIC_ENERGY_RESISTANCE_ACID_4 546 1 -1 0
95 FEAT_EPIC_ENERGY_RESISTANCE_ACID_5 547 1 -1 0
96 FEAT_EPIC_ENERGY_RESISTANCE_ACID_6 548 1 -1 0
97 FEAT_EPIC_ENERGY_RESISTANCE_ACID_7 549 1 -1 0
98 FEAT_EPIC_ENERGY_RESISTANCE_ACID_8 550 1 -1 0
99 FEAT_EPIC_ENERGY_RESISTANCE_ACID_9 551 1 -1 0
100 FEAT_EPIC_ENERGY_RESISTANCE_ACID_10 552 1 -1 0
101 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_1 553 1 -1 0
102 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_2 554 1 -1 0
103 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_3 555 1 -1 0
104 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_4 556 1 -1 0
105 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_5 557 1 -1 0
106 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_6 558 1 -1 0
107 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_7 559 1 -1 0
108 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_8 560 1 -1 0
109 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_9 561 1 -1 0
110 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_10 562 1 -1 0
111 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_1 563 1 -1 0
112 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_2 564 1 -1 0
113 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_3 565 1 -1 0
114 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_4 566 1 -1 0
115 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_5 567 1 -1 0
116 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_6 568 1 -1 0
117 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_7 569 1 -1 0
118 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_8 570 1 -1 0
119 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_9 571 1 -1 0
120 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_10 572 1 -1 0
121 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_1 573 1 -1 0
122 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_2 574 1 -1 0
123 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_3 575 1 -1 0
124 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_4 576 1 -1 0
125 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_5 577 1 -1 0
126 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_6 578 1 -1 0
127 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_7 579 1 -1 0
128 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_8 580 1 -1 0
129 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_9 581 1 -1 0
130 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_10 582 1 -1 0
131 FEAT_EPIC_REPUTATION 586 1 -1 0
132 FEAT_EPIC_SUPERIOR_INITIATIVE 753 1 -1 0
133 FEAT_EPIC_FORTITUDE 583 1 -1 0
134 FEAT_EPIC_REFLEXES 585 1 -1 0
135 FEAT_EPIC_WILL 695 1 -1 0
136 FEAT_EPIC_SKILL_FOCUS_USEMAGICDEVICE 609 1 -1 0
137 FEAT_EPIC_SKILL_FOCUS_RIDE 3038 1 -1 0
138 FEAT_EPIC_SKILL_FOCUS_JUMP 3040 1 -1 0
139 FEAT_EPIC_SKILL_FOCUS_SENSE_MOTIVE 3042 1 -1 0
140 FEAT_EPIC_SKILL_FOCUS_MARTIAL_LORE 3044 1 -1 0
141 FEAT_EPIC_SKILL_FOCUS_BALANCE 3046 1 -1 0
142 FEAT_EPIC_SKILL_FOCUS_CRAFT_POISON 3048 1 -1 0
143 FEAT_EPIC_SKILL_FOCUS_PSICRAFT 3050 1 -1 0
144 FEAT_EPIC_SKILL_FOCUS_CLIMB 3052 1 -1 0
145 FEAT_EPIC_SKILL_FOCUS_CRAFT_GENERAL 3054 1 -1 0
146 FEAT_EPIC_SKILL_FOCUS_APPRAISE 588 1 -1 0
147 FEAT_EPIC_SKILL_FOCUS_CONCENTRATION 589 1 -1 0
148 FEAT_EPIC_SKILL_FOCUS_CRAFT_TRAP 590 1 -1 0
149 FEAT_EPIC_SKILL_FOCUS_DISABLETRAP 591 1 -1 0
150 FEAT_EPIC_SKILL_FOCUS_DISCIPLINE 592 1 -1 0
151 FEAT_EPIC_SKILL_FOCUS_HEAL 593 1 -1 0
152 FEAT_EPIC_SKILL_FOCUS_HIDE 594 1 -1 0
153 FEAT_EPIC_SKILL_FOCUS_LISTEN 595 1 -1 0
154 FEAT_EPIC_SKILL_FOCUS_LORE 596 1 -1 0
155 FEAT_EPIC_SKILL_FOCUS_MOVESILENTLY 597 1 -1 0
156 FEAT_EPIC_SKILL_FOCUS_OPENLOCK 598 1 -1 0
157 FEAT_EPIC_SKILL_FOCUS_PARRY 599 1 -1 0
158 FEAT_EPIC_SKILL_FOCUS_PERSUADE 601 1 -1 0
159 FEAT_EPIC_SKILL_FOCUS_PICKPOCKET 602 1 -1 0
160 FEAT_EPIC_SKILL_FOCUS_SEARCH 603 1 -1 0
161 FEAT_EPIC_SKILL_FOCUS_SETTRAP 604 1 -1 0
162 FEAT_EPIC_SKILL_FOCUS_SPELLCRAFT 605 1 -1 0
163 FEAT_EPIC_SKILL_FOCUS_SPOT 606 1 -1 0
164 FEAT_EPIC_SKILL_FOCUS_TAUNT 607 1 -1 0
165 FEAT_EPIC_SKILL_FOCUS_TUMBLE 608 1 -1 0
166 FEAT_EPIC_SKILL_FOCUS_CRAFT_ARMOR 913 1 -1 0
167 FEAT_EPIC_SKILL_FOCUS_CRAFT_WEAPON 914 1 -1 0
168 FEAT_EPIC_SKILL_FOCUS_BLUFF 917 1 -1 0
169 FEAT_EPIC_SKILL_FOCUS_INTIMIDATE 918 1 -1 0
170 FEAT_EPIC_GREAT_CONSTITUTION_1 774 1 -1 0
171 FEAT_EPIC_GREAT_CONSTITUTION_2 775 1 -1 0
172 FEAT_EPIC_GREAT_CONSTITUTION_3 776 1 -1 0
173 FEAT_EPIC_GREAT_CONSTITUTION_4 777 1 -1 0
174 FEAT_EPIC_GREAT_CONSTITUTION_5 778 1 -1 0
175 FEAT_EPIC_GREAT_CONSTITUTION_6 779 1 -1 0
176 FEAT_EPIC_GREAT_CONSTITUTION_7 780 1 -1 0
177 FEAT_EPIC_GREAT_CONSTITUTION_8 781 1 -1 0
178 FEAT_EPIC_GREAT_CONSTITUTION_9 782 1 -1 0
179 FEAT_EPIC_GREAT_CONSTITUTION_10 783 1 -1 0

File diff suppressed because it is too large Load Diff

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;
//:: Sanctify Martial Strike Expansion
const int FEAT_SANCTIFY_MARTIAL_EAGLE_CLAW = 24850;
const int FEAT_SANCTIFY_MARTIAL_LIGHT_LANCE = 24851;
const int FEAT_SANCTIFY_MARTIAL_HEAVY_PICK = 24852;
const int FEAT_SANCTIFY_MARTIAL_LIGHT_PICK = 24853;
const int FEAT_SANCTIFY_MARTIAL_SAI = 24854;
const int FEAT_SANCTIFY_MARTIAL_NUNCHAKU = 24855;
const int FEAT_SANCTIFY_MARTIAL_FALCHION = 24856;
const int FEAT_SANCTIFY_MARTIAL_SAP = 24857;
const int FEAT_SANCTIFY_MARTIAL_KATAR = 24858;
const int FEAT_SANCTIFY_MARTIAL_HEAVY_MACE = 24859;
const int FEAT_SANCTIFY_MARTIAL_MAUL = 24860;
const int FEAT_SANCTIFY_MARTIAL_DBL_SCIMITAR = 24861;
const int FEAT_SANCTIFY_MARTIAL_GOAD = 24862;
const int FEAT_SANCTIFY_MARTIAL_ELVEN_LIGHTBLADE = 24863;
const int FEAT_SANCTIFY_MARTIAL_ELVEN_THINBLADE = 24864;
const int FEAT_SANCTIFY_MARTIAL_ELVEN_COURTBLADE = 24865;
const int FEAT_SANCTIFY_MARTIAL_EAGLE_CLAW = 24850;
const int FEAT_SANCTIFY_MARTIAL_LIGHT_LANCE = 24851;
const int FEAT_SANCTIFY_MARTIAL_HEAVY_PICK = 24852;
const int FEAT_SANCTIFY_MARTIAL_LIGHT_PICK = 24853;
const int FEAT_SANCTIFY_MARTIAL_SAI = 24854;
const int FEAT_SANCTIFY_MARTIAL_NUNCHAKU = 24855;
const int FEAT_SANCTIFY_MARTIAL_FALCHION = 24856;
const int FEAT_SANCTIFY_MARTIAL_SAP = 24857;
const int FEAT_SANCTIFY_MARTIAL_KATAR = 24858;
const int FEAT_SANCTIFY_MARTIAL_HEAVY_MACE = 24859;
const int FEAT_SANCTIFY_MARTIAL_MAUL = 24860;
const int FEAT_SANCTIFY_MARTIAL_DBL_SCIMITAR = 24861;
const int FEAT_SANCTIFY_MARTIAL_GOAD = 24862;
const int FEAT_SANCTIFY_MARTIAL_ELVEN_LIGHTBLADE = 24863;
const int FEAT_SANCTIFY_MARTIAL_ELVEN_THINBLADE = 24864;
const int FEAT_SANCTIFY_MARTIAL_ELVEN_COURTBLADE = 24865;
//:: Web Enhancement Feats
const int FEAT_CHARMING_THE_ARROW = 25997;

View File

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

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_WHIP = 24796;
const int IP_CONST_FEAT_VILE_MARTIAL_TRIDENT = 24797;
const int IP_CONST_FEAT_VILE_MARTIAL_MINDBLADE = 24898;
const int IP_CONST_FEAT_VILE_MARTIAL_MINDBLADE = 24798;
//:: New Weapons
const int IP_CONST_FEAT_VILE_MARTIAL_EAGLE_CLAW = 26500;
const int IP_CONST_FEAT_VILE_MARTIAL_LIGHT_LANCE = 26501;

View File

@ -1,5 +1,8 @@
//const int FOOBAR = -1; // Comment or uncomment whenever the compiler croaks on an error code 5.
//:: NUI Spell constants
const int SPELL_NUI_POWER_ATTACK = 2691;
//spell
const int SPELL_MAJOR_MAGIC_MISSILE = 2247;
const int SPELL_GREAT_WALL_OF_DISPEL = 2096;

View File

@ -228,8 +228,10 @@ int GetSanctifyMartialStrikeFeatItemProperty(int nFeatNumber)
int GetVileMartialStrikeFeatItemProperty(int nFeatNumber)
{
int nItemProperty;
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_VILE_MARTIAL_CLUB, IP_CONST_FEAT_VILE_MARTIAL_MINDBLADE);
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_VILE_MARTIAL_CLUB, IP_CONST_FEAT_VILE_MARTIAL_TRIDENT);
if(nItemProperty != -1) return nItemProperty;
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_VILE_MARTIAL_MINDBLADE, IP_CONST_FEAT_VILE_MARTIAL_MINDBLADE);
if(nItemProperty != -1) return nItemProperty;
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_VILE_MARTIAL_EAGLE_CLAW, IP_CONST_FEAT_VILE_MARTIAL_ELVEN_COURTBLADE);
if(nItemProperty != -1) return nItemProperty;
return -1;

View File

@ -341,6 +341,16 @@ int BladeMeditationFeat(object oInitiator);
*/
int BladeMeditationDamage(object oInitiator, int nMoveId);
/**
* Returns 1 if Blade Meditation & Discipline match
* @param oInitiator Person to check
* @param nDiscipline Discipline to match
*
* @return 1 or 0
*/
int HasBladeMeditationForDiscipline(object oInitiator, int nDiscipline);
//////////////////////////////////////////////////
/* Includes */
//////////////////////////////////////////////////
@ -1266,4 +1276,18 @@ int BladeMeditationDamage(object oInitiator, int nMoveId)
return 1;
return -1;
}
int HasBladeMeditationForDiscipline(object oInitiator, int nDiscipline)
{
if (!GetIsObjectValid(oInitiator))
return FALSE;
int nFeatDiscipline = BladeMeditationFeat(oInitiator);
// If the discipline for Blade Meditation matches the one we're checking, return true
if (nFeatDiscipline == nDiscipline)
return TRUE;
return FALSE;
}

View File

@ -24,6 +24,60 @@ mystery or a spell of higher than 4th level.
#include "shd_inc_shdfunc"
#include "shd_mysthook"
void main()
{
object oShadow = OBJECT_SELF;
int nMyst = PRCGetSpellId();
if(DEBUG) DoDebug("shd_myst_echospl: nMyst " + IntToString(nMyst));
// Disallow if this spell is from an item
if (PRCGetSpellCastItem(oShadow) != OBJECT_INVALID)
{
FloatingTextStringOnCreature("You cannot Echo spells cast from items.", oShadow);
if(DEBUG) DoDebug("shd_myst_echospl: Disallowed - item cast");
return;
}
// Disallow if this spell is cast by the shadowcaster itself
if (GetLastSpellCaster() == oShadow)
{
FloatingTextStringOnCreature("You cannot Echo your own spells.", oShadow);
if(DEBUG) DoDebug("shd_myst_echospl: Disallowed - item cast or cast by oShadow");
return;
}
if (GetLocalInt(oShadow, "EchoedSpell"))
{
int nSpellId = GetLocalInt(oShadow, "EchoedSpell");
int nDC = 10 + StringToInt(Get2DACache("spells", "Innate", nSpellId)) + GetAbilityModifier(ABILITY_CHARISMA, oShadow);
if(DEBUG) DoDebug("shd_myst_echospl: Echo SpellId " + IntToString(nSpellId) + " at DC " + IntToString(nDC));
AssignCommand(oShadow, ActionCastSpell(nSpellId, GetShadowcasterLevel(oShadow), 0, nDC));
}
else
{
if(DEBUG) DoDebug("shd_myst_echospl: MYST_ECHO_SPELL");
if (!ShadPreMystCastCode()) return;
object oTarget = PRCGetSpellTargetObject();
struct mystery myst = EvaluateMystery(oShadow, oTarget, METASHADOW_NONE);
if (myst.bCanMyst)
{
if(DEBUG) DoDebug("shd_myst_echospl: MYST_ECHO_SPELL bCanMyst");
SetLocalInt(oTarget, "EchoSpell", TRUE);
SetLocalObject(oTarget, "EchoSpell", oShadow);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DIMENSIONANCHOR), oTarget);
}
}
}
/* #include "shd_inc_shdfunc"
#include "shd_mysthook"
void main()
{
object oShadow = OBJECT_SELF;
@ -56,4 +110,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DIMENSIONANCHOR), oTarget);
}
}
}
} */

View File

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

View File

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

View File

@ -29,14 +29,22 @@
void TOBAttack(object oTarget, object oInitiator)
{
effect eNone = EffectVisualEffect(VFX_IMP_BLINDDEAD_DN_CYAN);
int nDC = 14 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
if (nBladeMed)
{
nDC += 1;
}
effect eNone = EffectVisualEffect(VFX_IMP_BLINDDEAD_DN_CYAN);
int nAB = 0;
if (GetLocalInt(oInitiator, "SupernalAttack")) nAB += 1;
PerformAttack(oTarget, oInitiator, eNone, 0.0, nAB, 0, 0, "Mind Strike Hit", "Mind Strike Miss");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{
// Saving Throw
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, (14 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator))))
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC))
{
ApplyAbilityDamage(oTarget, ABILITY_WISDOM, d4(), DURATION_TYPE_PERMANENT);
}

View File

@ -12,7 +12,7 @@ Range: Personal
Target: You
In the blink of an eye, you make your move. Your speed, reflexes, and boundless confidence
combine to allow you to make a fast, bold move that catches your fores off guard.
combine to allow you to make a fast, bold move that catches your foes off guard.
Your speed doubles for one round.

View File

@ -41,8 +41,15 @@ void main()
// Enemy check
if (GetIsEnemy(oProneTarget, oInitiator))
{
int nDC = 10 + GetHitDice(oInitiator)/2 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
if (nBladeMed)
{
nDC += 1;
}
// Save check
if (!PRCMySavingThrow(SAVING_THROW_WILL, oProneTarget, (10 + GetHitDice(oInitiator)/2 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator))))
if (!PRCMySavingThrow(SAVING_THROW_WILL, oProneTarget, nDC))
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oProneTarget, 6.0);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(12)), oProneTarget);

View File

@ -32,8 +32,16 @@ void main()
object oProneTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(10.0), GetLocation(oInitiator));
while(GetIsObjectValid(oProneTarget))
{
// Skill check
if (!GetIsSkillSuccessful(oProneTarget, SKILL_BALANCE, 15))
int nDC = 15;
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
if (nBladeMed)
{
nDC += 1;
}
// Skill check
if (!GetIsSkillSuccessful(oProneTarget, SKILL_BALANCE, nDC))
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oProneTarget, 6.0);
}

View File

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

View File

@ -28,8 +28,17 @@ void main()
{
//Declare major variables
object oTarget = GetEnteringObject();
object oInitiator = GetAreaOfEffectCreator(OBJECT_SELF);
int nDC = 10;
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, DISCIPLINE_STONE_DRAGON);
if (nBladeMed)
{
nDC += 1;
}
// Cleaned up on exit
if (!GetIsSkillSuccessful(oTarget, SKILL_BALANCE, 10) && GetIsEnemy(oTarget, GetAreaOfEffectCreator()))
if (!GetIsSkillSuccessful(oTarget, SKILL_BALANCE, nDC) && GetIsEnemy(oTarget, GetAreaOfEffectCreator()))
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oTarget, 6.0);
}

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");
if(GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{
int nDC = 17 + GetAbilityModifier(ABILITY_CHARISMA, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
if (nBladeMed)
{
nDC += 1;
}
// Saving Throw for the primary target
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (17 + GetAbilityModifier(ABILITY_CHARISMA, oInitiator))))
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
{
effect eLink = ExtraordinaryEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL));
ApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
@ -64,7 +71,7 @@ void TOBAttack(object oTarget, object oInitiator)
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M_PURPLE), oAreaTarget);
// Saving Throw for the secondary targets
if(!PRCMySavingThrow(SAVING_THROW_FORT, oAreaTarget, (17 + GetAbilityModifier(ABILITY_CHARISMA, oInitiator))))
if(!PRCMySavingThrow(SAVING_THROW_FORT, oAreaTarget, nDC))
{
effect eLink = ExtraordinaryEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL));
ApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oAreaTarget);

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");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{
// Saving Throw
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (15 + GetAbilityModifier(ABILITY_CHARISMA, oInitiator))))
int nDC = 15 + GetAbilityModifier(ABILITY_CHARISMA, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
if (nBladeMed)
{
nDC += 1;
}
// Saving Throw
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
{
effect eLink = ExtraordinaryEffect(EffectLinkEffects(EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED), EffectShaken()));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 60.0);

View File

@ -46,6 +46,6 @@ void main()
{
effect eNone = EffectVisualEffect(PSI_IMP_CONCUSSION_BLAST);
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator);
DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d8(8), GetWeaponDamageType(oWeap), "Divine Surge Hit", "Divine Surge Miss"));
DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d8(8), GetWeaponDamageType(oWeap), "Divine Surge Hit", "Divine Surge Miss"));
}
}

View File

@ -41,6 +41,13 @@ void main()
effect eExplode = EffectVisualEffect(VFX_FNF_FIREBALL);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget);
int nDC = 11 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
if (nBladeMed)
{
nDC += 1;
}
//Get the first target in the radius around the caster
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(30.0), lTarget);
while(GetIsObjectValid(oTarget))

View File

@ -66,6 +66,13 @@ void Deathmark(object oInitiator, object oTarget)
float fDist = DoDeathmarkArea(oTarget);
//FloatingTextStringOnCreature("Deathmark Area "+FloatToString(fDist), oInitiator);
int nDC = 13 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
if (nBladeMed)
{
nDC += 1;
}
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
//Get the first target in the radius around the caster

View File

@ -51,6 +51,13 @@ void main()
float fLength = FeetToMeters(60.0);
vector vOrigin = GetPosition(oInitiator);
int nDC = 14 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
if (nBladeMed)
{
nDC += 1;
}
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M);
// Loop over targets in the line shape
oTarget = MyFirstObjectInShape(SHAPE_SPELLCYLINDER, fLength, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, vOrigin);

View File

@ -48,6 +48,13 @@ void main()
{
location lTarget = GetLocation(oInitiator);
int nDC = 12 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
if (nBladeMed)
{
nDC += 1;
}
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
//Get the first target in the radius around the caster
oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, FeetToMeters(30.0), PRCGetSpellTargetLocation(), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);

View File

@ -50,6 +50,13 @@ void main()
{
location lTarget = GetLocation(oInitiator);
int nDC = 19 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
if (nBladeMed)
{
nDC += 1;
}
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
//Get the first target in the radius around the caster
oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(60.0), PRCGetSpellTargetLocation(), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);

View File

@ -49,6 +49,13 @@ void main()
{
location lTarget = GetLocation(oInitiator);
int nDC = 16 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
if (nBladeMed)
{
nDC += 1;
}
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M);
//Get the first target in the radius around the caster
oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(30.0), PRCGetSpellTargetLocation(), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);

View File

@ -49,6 +49,13 @@ void main()
{
location lTarget = GetLocation(oInitiator);
int nDC = 18 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
if (nBladeMed)
{
nDC += 1;
}
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
//Get the first target in the radius around the caster
oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, FeetToMeters(30.0), PRCGetSpellTargetLocation(), TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);

View File

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

View File

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

View File

@ -50,7 +50,14 @@ void main()
if(move.bCanManeuver)
{
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator);
int nDC = d20(1) + GetAttackBonus(oTarget, oInitiator, oWeap);
int nDC = d20(1) + GetAttackBonus(oTarget, oInitiator, oWeap);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
if (nBladeMed)
{
nDC += 1;
}
SetLocalInt(oInitiator, "IHLightningThrow", TRUE);
float fLength = FeetToMeters(30.0);
location lTarget = PRCGetSpellTargetLocation();

View File

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

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");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{
// Saving Throw
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (11 + GetAbilityModifier(ABILITY_WISDOM, oInitiator))))
int nDC = 11 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
if (nBladeMed)
{
nDC += 1;
}
// Saving Throw
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
{
effect eLink = SupernaturalEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);

View File

@ -31,14 +31,22 @@
void TOBAttack(object oTarget, object oInitiator)
{
effect eNone;
effect eNone;
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Drain Vitality Hit", "Drain Vitality Miss");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCMySavingThrow(SAVING_THROW_FORT, oTarget, 12 + GetAbilityModifier(ABILITY_WISDOM, oInitiator),SAVING_THROW_TYPE_NONE))
{
ApplyAbilityDamage(oTarget, ABILITY_CONSTITUTION, 2, DURATION_TYPE_TEMPORARY, TRUE, -1.0f);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE_RED), oTarget);
}
int nDC = 12 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
if (nBladeMed)
{
nDC += 1;
}
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE))
{
ApplyAbilityDamage(oTarget, ABILITY_CONSTITUTION, 2, DURATION_TYPE_TEMPORARY, TRUE, -1.0f);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE_RED), oTarget);
}
}
void main()

View File

@ -31,8 +31,15 @@ void TOBAttack(object oTarget, object oInitiator)
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{
int nDam = d6(15);
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (15 + GetAbilityModifier(ABILITY_WISDOM, oInitiator)))) nDam = d6(5);
int nDC = 15 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
if (nBladeMed)
{
nDC += 1;
}
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC)) nDam = d6(5);
if(!GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT))
{

View File

@ -45,7 +45,15 @@ void TOBAttack(object oTarget, object oInitiator)
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (18 + GetAbilityModifier(ABILITY_WISDOM, oInitiator))))
int nDC = 18 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
if (nBladeMed)
{
nDC += 1;
}
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
{
int nLevels = d4();

View File

@ -53,7 +53,15 @@ void TOBAttack(object oTarget, object oInitiator)
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCGetIsAliveCreature(oTarget))
{
// Saving Throw
int nSave = PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (19 + GetAbilityModifier(ABILITY_WISDOM, oInitiator)));
int nDC = 19 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
if (nBladeMed)
{
nDC += 1;
}
int nSave = PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC);
int nRoll = d20(1);
int nDam;

View File

@ -47,22 +47,28 @@ void main()
int nTouchAttack = PRCDoMeleeTouchAttack(oTarget);
if(nTouchAttack > 0)
{
// Saving Throw
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (14 + GetAbilityModifier(ABILITY_WISDOM, oInitiator))))
{
effect eParal = EffectParalyze();
effect eVis = EffectVisualEffect(82);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
effect eDur2 = EffectVisualEffect(VFX_DUR_PARALYZED);
effect eDur3 = EffectVisualEffect(VFX_DUR_PARALYZE_HOLD);
int nDC = 14 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
if (nBladeMed)
{
nDC += 1;
}
effect eLink = EffectLinkEffects(eDur2, eDur);
eLink = EffectLinkEffects(eLink, eParal);
eLink = EffectLinkEffects(eLink, eVis);
eLink = EffectLinkEffects(eLink, eDur3);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(d3()));
}
// Saving Throw
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
{
effect eParal = EffectParalyze();
effect eVis = EffectVisualEffect(82);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
effect eDur2 = EffectVisualEffect(VFX_DUR_PARALYZED);
effect eDur3 = EffectVisualEffect(VFX_DUR_PARALYZE_HOLD);
effect eLink = EffectLinkEffects(eDur2, eDur);
eLink = EffectLinkEffects(eLink, eParal);
eLink = EffectLinkEffects(eLink, eVis);
eLink = EffectLinkEffects(eLink, eDur3);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(d3()));
}
}
}
}

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");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{
int nDC = 14 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
if (nBladeMed)
{
nDC += 1;
}
// Saving Throw
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (14 + GetAbilityModifier(ABILITY_WISDOM, oInitiator))))
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
{
effect eLink = SupernaturalEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
eLink = SupernaturalEffect(EffectMissChance(50));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0);
}
effect eLink = SupernaturalEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
eLink = SupernaturalEffect(EffectMissChance(50));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0);
}
}
}

View File

@ -63,6 +63,13 @@ void main()
//Apply the flat-footed effect
int nDC = 13 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
if (nBladeMed)
{
nDC += 1;
}
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE))
{
AssignCommand(oTarget, ClearAllActions(TRUE));

View File

@ -61,7 +61,14 @@ void main()
ApplyTouchAttackDamage(oInitiator, oTarget, iAttackRoll, d6(8), DAMAGE_TYPE_MAGICAL);
//Apply the stun effect
int nDC = 16 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
int nDC = 16 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
if (nBladeMed)
{
nDC += 1;
}
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE))
{
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectStunned(), oTarget, RoundsToSeconds(1));

View File

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

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");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
{
// Saving Throw
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator))))
int nDC = 13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
if (nBladeMed)
{
nDC += 1;
}
// Saving Throw
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
{
effect eLink = SupernaturalEffect(EffectVisualEffect(VFX_IMP_HEAD_EVIL));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -29,15 +29,22 @@
void TOBAttack(object oTarget, object oInitiator)
{
effect eNone;
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator);
effect eNone;
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator);
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, d6(1), GetWeaponDamageType(oWeap), "Stone Vise Hit", "Stone Vise Miss");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCMySavingThrow(SAVING_THROW_FORT, oTarget, 12 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator),SAVING_THROW_TYPE_NONE))
{
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectCutsceneParalyze()), oTarget, 6.0);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DIMENSIONLOCK), oTarget);
}
int nDC = 12 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
if (nBladeMed)
{
nDC += 1;
}
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE))
{
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectCutsceneParalyze()), oTarget, 6.0);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DIMENSIONLOCK), oTarget);
}
}
void main()

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

View File

@ -77,7 +77,13 @@ void main()
// Saving Throw for area target
int nDamage = d6(4);
// Adjust damage according to Reflex Save, Evasion or Improved Evasion
nDamage = PRCGetReflexAdjustedDamage(nDamage, oAreaTarget, (13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator)), SAVING_THROW_TYPE_NONE);
int nDC = 13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
if (nBladeMed)
{
nDC += 1;
}
nDamage = PRCGetReflexAdjustedDamage(nDamage, oAreaTarget, nDC, SAVING_THROW_TYPE_NONE);
if(nDamage > 0)
{

View File

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

View File

@ -50,11 +50,11 @@ void main()
if (IPGetIsMeleeWeapon(oItem))
{
// Perform first bonus attack, overriding weapon just to make sure
DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Raging Mongoose Hit", "Raging Mongoose Miss", FALSE, oItem));
DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Dancing Mongoose Hit", "Dancing Mongoose Miss", FALSE, oItem));
if (IPGetIsMeleeWeapon(oItem2))
{
// Perform second bonus attack, overriding weapon just to make sure
DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Raging Mongoose Hit", "Raging Mongoose Miss", FALSE, oItem2));
DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Dancing Mongoose Hit", "Dancing Mongoose Miss", FALSE, oItem2));
}
}
else

View File

@ -47,6 +47,13 @@ void TOBAttack(object oTarget, object oInitiator)
{
//Save
int nDC = 19 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
if (nBladeMed)
{
nDC += 1;
}
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_DEATH) && !GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT))
{
DeathlessFrenzyCheck(oTarget);

View File

@ -31,11 +31,20 @@ void TOBAttack(object oTarget, object oInitiator)
{
effect eNone = EffectVisualEffect(PSI_IMP_CONCUSSION_BLAST);
int nBonus = TOBSituationalAttackBonuses(oInitiator, DISCIPLINE_TIGER_CLAW);
PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Flesh Ripper Hit", "Flesh Ripper Miss");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && !GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT))
int nDC = 13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
if (nBladeMed)
{
nDC += 1;
}
PerformAttack(oTarget, oInitiator, eNone, 0.0, nBonus, 0, 0, "Flesh Ripper Hit", "Flesh Ripper Miss");
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack") && !GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT))
{
// Saving Throw
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (13 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator))))
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
{
effect eLink = EffectLinkEffects(EffectAttackDecrease(4), EffectACDecrease(4));
eLink = ExtraordinaryEffect(eLink);

View File

@ -58,8 +58,16 @@ void main()
{
if(GetIsEnemy(oTarget, oInitiator))
{
// Saving Throw
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, (14 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator))))
// Saving Throw
int nDC = 14 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));;
if (nBladeMed)
{
nDC += 1;
}
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC))
{
effect eLink = ExtraordinaryEffect(EffectLinkEffects(EffectShaken(), EffectVisualEffect(VFX_IMP_DOOM)));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 60.0);

View File

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

View File

@ -43,6 +43,12 @@ void TOBAttack(object oTarget, object oInitiator, int iJumpRoll)
effect eNone;
int nAB = GetAbilityModifier(ABILITY_DEXTERITY, oTarget);
int nBonus = TOBSituationalAttackBonuses(oInitiator, DISCIPLINE_TIGER_CLAW);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
if (nBladeMed)
{
iJumpRoll += 1;
}
DelayCommand(0.0, PerformAttack(oTarget, oInitiator, eNone, 0.0, nAB + nBonus, d6(10), GetWeaponDamageType(oWeap), "Swooping Dragon Strike Hit", "Swooping Dragon Strike Miss"));
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))

View File

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

View File

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

View File

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

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
72 RedspawnArcaniss Ra 16790334 16790334 16790335 16790336 16790337 **** 353 0 2 0 6 0 4 40 9 RACE_FEAT_REDARC 8163 1 RACIAL_TYPE_REDSPAWN_ARCANISS 15 9 1 redspawn **** **** **** 4 30 3 1 INT 274
73 Gloura Gl 16790346 16790346 16790347 16790348 16790349 **** 6 0 10 0 6 2 4 30 1 RACE_FEAT_GLOURA 8163 1 RACIAL_TYPE_GLOURA 15 1 1 gloura **** **** **** 4 30 3 1 INT 278
74 Muckdweller Mr 16836018 16836018 16836019 16836020 16836021 **** 206 -2 6 0 -2 -2 0 20 8 RACE_FEAT_MUCKD 8163 1 RACIAL_TYPE_MUCKDWELLER 15 8 1 muckdweller **** **** **** 4 30 3 1 INT 276
74 Muckdweller Mr 16836018 16836018 16836019 16836020 16836021 **** 206 -6 6 0 -2 -2 0 20 8 RACE_FEAT_MUCKD 8163 1 RACIAL_TYPE_MUCKDWELLER 15 8 1 muckdweller **** **** **** 4 30 3 1 INT 276
75 Aranea Ae 16836006 16836006 16836007 16836008 16836009 **** 158 0 4 4 4 2 4 50 9 RACE_FEAT_ARANEA 8163 1 RACIAL_TYPE_ARANEA 15 9 1 aranea **** **** **** 4 30 3 1 INT 284
76 Chitine Ch 16832294 16832294 16832295 16832296 16832297 **** 2 **** 2 2 -4 **** 2 30 8 RACE_FEAT_CHIT 16832294 1 RACIAL_TYPE_CHITINE 15 8 1 chitine **** **** **** 4 30 3 1 INT 274
77 SpiretopDragon Sd 16835965 16835966 16835967 16835968 16835969 **** 375 -4 8 -4 -2 0 2 60 8 RACE_FEAT_SPDRAG 16835970 1 RACIAL_TYPE_SPIRETOPDRAGON 25 8 1 dragon **** **** **** 4 30 3 1 INT 272

View File

@ -400,7 +400,6 @@ void main()
Pwatk(oPC);
object oSkin = GetPCSkin(oPC);
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_SICKLE, oPC)
+ GetHasFeat(FEAT_VILE_MARTIAL_DWAXE, oPC)
+ GetHasFeat(FEAT_VILE_MARTIAL_MINDBLADE, oPC)
+ GetHasFeat(FEAT_VILE_MARTIAL_MINDBLADE, oPC)
+ GetHasFeat(FEAT_VILE_MARTIAL_EAGLE_CLAW)
+ GetHasFeat(FEAT_VILE_MARTIAL_LIGHT_LANCE)
+ GetHasFeat(FEAT_VILE_MARTIAL_HEAVY_PICK)
+ GetHasFeat(FEAT_VILE_MARTIAL_LIGHT_PICK)
+ GetHasFeat(FEAT_VILE_MARTIAL_SAI)
+ GetHasFeat(FEAT_VILE_MARTIAL_NUNCHAKU)
+ GetHasFeat(FEAT_VILE_MARTIAL_FALCHION)
+ GetHasFeat(FEAT_VILE_MARTIAL_SAP)
+ GetHasFeat(FEAT_VILE_MARTIAL_KATAR)
+ GetHasFeat(FEAT_VILE_MARTIAL_HEAVY_MACE)
+ GetHasFeat(FEAT_VILE_MARTIAL_MAUL)
+ GetHasFeat(FEAT_VILE_MARTIAL_DBL_SCIMITAR)
+ GetHasFeat(FEAT_VILE_MARTIAL_GOAD)
+ GetHasFeat(FEAT_VILE_MARTIAL_ELVEN_LIGHTBLADE)
+ GetHasFeat(FEAT_VILE_MARTIAL_ELVEN_THINBLADE)
+ GetHasFeat(FEAT_VILE_MARTIAL_ELVEN_COURTBLADE)
+ GetHasFeat(FEAT_APOSTATE, oPC)
+ GetHasFeat(FEAT_DARK_WHISPERS, oPC)
+ GetHasFeat(FEAT_MASTERS_WILL, oPC)

View File

@ -115,6 +115,7 @@ void main()
{
// And now we can grab them
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()
{
int nSpellID = PRCGetSpellId();
}
object oUser = OBJECT_SELF;
int nPower = GetLocalInt(oUser, "PRC_PowerAttack_Level");
// The PRC Power Attack must be active for this to do anything
if(GetPRCSwitch(PRC_POWER_ATTACK) == PRC_POWER_ATTACK_DISABLED)
return;
// Get the old Power Attack, if any
int nOld = GetLocalInt(oUser, "PRC_PowerAttackSpellID");
// Remove effects from it
if(nOld)
{
PRCRemoveSpellEffects(nOld, oUser, oUser);
DeleteLocalInt(oUser, "PRC_PowerAttackSpellID");
DeleteLocalInt(oUser, "PRC_PowerAttack_DamageBonus");
}
// Activate Power Attack if the new value is non-zero
if(nPower)
{
// Requires the appropriate BW PA feat.
if(!GetHasFeat(FEAT_POWER_ATTACK))
{
FloatingTextStrRefOnCreature(16823148, oUser, FALSE); //Prereq: Power Attack feat
return;
}
if(nPower > 5 && // If the power attack is in BW IPA range
!GetHasFeat(FEAT_IMPROVED_POWER_ATTACK) && // And they don't have IPA
GetPRCSwitch(PRC_POWER_ATTACK) != PRC_POWER_ATTACK_FULL_PNP) // And full PnP PA, which ignores BW IPA isn't active
{
FloatingTextStrRefOnCreature(16823149, oUser, FALSE); // Prereq: Improved Power Attack feat
return;
}
// This script is for the melee weapon PA. If Power Shot is implemented using the same script
// at some future date, change this.
object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oUser);
int nBase = GetBaseItemType(oWeapon);
int nThrow = FALSE;
if (GetIsThrowingWeaponType(nBase) && GetHasFeat(FEAT_POWER_THROW, oUser)) nThrow = TRUE; // Power throw allows power attacking with throwing weapons
if(GetWeaponRanged(oWeapon) && !nThrow)
{
FloatingTextStrRefOnCreature(16823150, oUser, FALSE); // You may not use this feat with a ranged weapon.
return;
}
// All checks are done, initialize variables for calculating the effect.
int nDamageBonusType = GetDamageTypeOfWeapon(INVENTORY_SLOT_RIGHTHAND, oUser);
if(GetLocalInt(oUser, "DragonFireAssOn")) nDamageBonusType = GetDragonfireDamageType(oUser);
int nDmg, nHit, nDex, nTemp;
effect eDamage;
effect eToHit;
// Initialize the calculation with the power attack value given by the user.
nHit = nPower;
// Check if we are set to care about BW power attack being active
if(GetPRCSwitch(PRC_POWER_ATTACK_STACK_WITH_BW))
{
nTemp += GetActionMode(oUser, ACTION_MODE_POWER_ATTACK) ? 5 : 0;
nTemp += GetActionMode(oUser, ACTION_MODE_IMPROVED_POWER_ATTACK) ? 10 : 0;
}
// The attack bonus paid to PA is limited to one's BAB
if(GetBaseAttackBonus(oUser) < (nHit + nTemp))
{
nHit = GetBaseAttackBonus(oUser) - ((GetActionMode(oUser, ACTION_MODE_POWER_ATTACK) ? 5 : 0) +
(GetActionMode(oUser, ACTION_MODE_IMPROVED_POWER_ATTACK ? 10 : 0)));
if(nHit < 0) nHit = 0;
FloatingTextStrRefOnCreature(16823151, oUser, FALSE); // Your base attack bonus isn't high enough to pay for chosen Power Attack level.
}
// Focused Strike adds Dex mod to damage, limited to number of AB paid.
if(GetHasFeat(FEAT_FOCUSED_STRIKE))
{
// Negative Dex mod won't reduce damage
nDex = GetAbilityModifier(ABILITY_DEXTERITY) > 0 ? GetAbilityModifier(ABILITY_DEXTERITY) : 0;
if(nDex > nHit) nDex = nHit;
}
// Calculate in Frenzied Berserker PA feats
nTemp = GetHasFeat(FEAT_SUPREME_POWER_ATTACK, oUser) ? nHit * 2 :
GetHasFeat(FEAT_FREBZK_IMPROVED_POWER_ATTACK, oUser) ? FloatToInt(1.5 * nHit) :
nHit;
// Calculate the damage. Supreme Power Attack doubles the damage
nDmg = BonusAtk(nTemp + nDex + GetEssentiaInvestedFeat(oUser, FEAT_COBALT_POWER));
eDamage = EffectDamageIncrease(nDmg, nDamageBonusType);
eToHit = EffectAttackDecrease(nHit);
effect eLink = ExtraordinaryEffect(EffectLinkEffects(eDamage, eToHit));
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oUser);
// Cache the spellid of the power attack used. Also acts as a marker
//SetLocalInt(oUser, "PRC_PowerAttackSpellID", PRCGetSpellId());
SetLocalInt(oUser, "PRC_PowerAttackSpellID", SPELL_NUI_POWER_ATTACK);
// Cache the amount of damage granted. This is used by the PRC combat engine
SetLocalInt(oUser, "PRC_PowerAttack_DamageBonus", nDmg);
// Add an eventscript that makes sure the PC does not use a ranged weapon with Power Attack
AddEventScript(oUser, EVENT_ONPLAYEREQUIPITEM, "prc_powatk_equ", TRUE, FALSE);
// Power Attack Activated
string sMes = "*" + GetStringByStrRef(417) + " " + IntToString(nHit) + " " + GetStringByStrRef(63798) + "*";
FloatingTextStringOnCreature(sMes, oUser, FALSE);
if (GetHasFeat(FEAT_FAVORED_POWER_ATTACK, oUser))
{
ActionCastSpellAtObject(SPELL_UR_FAVORITE_ENEMY, oUser, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
}
}
// Turn Power Attack off
else
{
RemoveEventScript(oUser, EVENT_ONPLAYEREQUIPITEM, "prc_powatk_equ", TRUE);
// Power Attack Mode Deactivated
string sMes = "* " + GetStringByStrRef(58282) + " *";
FloatingTextStringOnCreature(sMes, oUser, FALSE);
if(GetHasFeat(FEAT_FAVORED_POWER_ATTACK, oUser))
{
ActionCastSpellAtObject(SPELL_UR_FAVORITE_ENEMY, oUser, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
}
}
}

View File

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

View File

@ -67,6 +67,13 @@ void main()
return;
}
//can't stack Starmantels
if (GetHasSpellEffect(SPELL_STARMANTLE, oPC))
{
PRCRemoveSpellEffects(SPELL_STARMANTLE, OBJECT_SELF, OBJECT_SELF);
RemoveEventScript(oTarget, EVENT_ONHIT, "prc_evnt_strmtl", TRUE, FALSE);
}
//VFX
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_SANCTUARY), oTarget, fDur);

View File

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

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.
Racial Traits:
- A aranea's base land speed is 50 feet in spider form, 30 in hybrid or humanoid forms.
- An aranea's base land speed is 50 feet in spider form, 30 in hybrid or humanoid forms.
- Racial Hit Dice: An aranea begins with three levels of shapechanger, which provide 3d8 Hit Dice.
- Medium: As Medium creatures, aranea have no special bonuses or penalties due to their size.
- Natural Weapons: An aranea can bite 1d6 points of damage in spider &amp; hybrid form.
- 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:
Sneak Attack: The epic Umbral Disciple's sneak attack continues to increase by 1d6 every 3 levels.
Meldshaping: Increases as if gaining a level in your meldshaper class at each level.
Epic Umbral Disciple Bonus Feat List:
Armor Skin, Blinding Speed, Bonus Soulmeld, Epic Dodge, Epic Energy Resistance, Epic Essentia, Epic Prowess, Epic Reflexes, Epic Reputation, Epic Self-Concealment, Epic Skill Focus, Epic Superior Initiative, Epic Weapon Focus, Extra Chakra Bind, Great Dexterity, Improved Sneak Attack, Lingering Damage, Open Heart Chakra, Open Soul Chakra, Rapid Meldshaping, Rebind Soulmeld.</entry>

View File

@ -27,7 +27,10 @@ void SetPowerAttack();
//
void main()
{
int amount = GetLocalInt(OBJECT_SELF, "PRC_PowerAttack_Level");
ExecuteScript("prc_nui_pwrattk");
/* int amount = GetLocalInt(OBJECT_SELF, "PRC_PowerAttack_Level");
int prevPowerAttack5 = GetLocalInt(OBJECT_SELF, "prevPowerAttack5");
int prevPowerAttack1 = GetLocalInt(OBJECT_SELF, "prevPowerAttack1");
int powerAttack5Amount = amount / 5;
@ -89,4 +92,5 @@ void main()
}
SetLocalInt(OBJECT_SELF, "prevPowerAttack1", powerAttack1Amount);
}
}
*/
}

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