7 Commits
v4.79 ... 4.80

Author SHA1 Message Date
Jaysyn904
a1248f389f 2026/01/14 Later update
Rage Mage wasn't getting the correct number of uses of Spell Rage at 5th lvl.
2026-01-14 23:34:26 -05:00
Jaysyn904
81e7e1efdf 2026/01/14 Late update
Soul Eater abilities should only work on creatures.
Gated errant Debug statement in prc_inc_nat_hb.nss
2026-01-14 23:27:19 -05:00
Jaysyn904
c619766db3 2026/01/14 Update
Added 3 starting packages for Crusaders.
Fixed Identify, Psionic.
Added PRC switch to show SR roll info in the combat log.
Soul Eater's wights keep their original appearance and portrait.
2026-01-14 22:49:37 -05:00
Jaysyn904
06931be120 2026/01/12 Late Update
Hexblade doesn't get Shield proficency.
Forsaker gets Craft (Alchemy) and Craft (Poison) as class skills.
Forsaker can use default helms now.
Forsaker can use arms & armor made from special materials.
Fixed Dread Necromancer Spirit Worm TLK error.
Disabled AI Talent for Awesome Blow.
Fixed Warlock + Battlecaster ASF w/ Chain Shirt.
Add Material and Quality itemprops to special material crafting.
Fixed bug where breaking concentration can screw up next manifestation due to variables not being cleared.
Tweaked Defensive Manifestation.
Hexblades can't cast in heavy armor.
+1 Attack Bonus from Masterwork is removed after enchantment to +1.
Fixed issue where Forsaker's Ability Boost would stack with each login.
Tweaked Celebrant of Sharess TLK entry.
Tweaked Soulblade Warrior TLK entry.
Tweaked Vow of Poverty's TLK entry.
2026-01-14 00:12:38 -05:00
Jaysyn904
2961d49e7d 2026/01/12 Update 2
Fixed Hidden Talent.
Potions are usable w/ Tenser's Transformation.
Defaulted to Fire damage for Dragon breath.
Corrected Dragonfire Channeling TLK entry.
2026-01-12 20:12:40 -05:00
Jaysyn904
11a75d23c9 2026/01/12 Update
Gated DEBUG text in unarmed_caller.nss
Added feat constants for the Combat Focus line of feats.
Fixed & tested Fey + PrC spellcasting durations and the caster level returned for templates.
2026-01-12 12:09:37 -05:00
Jaysyn904
a192bca40e 2026/01/11 Update
Updated PRC8 version.
Added EffectIcon for EFFECT_ICON_FATIGUE to PRCEffectFatigue.
Fixed Midnight Augmentation to display all known powers as well as display radial powers.
Draconic Senses now grants all of the abilities that it should. (Lowlight Vision, Darkvision, Ultravision).
2026-01-11 20:41:16 -05:00
52 changed files with 2453 additions and 1050 deletions

View File

@@ -235,7 +235,7 @@
231 BrimstoneSpeaker 16790715 16827554 16827555 16827556 16827557 IR_BRIMSTONE 8 CLS_ATK_2 CLS_FEAT_BRIMST CLS_SAVTHR_CLER CLS_SKILL_BRIMST CLS_BFEAT_BRIMST 2 **** **** 1 0 12 16 14 8 14 12 WIS 0X11 0X2 0 CLASS_TYPE_BRIMSTONE_SPEAKER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_BRIMST 40 0 0 2 10 2 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
232 Shugenja **** 16825142 16825143 16825144 16825145 IR_HNSHN 6 CLS_ATK_3 CLS_FEAT_SHUGEN CLS_SAVTHR_WIZ CLS_SKILL_SHUGEN CLS_BFEAT_SHUGEN 4 **** **** 0 0 10 14 14 10 12 16 CHA 0X00 0X0 0 CLASS_TYPE_SHUGENJA 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SHUGEN 0 1 0 0 -1 0 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
233 Sohei 16790716 16827429 16827430 16827431 16827432 IR_FIGHTER 10 CLS_ATK_2 CLS_FEAT_SOHEI CLS_SAVTHR_CLER CLS_SKILL_SOHEI CLS_BFEAT_SOHEI 2 CLS_SPGN_SOHEI **** 1 1 16 10 13 14 13 10 STR 0X05 0X1 0 CLASS_TYPE_SOHEI 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SOHEI 0 1 0 0 -1 6 0 **** 1 0 0 0 0 0 0 WIS Sohei 1 4 255 0 0
234 Crusader 16790717 16829702 16829703 16829704 16829705 IR_CRUSADER 10 CLS_ATK_1 CLS_FEAT_CRUSDR CLS_SAVTHR_FIGHT CLS_SKILL_CRUSDR CLS_BFEAT_CRUSDR 4 **** **** 1 0 16 14 14 10 12 10 STR 0X1E 0X3 1 CLASS_TYPE_CRUSADER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_CRUSDR 0 1 0 0 -1 6 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
234 Crusader 16790717 16829702 16829703 16829704 16829705 IR_CRUSADER 10 CLS_ATK_1 CLS_FEAT_CRUSDR CLS_SAVTHR_FIGHT CLS_SKILL_CRUSDR CLS_BFEAT_CRUSDR 4 **** **** 1 0 16 14 14 10 12 10 STR 0X1E 0X3 1 CLASS_TYPE_CRUSADER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_CRUSDR 0 1 0 0 -1 715 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
235 Swordsage 16790718 16829706 16829707 16829708 16829709 IR_MONK 8 CLS_ATK_2 CLS_FEAT_SWDSGE CLS_SAVTHR_BARD CLS_SKILL_SWDSGE CLS_BFEAT_SWDSGE 6 **** **** 1 0 16 14 14 10 12 10 STR 0X00 0X0 0 CLASS_TYPE_SWORDSAGE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SWDSGE 0 1 0 0 -1 5 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
236 Warblade 16790719 16829710 16829711 16829712 16829713 IR_FIGHTER 12 CLS_ATK_1 CLS_FEAT_WARBLD CLS_SAVTHR_FIGHT CLS_SKILL_WARBLD CLS_BFEAT_WARBLD 4 **** **** 1 0 16 14 14 10 12 10 STR 0X00 0X0 0 CLASS_TYPE_WARBLADE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WARBLD 0 1 0 0 -1 5 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
237 Warmage 16790720 16827604 16827605 16827606 16827607 IR_HAVOCMAGE 6 CLS_ATK_3 CLS_FEAT_WRMAGE CLS_SAVTHR_WIZ CLS_SKILL_WRMAGE CLS_BFEAT_WRMAGE 2 CLS_SPGN_WRMAGE CLS_SPKN_WRMAGE 1 1 10 14 12 10 14 16 INT 0X00 0X0 0 CLASS_TYPE_WARMAGE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WRMAGE 0 1 0 0 -1 10 130 **** **** **** **** **** **** **** **** **** Warmage **** **** **** **** ****

View File

@@ -102,7 +102,7 @@
98 WP_Falchion 7943 3 1 0
99 WP_Maul 7947 3 1 0
100 ArmProfLgt 3 3 1 0
101 Shield 32 3 1 0
101 Shield 32 0 0 0
102 DefArrow 8 0 -1 0
103 TwoWeap 41 0 -1 0
104 Ambidex 1 0 -1 0

View File

@@ -30,8 +30,8 @@
26 Sense_Motive 30 1
27 Balance 32 0
28 IaijutsuFocus 33 0
29 CraftAlchemy 34 0
30 CraftPoison 35 0
29 CraftAlchemy 34 1
30 CraftPoison 35 1
31 Psicraft 36 0
32 Climb 37 1
33 CraftGeneral 38 1

View File

@@ -2341,7 +2341,7 @@
2337 Skarn_Spines **** 1 1 1 9 0
2338 ScorpionsGrasp **** 1 1 1 9 0
2339 CultistShatteredPeak_SmiteMage **** 1 1 1 **** 0
2340 AwesomeBlow **** 1 1 1 **** 0
2340 AwesomeBlow **** 1 1 1 3 0
2341 BloodedOne_War_Cry **** 1 1 1 4 0
2342 Desecrate **** 1 1 1 2 0
2343 BlastOfForce **** 1 1 1 2 0
@@ -14077,7 +14077,7 @@
14073 EnergyStun_Elec **** 1 1 1 2 0
14074 EnergyStun_Fire **** 1 1 1 2 0
14075 EnergyStun_Sonic **** 1 1 1 2 0
14076 Identify **** 1 1 1 2 0
14076 Identify **** 1 1 1 2 1
14077 IdInsinuation **** 1 1 1 2 0
14078 InflictPain **** 1 1 1 2 0
14079 Knock **** 1 1 1 2 0

View File

@@ -5371,7 +5371,7 @@
5367 VremyonniTraining 16789650 16789651 ife_sk_mast **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 **** **** **** **** **** 0 1
5368 CultistShatteredPeak_SmiteMage 16789658 16789659 ife_X1ADAbj **** **** **** **** **** **** **** **** **** **** 0 0 **** **** **** 2339 **** 0.5 1 **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
5369 Forsaker_FastHealing 16824830 16847615 ife_divineheal **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3913 **** 1 1 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
5370 AwesomeBlow 16833142 16833143 ife_wepspec_Bax **** 25 **** **** **** **** **** **** 2806 28 0 0 1 22 1 2340 **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
5370 AwesomeBlow 16833142 16833143 ife_wepspec_Bax **** 25 **** **** **** **** **** **** 2806 28 0 0 1 **** 6 2340 **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_AWESOME_BLOW 6 1 **** **** **** **** 0 1
5371 OversizedTWF 16790149 16790150 ife_twoweap **** 13 **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 0.5 **** **** **** 41 374 **** **** **** **** **** **** **** FEAT_OTWF 6 1 **** **** **** **** 0 1
5372 FrostFolk_IceBlast 16790167 16790168 is_ConeCold **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3802 **** 1 -1 **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
5373 Uldra_RayFrost 894 6238 is_RayFrost **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3804 **** 1 3 **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
@@ -13248,7 +13248,7 @@
13244 DreadNecromancer_Necrotic_Termination 16841609 16829213 is_Nec_Term **** **** **** **** **** **** **** **** **** **** **** **** **** 3 **** 7973 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
13245 DreadNecromancer_PlagueOfUndead 16841610 16847585 is_AnimDead **** **** **** **** **** **** **** **** **** **** **** **** **** 15 **** 7974 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
13246 DreadNecromancer_Wail_of_the_Banshee 16841611 6521 is_WailBansh **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** 7975 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
13247 DreadNecromancer_Spirit_Worm 16841612 is_GhoulTch is_GhoulTch **** **** **** **** **** **** **** **** **** **** **** **** **** 2 **** 7976 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
13247 DreadNecromancer_Spirit_Worm 16841612 16990523 is_GhoulTch **** **** **** **** **** **** **** **** **** **** **** **** **** 2 **** 7976 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
13248 ****_Inflict_Minor_Wounds 16841613 1570 is_X1InfMin **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 7977 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
13249 ****_Light 16841614 6197 is_Light **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 7978 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
13250 ****_Read_Magic 16841615 16789529 is_ReadMagic **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 7979 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0

View File

@@ -716,9 +716,9 @@
712 Binder_SecondRank 16988641 16988642 43 STR 25 **** **** **** **** **** packftbind3 packskbind3 packeqbind3 0 1
713 Binder4 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
714 Binder5 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
715 Crusader1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
716 Crusader2 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
717 Crusader3 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
715 Crusader_Default 16988647 16988648 234 CHA 15 **** **** **** **** **** packftcrsdr1 packskcrsdr1 packeqcrsdr1 0 1
716 Crusader_Defender 16988649 16988650 234 CON 15 **** **** **** **** **** packftcrsdr2 packskcrsdr2 packeqcrsdr2 0 1
717 Crusader_Striker 16988651 16988652 234 STR 25 **** **** **** **** **** packftcrsdr3 packskcrsdr3 packeqcrsdr3 0 1
718 Crusader4 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
719 Crusader5 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
720 DragonFireAdept1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****

View File

@@ -2341,7 +2341,7 @@
2337 Skarn_Spines 16833164 ife_mastelem T P 0 **** 0x01 race_skarn_spine **** **** **** **** **** **** 9 0 head **** vco_smhanevil01 **** sco_mehannatr01 vs_chant_ench_lm vs_chant_ench_lf self 0 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 10 **** 3 **** 0 0 **** 0 3000 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
2338 ScorpionsGrasp 16836466 ife_mastelem T P 0 **** 0x01 prc_ft_scorpgrsp **** **** **** **** **** **** 9 0 head **** vco_smhanevil01 **** sco_mehannatr01 vs_chant_ench_lm vs_chant_ench_lf self 0 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 10 **** 3 **** 0 0 **** 0 3000 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
2339 CultistShatteredPeak_SmiteMage 16789658 ife_wepspec_Bax V T 0 **** 0x02 prc_peak_smitemg **** **** **** **** **** **** **** 0 **** **** **** **** **** **** **** **** 0 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** 3 **** 3 **** 0 0 **** 1 3991 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
2340 AwesomeBlow 16833142 ife_wepspec_Bax V T 0 **** 0x02 prc_ft_aweblow **** **** **** **** **** **** **** 0 **** **** **** **** **** **** **** **** 0 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** 3 **** 3 **** 0 0 **** 1 3991 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
2340 AwesomeBlow 16833142 ife_wepspec_Bax V T 0 **** 0x02 prc_ft_aweblow **** **** **** **** **** **** 3 0 **** **** **** **** **** **** **** **** 0 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** 3 **** 3 **** 0 0 **** 1 5370 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
2341 BloodedOne_War_Cry 6339 is_WarCry E P 0 **** 0x09 tmp_blooded_cry **** **** **** **** **** **** 4 1500 hand **** vco_mehansonc02 **** sco_mehansonc02 vs_chant_ench_lm vs_chant_ench_lf out 1000 **** **** **** **** 0 **** **** **** **** **** **** 0 **** **** **** **** **** 1 **** 1 6539 1 0 **** 0 **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
2342 Desecrate 16838054 is_PrEvil E S v 0x3a 0x3f sp_desecrate **** 2 **** **** **** **** 2 1500 hand **** **** **** **** **** **** out 500 **** vco_gazemind **** c_archlant_bat1 0 **** **** **** **** **** **** 0 **** **** **** **** **** 2 **** 1 16838055 0 0 **** 0 **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** 3 **** **** ****
2343 BlastOfForce 16838078 is_MagMiss V M vs 0x3d 0x3A sp_blastfrc **** **** **** **** **** 2 2 1500 hand **** vco_mehansonc01 **** sco_mehansonc01 vs_chant_evoc_lm vs_chant_evoc_lf area 1000 **** **** **** **** 0 **** **** **** **** **** **** 1 **** **** **** **** **** 11 **** 1 16838079 1 0 **** 1 **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****

View File

@@ -0,0 +1,13 @@
2DA V2.0
Label Name
0 NW_WSWLS001 Longsword
1 NW_AARCL003 Scale_Mail_4AC
2 NW_ASHLW001 Large_Shield_2AC
3 NW_WBWSH001 Shortbow
4 NW_WAMAR001 Arrows
5 NW_WAMAR001 Arrows
6 NW_IT_TORCH001 Torch
7 NW_IT_MEDKIT001 Healer's_Kit_+1
8 NW_IT_MEDKIT001 Healer's_Kit_+1
9 NW_IT_MEDKIT001 Healer's_Kit_+1

View File

@@ -0,0 +1,13 @@
2DA V2.0
Label Name
0 PRC_WXBLMH001 HeavyMace_1d8
1 NW_AARCL003 Scale_Mail_4AC
2 NW_ASHLW001 Large_Shield_2AC
3 NW_WBWSL001 Sling
4 NW_WAMBU001 Bullets
5 NW_WAMBU001 Bullets
6 NW_IT_TORCH001 Torch
7 NW_IT_MEDKIT001 Healer's_Kit_+1
8 NW_IT_MEDKIT001 Healer's_Kit_+1
9 NW_IT_MEDKIT001 Healer's_Kit_+1

View File

@@ -0,0 +1,10 @@
2DA V2.0
Label Name
0 NW_WSWGS001 Greatsword
1 NW_AARCL003 Scale_Mail_4AC
2 NW_WTHAX001 "Throwing Axes"
3 NW_IT_TORCH001 Torch
4 NW_IT_MEDKIT001 Healer's_Kit_+1
5 NW_IT_MEDKIT001 Healer's_Kit_+1
6 NW_IT_MEDKIT001 Healer's_Kit_+1

View File

@@ -0,0 +1,387 @@
2DA V2.0
FeatIndex Label
0 636 FEAT_EPIC_WEAPON_FOCUS_LONGSWORD
1 674 FEAT_EPIC_WEAPON_SPECIALIZATION_LONGSWORD
2 584 FEAT_EPIC_PROWESS
3 490 FEAT_EPIC_ARMOR_SKIN
4 24613 FEAT_EPIC_WEAPON_FOCUS_LANCE
5 657 FEAT_EPIC_WEAPON_SPECIALIZATION_CLUB
6 658 FEAT_EPIC_WEAPON_SPECIALIZATION_DAGGER
7 659 FEAT_EPIC_WEAPON_SPECIALIZATION_DART
8 660 FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVYCROSSBOW
9 661 FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTCROSSBOW
10 662 FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTMACE
11 663 FEAT_EPIC_WEAPON_SPECIALIZATION_MORNINGSTAR
12 664 FEAT_EPIC_WEAPON_SPECIALIZATION_QUARTERSTAFF
13 665 FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTSPEAR
14 666 FEAT_EPIC_WEAPON_SPECIALIZATION_SICKLE
15 667 FEAT_EPIC_WEAPON_SPECIALIZATION_SLING
16 668 FEAT_EPIC_WEAPON_SPECIALIZATION_UNARMED
17 669 FEAT_EPIC_WEAPON_SPECIALIZATION_LONGBOW
18 670 FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTBOW
19 671 FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTSWORD
20 672 FEAT_EPIC_WEAPON_SPECIALIZATION_RAPIER
21 673 FEAT_EPIC_WEAPON_SPECIALIZATION_SCIMITAR
22 675 FEAT_EPIC_WEAPON_SPECIALIZATION_GREATSWORD
23 676 FEAT_EPIC_WEAPON_SPECIALIZATION_HANDAXE
24 677 FEAT_EPIC_WEAPON_SPECIALIZATION_THROWINGAXE
25 678 FEAT_EPIC_WEAPON_SPECIALIZATION_BATTLEAXE
26 679 FEAT_EPIC_WEAPON_SPECIALIZATION_GREATAXE
27 680 FEAT_EPIC_WEAPON_SPECIALIZATION_HALBERD
28 681 FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTHAMMER
29 682 FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTFLAIL
30 683 FEAT_EPIC_WEAPON_SPECIALIZATION_WARHAMMER
31 684 FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVYFLAIL
32 685 FEAT_EPIC_WEAPON_SPECIALIZATION_KAMA
33 686 FEAT_EPIC_WEAPON_SPECIALIZATION_KUKRI
34 687 FEAT_EPIC_WEAPON_SPECIALIZATION_SHURIKEN
35 688 FEAT_EPIC_WEAPON_SPECIALIZATION_SCYTHE
36 689 FEAT_EPIC_WEAPON_SPECIALIZATION_KATANA
37 690 FEAT_EPIC_WEAPON_SPECIALIZATION_BASTARDSWORD
38 691 FEAT_EPIC_WEAPON_SPECIALIZATION_DIREMACE
39 692 FEAT_EPIC_WEAPON_SPECIALIZATION_DOUBLEAXE
40 693 FEAT_EPIC_WEAPON_SPECIALIZATION_TWOBLADEDSWORD
41 1077 FEAT_EPIC_WEAPON_SPECIALIZATION_TRIDENT
42 619 FEAT_EPIC_WEAPON_FOCUS_CLUB
43 620 FEAT_EPIC_WEAPON_FOCUS_DAGGER
44 621 FEAT_EPIC_WEAPON_FOCUS_DART
45 622 FEAT_EPIC_WEAPON_FOCUS_HEAVYCROSSBOW
46 623 FEAT_EPIC_WEAPON_FOCUS_LIGHTCROSSBOW
47 624 FEAT_EPIC_WEAPON_FOCUS_LIGHTMACE
48 625 FEAT_EPIC_WEAPON_FOCUS_MORNINGSTAR
49 626 FEAT_EPIC_WEAPON_FOCUS_QUARTERSTAFF
50 627 FEAT_EPIC_WEAPON_FOCUS_SHORTSPEAR
51 628 FEAT_EPIC_WEAPON_FOCUS_SICKLE
52 629 FEAT_EPIC_WEAPON_FOCUS_SLING
53 630 FEAT_EPIC_WEAPON_FOCUS_UNARMED
54 631 FEAT_EPIC_WEAPON_FOCUS_LONGBOW
55 632 FEAT_EPIC_WEAPON_FOCUS_SHORTBOW
56 633 FEAT_EPIC_WEAPON_FOCUS_SHORTSWORD
57 634 FEAT_EPIC_WEAPON_FOCUS_RAPIER
58 635 FEAT_EPIC_WEAPON_FOCUS_SCIMITAR
59 637 FEAT_EPIC_WEAPON_FOCUS_GREATSWORD
60 638 FEAT_EPIC_WEAPON_FOCUS_HANDAXE
61 639 FEAT_EPIC_WEAPON_FOCUS_THROWINGAXE
62 640 FEAT_EPIC_WEAPON_FOCUS_BATTLEAXE
63 641 FEAT_EPIC_WEAPON_FOCUS_GREATAXE
64 642 FEAT_EPIC_WEAPON_FOCUS_HALBERD
65 643 FEAT_EPIC_WEAPON_FOCUS_LIGHTHAMMER
66 644 FEAT_EPIC_WEAPON_FOCUS_LIGHTFLAIL
67 645 FEAT_EPIC_WEAPON_FOCUS_WARHAMMER
68 646 FEAT_EPIC_WEAPON_FOCUS_HEAVYFLAIL
69 647 FEAT_EPIC_WEAPON_FOCUS_KAMA
70 648 FEAT_EPIC_WEAPON_FOCUS_KUKRI
71 649 FEAT_EPIC_WEAPON_FOCUS_SHURIKEN
72 650 FEAT_EPIC_WEAPON_FOCUS_SCYTHE
73 651 FEAT_EPIC_WEAPON_FOCUS_KATANA
74 652 FEAT_EPIC_WEAPON_FOCUS_BASTARDSWORD
75 653 FEAT_EPIC_WEAPON_FOCUS_DIREMACE
76 654 FEAT_EPIC_WEAPON_FOCUS_DOUBLEAXE
77 655 FEAT_EPIC_WEAPON_FOCUS_TWOBLADEDSWORD
78 1076 FEAT_EPIC_WEAPON_FOCUS_TRIDENT
79 726 FEAT_EPIC_OVERWHELMING_CRITICAL_LONGSWORD
80 709 FEAT_EPIC_OVERWHELMING_CRITICAL_CLUB
81 710 FEAT_EPIC_OVERWHELMING_CRITICAL_DAGGER
82 711 FEAT_EPIC_OVERWHELMING_CRITICAL_DART
83 712 FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVYCROSSBOW
84 713 FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTCROSSBOW
85 714 FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTMACE
86 715 FEAT_EPIC_OVERWHELMING_CRITICAL_MORNINGSTAR
87 716 FEAT_EPIC_OVERWHELMING_CRITICAL_QUARTERSTAFF
88 717 FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTSPEAR
89 718 FEAT_EPIC_OVERWHELMING_CRITICAL_SICKLE
90 719 FEAT_EPIC_OVERWHELMING_CRITICAL_SLING
91 720 FEAT_EPIC_OVERWHELMING_CRITICAL_UNARMED
92 721 FEAT_EPIC_OVERWHELMING_CRITICAL_LONGBOW
93 722 FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTBOW
94 723 FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTSWORD
95 724 FEAT_EPIC_OVERWHELMING_CRITICAL_RAPIER
96 725 FEAT_EPIC_OVERWHELMING_CRITICAL_SCIMITAR
97 727 FEAT_EPIC_OVERWHELMING_CRITICAL_GREATSWORD
98 728 FEAT_EPIC_OVERWHELMING_CRITICAL_HANDAXE
99 729 FEAT_EPIC_OVERWHELMING_CRITICAL_THROWINGAXE
100 730 FEAT_EPIC_OVERWHELMING_CRITICAL_BATTLEAXE
101 731 FEAT_EPIC_OVERWHELMING_CRITICAL_GREATAXE
102 732 FEAT_EPIC_OVERWHELMING_CRITICAL_HALBERD
103 733 FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTHAMMER
104 734 FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTFLAIL
105 735 FEAT_EPIC_OVERWHELMING_CRITICAL_WARHAMMER
106 736 FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVYFLAIL
107 737 FEAT_EPIC_OVERWHELMING_CRITICAL_KAMA
108 738 FEAT_EPIC_OVERWHELMING_CRITICAL_KUKRI
109 739 FEAT_EPIC_OVERWHELMING_CRITICAL_SHURIKEN
110 740 FEAT_EPIC_OVERWHELMING_CRITICAL_SCYTHE
111 741 FEAT_EPIC_OVERWHELMING_CRITICAL_KATANA
112 742 FEAT_EPIC_OVERWHELMING_CRITICAL_BASTARDSWORD
113 743 FEAT_EPIC_OVERWHELMING_CRITICAL_DIREMACE
114 744 FEAT_EPIC_OVERWHELMING_CRITICAL_DOUBLEAXE
115 745 FEAT_EPIC_OVERWHELMING_CRITICAL_TWOBLADEDSWORD
116 1078 FEAT_EPIC_OVERWHELMING_CRITICAL_TRIDENT
117 495 FEAT_EPIC_DEVASTATING_CRITICAL_CLUB
118 496 FEAT_EPIC_DEVASTATING_CRITICAL_DAGGER
119 497 FEAT_EPIC_DEVASTATING_CRITICAL_DART
120 498 FEAT_EPIC_DEVASTATING_CRITICAL_HEAVYCROSSBOW
121 499 FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTCROSSBOW
122 500 FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTMACE
123 501 FEAT_EPIC_DEVASTATING_CRITICAL_MORNINGSTAR
124 502 FEAT_EPIC_DEVASTATING_CRITICAL_QUARTERSTAFF
125 503 FEAT_EPIC_DEVASTATING_CRITICAL_SHORTSPEAR
126 504 FEAT_EPIC_DEVASTATING_CRITICAL_SICKLE
127 505 FEAT_EPIC_DEVASTATING_CRITICAL_SLING
128 506 FEAT_EPIC_DEVASTATING_CRITICAL_UNARMED
129 507 FEAT_EPIC_DEVASTATING_CRITICAL_LONGBOW
130 508 FEAT_EPIC_DEVASTATING_CRITICAL_SHORTBOW
131 509 FEAT_EPIC_DEVASTATING_CRITICAL_SHORTSWORD
132 510 FEAT_EPIC_DEVASTATING_CRITICAL_RAPIER
133 511 FEAT_EPIC_DEVASTATING_CRITICAL_SCIMITAR
134 512 FEAT_EPIC_DEVASTATING_CRITICAL_LONGSWORD
135 513 FEAT_EPIC_DEVASTATING_CRITICAL_GREATSWORD
136 514 FEAT_EPIC_DEVASTATING_CRITICAL_HANDAXE
137 515 FEAT_EPIC_DEVASTATING_CRITICAL_THROWINGAXE
138 516 FEAT_EPIC_DEVASTATING_CRITICAL_BATTLEAXE
139 517 FEAT_EPIC_DEVASTATING_CRITICAL_GREATAXE
140 518 FEAT_EPIC_DEVASTATING_CRITICAL_HALBERD
141 519 FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTHAMMER
142 520 FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTFLAIL
143 521 FEAT_EPIC_DEVASTATING_CRITICAL_WARHAMMER
144 522 FEAT_EPIC_DEVASTATING_CRITICAL_HEAVYFLAIL
145 523 FEAT_EPIC_DEVASTATING_CRITICAL_KAMA
146 524 FEAT_EPIC_DEVASTATING_CRITICAL_KUKRI
147 525 FEAT_EPIC_DEVASTATING_CRITICAL_SHURIKEN
148 526 FEAT_EPIC_DEVASTATING_CRITICAL_SCYTHE
149 527 FEAT_EPIC_DEVASTATING_CRITICAL_KATANA
150 528 FEAT_EPIC_DEVASTATING_CRITICAL_BASTARDSWORD
151 529 FEAT_EPIC_DEVASTATING_CRITICAL_DIREMACE
152 530 FEAT_EPIC_DEVASTATING_CRITICAL_DOUBLEAXE
153 531 FEAT_EPIC_DEVASTATING_CRITICAL_TWOBLADEDSWORD
154 1075 FEAT_EPIC_DEVASTATING_CRITICAL_TRIDENT
155 867 FEAT_WHIRLWIND_ATTACK
156 868 FEAT_IMPROVED_WHIRLWIND
157 814 FEAT_EPIC_GREAT_STRENGTH_1
158 815 FEAT_EPIC_GREAT_STRENGTH_2
159 816 FEAT_EPIC_GREAT_STRENGTH_3
160 491 FEAT_EPIC_BLINDING_SPEED
161 753 FEAT_EPIC_SUPERIOR_INITIATIVE
162 817 FEAT_EPIC_GREAT_STRENGTH_4
163 818 FEAT_EPIC_GREAT_STRENGTH_5
164 819 FEAT_EPIC_GREAT_STRENGTH_6
165 754 FEAT_EPIC_TOUGHNESS_1
166 755 FEAT_EPIC_TOUGHNESS_2
167 756 FEAT_EPIC_TOUGHNESS_3
168 820 FEAT_EPIC_GREAT_STRENGTH_7
169 821 FEAT_EPIC_GREAT_STRENGTH_8
170 822 FEAT_EPIC_GREAT_STRENGTH_9
171 823 FEAT_EPIC_GREAT_STRENGTH_10
172 757 FEAT_EPIC_TOUGHNESS_4
173 758 FEAT_EPIC_TOUGHNESS_5
174 759 FEAT_EPIC_TOUGHNESS_6
175 492 FEAT_EPIC_DAMAGE_REDUCTION_3
176 493 FEAT_EPIC_DAMAGE_REDUCTION_6
177 494 FEAT_EPIC_DAMAGE_REDUCTION_9
178 760 FEAT_EPIC_TOUGHNESS_7
179 761 FEAT_EPIC_TOUGHNESS_8
180 762 FEAT_EPIC_TOUGHNESS_9
181 763 FEAT_EPIC_TOUGHNESS_10
182 695 FEAT_EPIC_WILL
183 774 FEAT_EPIC_GREAT_CONSTITUTION_1
184 775 FEAT_EPIC_GREAT_CONSTITUTION_2
185 776 FEAT_EPIC_GREAT_CONSTITUTION_3
186 777 FEAT_EPIC_GREAT_CONSTITUTION_4
187 778 FEAT_EPIC_GREAT_CONSTITUTION_5
188 779 FEAT_EPIC_GREAT_CONSTITUTION_6
189 780 FEAT_EPIC_GREAT_CONSTITUTION_7
190 781 FEAT_EPIC_GREAT_CONSTITUTION_8
191 782 FEAT_EPIC_GREAT_CONSTITUTION_9
192 783 FEAT_EPIC_GREAT_CONSTITUTION_10
193 784 FEAT_EPIC_GREAT_DEXTERITY_1
194 785 FEAT_EPIC_GREAT_DEXTERITY_2
195 786 FEAT_EPIC_GREAT_DEXTERITY_3
196 787 FEAT_EPIC_GREAT_DEXTERITY_4
197 788 FEAT_EPIC_GREAT_DEXTERITY_5
198 789 FEAT_EPIC_GREAT_DEXTERITY_6
199 790 FEAT_EPIC_GREAT_DEXTERITY_7
200 791 FEAT_EPIC_GREAT_DEXTERITY_8
201 792 FEAT_EPIC_GREAT_DEXTERITY_9
202 793 FEAT_EPIC_GREAT_DEXTERITY_10
203 68 ImpCritLSw
204 144 WeapSpeLSw
205 106 WeapFocLSw
206 22 IronWill
207 3636 VitalRecovery
208 3829 BladeMeditation_DevotedSpirit
209 4096 "Extra Granted Maneuver"
210 4074 WhiteRavenDefense
211 6 Cleave
212 391 GreatCleave
213 28 PowerAtk
214 10 Dodge
215 40 Toughness
216 26 Mobility
217 392 SpringAttack
218 14 GreatFort
219 24 LightngRef
220 389 Expertise
221 408 BlindFight
222 425 DirtyFighting
223 27 PBShot
224 30 RapidShot
225 107 WeapFocGSw
226 69 ImpCritGSw
227 145 WeapSpeGSw
228 1 Ambidex
229 41 TwoWeap
230 16 ImpDis
231 20 ImpTwo
232 390 ImpExpertise
233 0 Alertness
234 42 WeapFinesse
235 32 Shield
236 39 StunFist
237 8 DefArrow
238 427 ResistEnergyCold
239 428 ResistEnergyAcid
240 429 ResistEnergyFire
241 430 ResistEnergyElectrical
242 431 ResistEnergySonic
243 43 WeapFocClub
244 15 ImpCritClub
245 57 ImpCritMorn
246 58 ImpCritStaff
247 59 ImpCritSpear
248 60 ImpCritSickle
249 61 ImpCritSling
250 62 ImpCritUnArm
251 63 ImpCritLongBow
252 64 ImpCritShortBow
253 65 ImpCritShortSwor
254 66 ImpCritRapier
255 67 ImpCritScim
256 70 ImpCritHAxe
257 71 ImpCritTAxe
258 72 ImpCritBAxe
259 73 ImpCritGAxe
260 74 ImpCritHalb
261 75 ImpCritLgHam
262 76 ImpCritLgFlail
263 77 ImpCritWHam
264 78 ImpCritHFlail
265 79 ImpCritKama
266 80 ImpCritKukri
267 82 ImpCritShur
268 83 ImpCritScy
269 84 ImpCritKatana
270 85 ImpCritBSw
271 87 ImpCritDMace
272 88 ImpCritDAxe
273 89 ImpCrit2Sw
274 1074 FEAT_IMPROVED_CRITICAL_TRIDENT
275 90 WeapFocDagger
276 91 WeapFocDart
277 92 WeapFocHXBow
278 24601 FEAT_WEAPON_FOCUS_LIGHT_LANCE
279 93 WeapFocLgXBow
280 94 WeapFocLgMace
281 95 WeapFocMorn
282 96 WeapFocStaff
283 97 WeapFocSpear
284 98 WeapFocSickle
285 99 WeapFocSling
286 100 WeapFocUnArm
287 101 WeapFocLongBow
288 102 WeapFocShortBow
289 103 WeapFocShortSwor
290 104 WeapFocRapier
291 105 WeapFocScim
292 108 WeapFocHAxe
293 109 WeapFocTAxe
294 110 WeapFocBAxe
295 111 WeapFocGAxe
296 112 WeapFocHalb
297 113 WeapFocLgHam
298 114 WeapFocLgFlail
299 115 WeapFocWHam
300 116 WeapFocHFlail
301 117 WeapFocKama
302 118 WeapFocKukri
303 120 WeapFocShur
304 121 WeapFocScy
305 122 WeapFocKatana
306 123 WeapFocBSw
307 125 WeapFocDMace
308 126 WeapFocDAxe
309 127 WeapFoc2Sw
310 24649 FEAT_IMPROVED_CRITICAL_LIGHT_LANCE
311 1087 FEAT_MOUNTED_COMBAT
312 3037 FEAT_SKILL_FOCUS_RIDE
313 1072 FEAT_WEAPON_FOCUS_TRIDENT
314 128 WeapSpeDagger
315 129 WeapSpeDart
316 130 WeapSpeHXBow
317 131 WeapSpeLgXBow
318 132 WeapSpeLgMace
319 133 WeapSpeMorn
320 134 WeapSpeStaff
321 135 WeapSpeSpear
322 136 WeapSpeSickle
323 137 WeapSpeSling
324 138 WeapSpeUnArm
325 139 WeapSpeLongBow
326 140 WeapSpeShortBow
327 141 WeapSpeShortSwor
328 142 WeapSpeRapier
329 143 WeapSpeScim
330 146 WeapSpeHAxe
331 147 WeapSpeTAxe
332 148 WeapSpeBAxe
333 149 WeapSpeGAxe
334 150 WeapSpeHalb
335 151 WeapSpeLgHam
336 152 WeapSpeLgFlail
337 153 WeapSpeWHam
338 154 WeapSpeHFlail
339 155 WeapSpeKama
340 156 WeapSpeKukri
341 158 WeapSpeShur
342 159 WeapSpeScy
343 160 WeapSpeKatana
344 161 WeapSpeBSw
345 163 WeapSpeDMace
346 164 WeapSpeDAxe
347 165 WeapSpe2Sw
348 1073 FEAT_WEAPON_SPECIALIZATION_TRIDENT
349 166 SpellFocusCon
350 167 SpellFocusDiv
351 168 SpellFocusEnc
352 169 SpellFocusEvo
353 170 SpellFocusIll
354 171 SpellFocusNec
355 172 SpellFocusTra
356 173 SkillFocusConc
357 174 SkillFocusDisa
358 175 SkillFocusGrip
359 177 SkillFocusHeal
360 178 SkillFocusHide
361 179 SkillFocusList
362 180 SkillFocusLore
363 181 SkillFocusMove
364 182 SkillFocusOpen
365 184 SkillFocusPerf
366 185 SkillFocusPers
367 186 SkillFocusPick
368 187 SkillFocusSearch
369 188 SkillFocusSet
370 189 SkillFocusSpell
371 190 SkillFocusSpot
372 193 SkillFocusDevi
373 35 SpellFocusAbj
374 36 SpellPen
375 37 StillSpell
376 25 MaxSpell
377 7 CmbtCast
378 29 Quicken
379 34 SkillFocusAnim
380 33 Silent
381 11 Empower
382 12 ExtSpell
383 13 ExtTurn

View File

@@ -0,0 +1,395 @@
2DA V2.0
FeatIndex Label
0 24654 EpicWeaponSpec_HeavyMace
1 24621 EpicWeaponFocus_HeavyMace
2 584 FEAT_EPIC_PROWESS
3 490 FEAT_EPIC_ARMOR_SKIN
4 24613 FEAT_EPIC_WEAPON_FOCUS_LANCE
5 657 FEAT_EPIC_WEAPON_SPECIALIZATION_CLUB
6 658 FEAT_EPIC_WEAPON_SPECIALIZATION_DAGGER
7 659 FEAT_EPIC_WEAPON_SPECIALIZATION_DART
8 660 FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVYCROSSBOW
9 661 FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTCROSSBOW
10 662 FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTMACE
11 663 FEAT_EPIC_WEAPON_SPECIALIZATION_MORNINGSTAR
12 664 FEAT_EPIC_WEAPON_SPECIALIZATION_QUARTERSTAFF
13 665 FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTSPEAR
14 666 FEAT_EPIC_WEAPON_SPECIALIZATION_SICKLE
15 667 FEAT_EPIC_WEAPON_SPECIALIZATION_SLING
16 668 FEAT_EPIC_WEAPON_SPECIALIZATION_UNARMED
17 669 FEAT_EPIC_WEAPON_SPECIALIZATION_LONGBOW
18 670 FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTBOW
19 671 FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTSWORD
20 672 FEAT_EPIC_WEAPON_SPECIALIZATION_RAPIER
21 673 FEAT_EPIC_WEAPON_SPECIALIZATION_SCIMITAR
22 675 FEAT_EPIC_WEAPON_SPECIALIZATION_GREATSWORD
23 676 FEAT_EPIC_WEAPON_SPECIALIZATION_HANDAXE
24 677 FEAT_EPIC_WEAPON_SPECIALIZATION_THROWINGAXE
25 678 FEAT_EPIC_WEAPON_SPECIALIZATION_BATTLEAXE
26 679 FEAT_EPIC_WEAPON_SPECIALIZATION_GREATAXE
27 680 FEAT_EPIC_WEAPON_SPECIALIZATION_HALBERD
28 681 FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTHAMMER
29 682 FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTFLAIL
30 683 FEAT_EPIC_WEAPON_SPECIALIZATION_WARHAMMER
31 684 FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVYFLAIL
32 685 FEAT_EPIC_WEAPON_SPECIALIZATION_KAMA
33 686 FEAT_EPIC_WEAPON_SPECIALIZATION_KUKRI
34 687 FEAT_EPIC_WEAPON_SPECIALIZATION_SHURIKEN
35 688 FEAT_EPIC_WEAPON_SPECIALIZATION_SCYTHE
36 689 FEAT_EPIC_WEAPON_SPECIALIZATION_KATANA
37 690 FEAT_EPIC_WEAPON_SPECIALIZATION_BASTARDSWORD
38 691 FEAT_EPIC_WEAPON_SPECIALIZATION_DIREMACE
39 692 FEAT_EPIC_WEAPON_SPECIALIZATION_DOUBLEAXE
40 693 FEAT_EPIC_WEAPON_SPECIALIZATION_TWOBLADEDSWORD
41 1077 FEAT_EPIC_WEAPON_SPECIALIZATION_TRIDENT
42 636 FEAT_EPIC_WEAPON_FOCUS_LONGSWORD
43 674 FEAT_EPIC_WEAPON_SPECIALIZATION_LONGSWORD
44 619 FEAT_EPIC_WEAPON_FOCUS_CLUB
45 620 FEAT_EPIC_WEAPON_FOCUS_DAGGER
46 621 FEAT_EPIC_WEAPON_FOCUS_DART
47 622 FEAT_EPIC_WEAPON_FOCUS_HEAVYCROSSBOW
48 623 FEAT_EPIC_WEAPON_FOCUS_LIGHTCROSSBOW
49 624 FEAT_EPIC_WEAPON_FOCUS_LIGHTMACE
50 625 FEAT_EPIC_WEAPON_FOCUS_MORNINGSTAR
51 626 FEAT_EPIC_WEAPON_FOCUS_QUARTERSTAFF
52 627 FEAT_EPIC_WEAPON_FOCUS_SHORTSPEAR
53 628 FEAT_EPIC_WEAPON_FOCUS_SICKLE
54 629 FEAT_EPIC_WEAPON_FOCUS_SLING
55 630 FEAT_EPIC_WEAPON_FOCUS_UNARMED
56 631 FEAT_EPIC_WEAPON_FOCUS_LONGBOW
57 632 FEAT_EPIC_WEAPON_FOCUS_SHORTBOW
58 633 FEAT_EPIC_WEAPON_FOCUS_SHORTSWORD
59 634 FEAT_EPIC_WEAPON_FOCUS_RAPIER
60 635 FEAT_EPIC_WEAPON_FOCUS_SCIMITAR
61 637 FEAT_EPIC_WEAPON_FOCUS_GREATSWORD
62 638 FEAT_EPIC_WEAPON_FOCUS_HANDAXE
63 639 FEAT_EPIC_WEAPON_FOCUS_THROWINGAXE
64 640 FEAT_EPIC_WEAPON_FOCUS_BATTLEAXE
65 641 FEAT_EPIC_WEAPON_FOCUS_GREATAXE
66 642 FEAT_EPIC_WEAPON_FOCUS_HALBERD
67 643 FEAT_EPIC_WEAPON_FOCUS_LIGHTHAMMER
68 644 FEAT_EPIC_WEAPON_FOCUS_LIGHTFLAIL
69 645 FEAT_EPIC_WEAPON_FOCUS_WARHAMMER
70 646 FEAT_EPIC_WEAPON_FOCUS_HEAVYFLAIL
71 647 FEAT_EPIC_WEAPON_FOCUS_KAMA
72 648 FEAT_EPIC_WEAPON_FOCUS_KUKRI
73 649 FEAT_EPIC_WEAPON_FOCUS_SHURIKEN
74 650 FEAT_EPIC_WEAPON_FOCUS_SCYTHE
75 651 FEAT_EPIC_WEAPON_FOCUS_KATANA
76 652 FEAT_EPIC_WEAPON_FOCUS_BASTARDSWORD
77 653 FEAT_EPIC_WEAPON_FOCUS_DIREMACE
78 654 FEAT_EPIC_WEAPON_FOCUS_DOUBLEAXE
79 655 FEAT_EPIC_WEAPON_FOCUS_TWOBLADEDSWORD
80 1076 FEAT_EPIC_WEAPON_FOCUS_TRIDENT
81 726 FEAT_EPIC_OVERWHELMING_CRITICAL_LONGSWORD
82 709 FEAT_EPIC_OVERWHELMING_CRITICAL_CLUB
83 710 FEAT_EPIC_OVERWHELMING_CRITICAL_DAGGER
84 711 FEAT_EPIC_OVERWHELMING_CRITICAL_DART
85 712 FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVYCROSSBOW
86 713 FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTCROSSBOW
87 714 FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTMACE
88 715 FEAT_EPIC_OVERWHELMING_CRITICAL_MORNINGSTAR
89 716 FEAT_EPIC_OVERWHELMING_CRITICAL_QUARTERSTAFF
90 717 FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTSPEAR
91 718 FEAT_EPIC_OVERWHELMING_CRITICAL_SICKLE
92 719 FEAT_EPIC_OVERWHELMING_CRITICAL_SLING
93 720 FEAT_EPIC_OVERWHELMING_CRITICAL_UNARMED
94 721 FEAT_EPIC_OVERWHELMING_CRITICAL_LONGBOW
95 722 FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTBOW
96 723 FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTSWORD
97 724 FEAT_EPIC_OVERWHELMING_CRITICAL_RAPIER
98 725 FEAT_EPIC_OVERWHELMING_CRITICAL_SCIMITAR
99 727 FEAT_EPIC_OVERWHELMING_CRITICAL_GREATSWORD
100 728 FEAT_EPIC_OVERWHELMING_CRITICAL_HANDAXE
101 729 FEAT_EPIC_OVERWHELMING_CRITICAL_THROWINGAXE
102 730 FEAT_EPIC_OVERWHELMING_CRITICAL_BATTLEAXE
103 731 FEAT_EPIC_OVERWHELMING_CRITICAL_GREATAXE
104 732 FEAT_EPIC_OVERWHELMING_CRITICAL_HALBERD
105 733 FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTHAMMER
106 734 FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTFLAIL
107 735 FEAT_EPIC_OVERWHELMING_CRITICAL_WARHAMMER
108 736 FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVYFLAIL
109 737 FEAT_EPIC_OVERWHELMING_CRITICAL_KAMA
110 738 FEAT_EPIC_OVERWHELMING_CRITICAL_KUKRI
111 739 FEAT_EPIC_OVERWHELMING_CRITICAL_SHURIKEN
112 740 FEAT_EPIC_OVERWHELMING_CRITICAL_SCYTHE
113 741 FEAT_EPIC_OVERWHELMING_CRITICAL_KATANA
114 742 FEAT_EPIC_OVERWHELMING_CRITICAL_BASTARDSWORD
115 743 FEAT_EPIC_OVERWHELMING_CRITICAL_DIREMACE
116 744 FEAT_EPIC_OVERWHELMING_CRITICAL_DOUBLEAXE
117 745 FEAT_EPIC_OVERWHELMING_CRITICAL_TWOBLADEDSWORD
118 1078 FEAT_EPIC_OVERWHELMING_CRITICAL_TRIDENT
119 495 FEAT_EPIC_DEVASTATING_CRITICAL_CLUB
120 496 FEAT_EPIC_DEVASTATING_CRITICAL_DAGGER
121 497 FEAT_EPIC_DEVASTATING_CRITICAL_DART
122 498 FEAT_EPIC_DEVASTATING_CRITICAL_HEAVYCROSSBOW
123 499 FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTCROSSBOW
124 500 FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTMACE
125 501 FEAT_EPIC_DEVASTATING_CRITICAL_MORNINGSTAR
126 502 FEAT_EPIC_DEVASTATING_CRITICAL_QUARTERSTAFF
127 503 FEAT_EPIC_DEVASTATING_CRITICAL_SHORTSPEAR
128 504 FEAT_EPIC_DEVASTATING_CRITICAL_SICKLE
129 505 FEAT_EPIC_DEVASTATING_CRITICAL_SLING
130 506 FEAT_EPIC_DEVASTATING_CRITICAL_UNARMED
131 507 FEAT_EPIC_DEVASTATING_CRITICAL_LONGBOW
132 508 FEAT_EPIC_DEVASTATING_CRITICAL_SHORTBOW
133 509 FEAT_EPIC_DEVASTATING_CRITICAL_SHORTSWORD
134 510 FEAT_EPIC_DEVASTATING_CRITICAL_RAPIER
135 511 FEAT_EPIC_DEVASTATING_CRITICAL_SCIMITAR
136 512 FEAT_EPIC_DEVASTATING_CRITICAL_LONGSWORD
137 513 FEAT_EPIC_DEVASTATING_CRITICAL_GREATSWORD
138 514 FEAT_EPIC_DEVASTATING_CRITICAL_HANDAXE
139 515 FEAT_EPIC_DEVASTATING_CRITICAL_THROWINGAXE
140 516 FEAT_EPIC_DEVASTATING_CRITICAL_BATTLEAXE
141 517 FEAT_EPIC_DEVASTATING_CRITICAL_GREATAXE
142 518 FEAT_EPIC_DEVASTATING_CRITICAL_HALBERD
143 519 FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTHAMMER
144 520 FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTFLAIL
145 521 FEAT_EPIC_DEVASTATING_CRITICAL_WARHAMMER
146 522 FEAT_EPIC_DEVASTATING_CRITICAL_HEAVYFLAIL
147 523 FEAT_EPIC_DEVASTATING_CRITICAL_KAMA
148 524 FEAT_EPIC_DEVASTATING_CRITICAL_KUKRI
149 525 FEAT_EPIC_DEVASTATING_CRITICAL_SHURIKEN
150 526 FEAT_EPIC_DEVASTATING_CRITICAL_SCYTHE
151 527 FEAT_EPIC_DEVASTATING_CRITICAL_KATANA
152 528 FEAT_EPIC_DEVASTATING_CRITICAL_BASTARDSWORD
153 529 FEAT_EPIC_DEVASTATING_CRITICAL_DIREMACE
154 530 FEAT_EPIC_DEVASTATING_CRITICAL_DOUBLEAXE
155 531 FEAT_EPIC_DEVASTATING_CRITICAL_TWOBLADEDSWORD
156 1075 FEAT_EPIC_DEVASTATING_CRITICAL_TRIDENT
157 867 FEAT_WHIRLWIND_ATTACK
158 868 FEAT_IMPROVED_WHIRLWIND
159 814 FEAT_EPIC_GREAT_STRENGTH_1
160 815 FEAT_EPIC_GREAT_STRENGTH_2
161 816 FEAT_EPIC_GREAT_STRENGTH_3
162 491 FEAT_EPIC_BLINDING_SPEED
163 753 FEAT_EPIC_SUPERIOR_INITIATIVE
164 817 FEAT_EPIC_GREAT_STRENGTH_4
165 818 FEAT_EPIC_GREAT_STRENGTH_5
166 819 FEAT_EPIC_GREAT_STRENGTH_6
167 754 FEAT_EPIC_TOUGHNESS_1
168 755 FEAT_EPIC_TOUGHNESS_2
169 756 FEAT_EPIC_TOUGHNESS_3
170 820 FEAT_EPIC_GREAT_STRENGTH_7
171 821 FEAT_EPIC_GREAT_STRENGTH_8
172 822 FEAT_EPIC_GREAT_STRENGTH_9
173 823 FEAT_EPIC_GREAT_STRENGTH_10
174 757 FEAT_EPIC_TOUGHNESS_4
175 758 FEAT_EPIC_TOUGHNESS_5
176 759 FEAT_EPIC_TOUGHNESS_6
177 492 FEAT_EPIC_DAMAGE_REDUCTION_3
178 493 FEAT_EPIC_DAMAGE_REDUCTION_6
179 494 FEAT_EPIC_DAMAGE_REDUCTION_9
180 760 FEAT_EPIC_TOUGHNESS_7
181 761 FEAT_EPIC_TOUGHNESS_8
182 762 FEAT_EPIC_TOUGHNESS_9
183 763 FEAT_EPIC_TOUGHNESS_10
184 695 FEAT_EPIC_WILL
185 774 FEAT_EPIC_GREAT_CONSTITUTION_1
186 775 FEAT_EPIC_GREAT_CONSTITUTION_2
187 776 FEAT_EPIC_GREAT_CONSTITUTION_3
188 777 FEAT_EPIC_GREAT_CONSTITUTION_4
189 778 FEAT_EPIC_GREAT_CONSTITUTION_5
190 779 FEAT_EPIC_GREAT_CONSTITUTION_6
191 780 FEAT_EPIC_GREAT_CONSTITUTION_7
192 781 FEAT_EPIC_GREAT_CONSTITUTION_8
193 782 FEAT_EPIC_GREAT_CONSTITUTION_9
194 783 FEAT_EPIC_GREAT_CONSTITUTION_10
195 784 FEAT_EPIC_GREAT_DEXTERITY_1
196 785 FEAT_EPIC_GREAT_DEXTERITY_2
197 786 FEAT_EPIC_GREAT_DEXTERITY_3
198 787 FEAT_EPIC_GREAT_DEXTERITY_4
199 788 FEAT_EPIC_GREAT_DEXTERITY_5
200 789 FEAT_EPIC_GREAT_DEXTERITY_6
201 790 FEAT_EPIC_GREAT_DEXTERITY_7
202 791 FEAT_EPIC_GREAT_DEXTERITY_8
203 792 FEAT_EPIC_GREAT_DEXTERITY_9
204 793 FEAT_EPIC_GREAT_DEXTERITY_10
205 3252 ShieldSpecializationHeavy
206 40 Toughness
207 22 IronWill
208 3636 VitalRecovery
209 5294 StonePower
210 389 Expertise
211 3253 ShieldWard
212 4096 "Extra Granted Maneuver"
213 24609 WeaponFocusHeavyMace
214 28 PowerAtk
215 3829 BladeMeditation_DevotedSpirit
216 6 Cleave
217 4074 WhiteRavenDefense
218 391 GreatCleave
219 10 Dodge
220 40 Toughness
221 26 Mobility
222 392 SpringAttack
223 14 GreatFort
224 24 LightngRef
225 389 Expertise
226 408 BlindFight
227 425 DirtyFighting
228 27 PBShot
229 30 RapidShot
230 107 WeapFocGSw
231 69 ImpCritGSw
232 145 WeapSpeGSw
233 1 Ambidex
234 41 TwoWeap
235 16 ImpDis
236 20 ImpTwo
237 390 ImpExpertise
238 0 Alertness
239 42 WeapFinesse
240 32 Shield
241 39 StunFist
242 8 DefArrow
243 427 ResistEnergyCold
244 428 ResistEnergyAcid
245 429 ResistEnergyFire
246 430 ResistEnergyElectrical
247 431 ResistEnergySonic
248 43 WeapFocClub
249 15 ImpCritClub
250 57 ImpCritMorn
251 58 ImpCritStaff
252 59 ImpCritSpear
253 60 ImpCritSickle
254 61 ImpCritSling
255 62 ImpCritUnArm
256 63 ImpCritLongBow
257 64 ImpCritShortBow
258 65 ImpCritShortSwor
259 66 ImpCritRapier
260 67 ImpCritScim
261 70 ImpCritHAxe
262 71 ImpCritTAxe
263 72 ImpCritBAxe
264 73 ImpCritGAxe
265 74 ImpCritHalb
266 75 ImpCritLgHam
267 76 ImpCritLgFlail
268 77 ImpCritWHam
269 78 ImpCritHFlail
270 79 ImpCritKama
271 80 ImpCritKukri
272 82 ImpCritShur
273 83 ImpCritScy
274 84 ImpCritKatana
275 85 ImpCritBSw
276 87 ImpCritDMace
277 88 ImpCritDAxe
278 89 ImpCrit2Sw
279 1074 FEAT_IMPROVED_CRITICAL_TRIDENT
280 90 WeapFocDagger
281 91 WeapFocDart
282 92 WeapFocHXBow
283 68 ImpCritLSw
284 144 WeapSpeLSw
285 106 WeapFocLSw
286 24601 FEAT_WEAPON_FOCUS_LIGHT_LANCE
287 93 WeapFocLgXBow
288 94 WeapFocLgMace
289 95 WeapFocMorn
290 96 WeapFocStaff
291 97 WeapFocSpear
292 98 WeapFocSickle
293 99 WeapFocSling
294 100 WeapFocUnArm
295 101 WeapFocLongBow
296 102 WeapFocShortBow
297 103 WeapFocShortSwor
298 104 WeapFocRapier
299 105 WeapFocScim
300 108 WeapFocHAxe
301 109 WeapFocTAxe
302 110 WeapFocBAxe
303 111 WeapFocGAxe
304 112 WeapFocHalb
305 113 WeapFocLgHam
306 114 WeapFocLgFlail
307 115 WeapFocWHam
308 116 WeapFocHFlail
309 117 WeapFocKama
310 118 WeapFocKukri
311 120 WeapFocShur
312 121 WeapFocScy
313 122 WeapFocKatana
314 123 WeapFocBSw
315 125 WeapFocDMace
316 126 WeapFocDAxe
317 127 WeapFoc2Sw
318 24649 FEAT_IMPROVED_CRITICAL_LIGHT_LANCE
319 1087 FEAT_MOUNTED_COMBAT
320 3037 FEAT_SKILL_FOCUS_RIDE
321 1072 FEAT_WEAPON_FOCUS_TRIDENT
322 128 WeapSpeDagger
323 129 WeapSpeDart
324 130 WeapSpeHXBow
325 131 WeapSpeLgXBow
326 132 WeapSpeLgMace
327 133 WeapSpeMorn
328 134 WeapSpeStaff
329 135 WeapSpeSpear
330 136 WeapSpeSickle
331 137 WeapSpeSling
332 138 WeapSpeUnArm
333 139 WeapSpeLongBow
334 140 WeapSpeShortBow
335 141 WeapSpeShortSwor
336 142 WeapSpeRapier
337 143 WeapSpeScim
338 146 WeapSpeHAxe
339 147 WeapSpeTAxe
340 148 WeapSpeBAxe
341 149 WeapSpeGAxe
342 150 WeapSpeHalb
343 151 WeapSpeLgHam
344 152 WeapSpeLgFlail
345 153 WeapSpeWHam
346 154 WeapSpeHFlail
347 155 WeapSpeKama
348 156 WeapSpeKukri
349 158 WeapSpeShur
350 159 WeapSpeScy
351 160 WeapSpeKatana
352 161 WeapSpeBSw
353 163 WeapSpeDMace
354 164 WeapSpeDAxe
355 165 WeapSpe2Sw
356 1073 FEAT_WEAPON_SPECIALIZATION_TRIDENT
357 166 SpellFocusCon
358 167 SpellFocusDiv
359 168 SpellFocusEnc
360 169 SpellFocusEvo
361 170 SpellFocusIll
362 171 SpellFocusNec
363 172 SpellFocusTra
364 173 SkillFocusConc
365 174 SkillFocusDisa
366 175 SkillFocusGrip
367 177 SkillFocusHeal
368 178 SkillFocusHide
369 179 SkillFocusList
370 180 SkillFocusLore
371 181 SkillFocusMove
372 182 SkillFocusOpen
373 184 SkillFocusPerf
374 185 SkillFocusPers
375 186 SkillFocusPick
376 187 SkillFocusSearch
377 188 SkillFocusSet
378 189 SkillFocusSpell
379 190 SkillFocusSpot
380 193 SkillFocusDevi
381 35 SpellFocusAbj
382 36 SpellPen
383 37 StillSpell
384 25 MaxSpell
385 7 CmbtCast
386 29 Quicken
387 34 SkillFocusAnim
388 33 Silent
389 11 Empower
390 12 ExtSpell
391 13 ExtTurn

View File

@@ -0,0 +1,395 @@
2DA V2.0
FeatIndex Label
0 675 FEAT_EPIC_WEAPON_SPECIALIZATION_GREATSWORD
1 637 FEAT_EPIC_WEAPON_FOCUS_GREATSWORD
2 584 FEAT_EPIC_PROWESS
3 490 FEAT_EPIC_ARMOR_SKIN
4 24613 FEAT_EPIC_WEAPON_FOCUS_LANCE
5 657 FEAT_EPIC_WEAPON_SPECIALIZATION_CLUB
6 658 FEAT_EPIC_WEAPON_SPECIALIZATION_DAGGER
7 659 FEAT_EPIC_WEAPON_SPECIALIZATION_DART
8 660 FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVYCROSSBOW
9 661 FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTCROSSBOW
10 662 FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTMACE
11 663 FEAT_EPIC_WEAPON_SPECIALIZATION_MORNINGSTAR
12 664 FEAT_EPIC_WEAPON_SPECIALIZATION_QUARTERSTAFF
13 665 FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTSPEAR
14 666 FEAT_EPIC_WEAPON_SPECIALIZATION_SICKLE
15 667 FEAT_EPIC_WEAPON_SPECIALIZATION_SLING
16 668 FEAT_EPIC_WEAPON_SPECIALIZATION_UNARMED
17 669 FEAT_EPIC_WEAPON_SPECIALIZATION_LONGBOW
18 670 FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTBOW
19 671 FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTSWORD
20 672 FEAT_EPIC_WEAPON_SPECIALIZATION_RAPIER
21 673 FEAT_EPIC_WEAPON_SPECIALIZATION_SCIMITAR
22 676 FEAT_EPIC_WEAPON_SPECIALIZATION_HANDAXE
23 677 FEAT_EPIC_WEAPON_SPECIALIZATION_THROWINGAXE
24 678 FEAT_EPIC_WEAPON_SPECIALIZATION_BATTLEAXE
25 679 FEAT_EPIC_WEAPON_SPECIALIZATION_GREATAXE
26 680 FEAT_EPIC_WEAPON_SPECIALIZATION_HALBERD
27 681 FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTHAMMER
28 682 FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHTFLAIL
29 683 FEAT_EPIC_WEAPON_SPECIALIZATION_WARHAMMER
30 684 FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVYFLAIL
31 685 FEAT_EPIC_WEAPON_SPECIALIZATION_KAMA
32 686 FEAT_EPIC_WEAPON_SPECIALIZATION_KUKRI
33 687 FEAT_EPIC_WEAPON_SPECIALIZATION_SHURIKEN
34 688 FEAT_EPIC_WEAPON_SPECIALIZATION_SCYTHE
35 689 FEAT_EPIC_WEAPON_SPECIALIZATION_KATANA
36 690 FEAT_EPIC_WEAPON_SPECIALIZATION_BASTARDSWORD
37 691 FEAT_EPIC_WEAPON_SPECIALIZATION_DIREMACE
38 692 FEAT_EPIC_WEAPON_SPECIALIZATION_DOUBLEAXE
39 693 FEAT_EPIC_WEAPON_SPECIALIZATION_TWOBLADEDSWORD
40 1077 FEAT_EPIC_WEAPON_SPECIALIZATION_TRIDENT
41 636 FEAT_EPIC_WEAPON_FOCUS_LONGSWORD
42 674 FEAT_EPIC_WEAPON_SPECIALIZATION_LONGSWORD
43 619 FEAT_EPIC_WEAPON_FOCUS_CLUB
44 620 FEAT_EPIC_WEAPON_FOCUS_DAGGER
45 621 FEAT_EPIC_WEAPON_FOCUS_DART
46 622 FEAT_EPIC_WEAPON_FOCUS_HEAVYCROSSBOW
47 623 FEAT_EPIC_WEAPON_FOCUS_LIGHTCROSSBOW
48 624 FEAT_EPIC_WEAPON_FOCUS_LIGHTMACE
49 625 FEAT_EPIC_WEAPON_FOCUS_MORNINGSTAR
50 626 FEAT_EPIC_WEAPON_FOCUS_QUARTERSTAFF
51 627 FEAT_EPIC_WEAPON_FOCUS_SHORTSPEAR
52 628 FEAT_EPIC_WEAPON_FOCUS_SICKLE
53 629 FEAT_EPIC_WEAPON_FOCUS_SLING
54 630 FEAT_EPIC_WEAPON_FOCUS_UNARMED
55 631 FEAT_EPIC_WEAPON_FOCUS_LONGBOW
56 632 FEAT_EPIC_WEAPON_FOCUS_SHORTBOW
57 633 FEAT_EPIC_WEAPON_FOCUS_SHORTSWORD
58 634 FEAT_EPIC_WEAPON_FOCUS_RAPIER
59 635 FEAT_EPIC_WEAPON_FOCUS_SCIMITAR
60 638 FEAT_EPIC_WEAPON_FOCUS_HANDAXE
61 639 FEAT_EPIC_WEAPON_FOCUS_THROWINGAXE
62 640 FEAT_EPIC_WEAPON_FOCUS_BATTLEAXE
63 641 FEAT_EPIC_WEAPON_FOCUS_GREATAXE
64 642 FEAT_EPIC_WEAPON_FOCUS_HALBERD
65 643 FEAT_EPIC_WEAPON_FOCUS_LIGHTHAMMER
66 644 FEAT_EPIC_WEAPON_FOCUS_LIGHTFLAIL
67 645 FEAT_EPIC_WEAPON_FOCUS_WARHAMMER
68 646 FEAT_EPIC_WEAPON_FOCUS_HEAVYFLAIL
69 647 FEAT_EPIC_WEAPON_FOCUS_KAMA
70 648 FEAT_EPIC_WEAPON_FOCUS_KUKRI
71 649 FEAT_EPIC_WEAPON_FOCUS_SHURIKEN
72 650 FEAT_EPIC_WEAPON_FOCUS_SCYTHE
73 651 FEAT_EPIC_WEAPON_FOCUS_KATANA
74 652 FEAT_EPIC_WEAPON_FOCUS_BASTARDSWORD
75 653 FEAT_EPIC_WEAPON_FOCUS_DIREMACE
76 654 FEAT_EPIC_WEAPON_FOCUS_DOUBLEAXE
77 655 FEAT_EPIC_WEAPON_FOCUS_TWOBLADEDSWORD
78 1076 FEAT_EPIC_WEAPON_FOCUS_TRIDENT
79 24654 EpicWeaponSpec_HeavyMace
80 24621 EpicWeaponFocus_HeavyMace
81 726 FEAT_EPIC_OVERWHELMING_CRITICAL_LONGSWORD
82 709 FEAT_EPIC_OVERWHELMING_CRITICAL_CLUB
83 710 FEAT_EPIC_OVERWHELMING_CRITICAL_DAGGER
84 711 FEAT_EPIC_OVERWHELMING_CRITICAL_DART
85 712 FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVYCROSSBOW
86 713 FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTCROSSBOW
87 714 FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTMACE
88 715 FEAT_EPIC_OVERWHELMING_CRITICAL_MORNINGSTAR
89 716 FEAT_EPIC_OVERWHELMING_CRITICAL_QUARTERSTAFF
90 717 FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTSPEAR
91 718 FEAT_EPIC_OVERWHELMING_CRITICAL_SICKLE
92 719 FEAT_EPIC_OVERWHELMING_CRITICAL_SLING
93 720 FEAT_EPIC_OVERWHELMING_CRITICAL_UNARMED
94 721 FEAT_EPIC_OVERWHELMING_CRITICAL_LONGBOW
95 722 FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTBOW
96 723 FEAT_EPIC_OVERWHELMING_CRITICAL_SHORTSWORD
97 724 FEAT_EPIC_OVERWHELMING_CRITICAL_RAPIER
98 725 FEAT_EPIC_OVERWHELMING_CRITICAL_SCIMITAR
99 727 FEAT_EPIC_OVERWHELMING_CRITICAL_GREATSWORD
100 728 FEAT_EPIC_OVERWHELMING_CRITICAL_HANDAXE
101 729 FEAT_EPIC_OVERWHELMING_CRITICAL_THROWINGAXE
102 730 FEAT_EPIC_OVERWHELMING_CRITICAL_BATTLEAXE
103 731 FEAT_EPIC_OVERWHELMING_CRITICAL_GREATAXE
104 732 FEAT_EPIC_OVERWHELMING_CRITICAL_HALBERD
105 733 FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTHAMMER
106 734 FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHTFLAIL
107 735 FEAT_EPIC_OVERWHELMING_CRITICAL_WARHAMMER
108 736 FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVYFLAIL
109 737 FEAT_EPIC_OVERWHELMING_CRITICAL_KAMA
110 738 FEAT_EPIC_OVERWHELMING_CRITICAL_KUKRI
111 739 FEAT_EPIC_OVERWHELMING_CRITICAL_SHURIKEN
112 740 FEAT_EPIC_OVERWHELMING_CRITICAL_SCYTHE
113 741 FEAT_EPIC_OVERWHELMING_CRITICAL_KATANA
114 742 FEAT_EPIC_OVERWHELMING_CRITICAL_BASTARDSWORD
115 743 FEAT_EPIC_OVERWHELMING_CRITICAL_DIREMACE
116 744 FEAT_EPIC_OVERWHELMING_CRITICAL_DOUBLEAXE
117 745 FEAT_EPIC_OVERWHELMING_CRITICAL_TWOBLADEDSWORD
118 1078 FEAT_EPIC_OVERWHELMING_CRITICAL_TRIDENT
119 495 FEAT_EPIC_DEVASTATING_CRITICAL_CLUB
120 496 FEAT_EPIC_DEVASTATING_CRITICAL_DAGGER
121 497 FEAT_EPIC_DEVASTATING_CRITICAL_DART
122 498 FEAT_EPIC_DEVASTATING_CRITICAL_HEAVYCROSSBOW
123 499 FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTCROSSBOW
124 500 FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTMACE
125 501 FEAT_EPIC_DEVASTATING_CRITICAL_MORNINGSTAR
126 502 FEAT_EPIC_DEVASTATING_CRITICAL_QUARTERSTAFF
127 503 FEAT_EPIC_DEVASTATING_CRITICAL_SHORTSPEAR
128 504 FEAT_EPIC_DEVASTATING_CRITICAL_SICKLE
129 505 FEAT_EPIC_DEVASTATING_CRITICAL_SLING
130 506 FEAT_EPIC_DEVASTATING_CRITICAL_UNARMED
131 507 FEAT_EPIC_DEVASTATING_CRITICAL_LONGBOW
132 508 FEAT_EPIC_DEVASTATING_CRITICAL_SHORTBOW
133 509 FEAT_EPIC_DEVASTATING_CRITICAL_SHORTSWORD
134 510 FEAT_EPIC_DEVASTATING_CRITICAL_RAPIER
135 511 FEAT_EPIC_DEVASTATING_CRITICAL_SCIMITAR
136 512 FEAT_EPIC_DEVASTATING_CRITICAL_LONGSWORD
137 513 FEAT_EPIC_DEVASTATING_CRITICAL_GREATSWORD
138 514 FEAT_EPIC_DEVASTATING_CRITICAL_HANDAXE
139 515 FEAT_EPIC_DEVASTATING_CRITICAL_THROWINGAXE
140 516 FEAT_EPIC_DEVASTATING_CRITICAL_BATTLEAXE
141 517 FEAT_EPIC_DEVASTATING_CRITICAL_GREATAXE
142 518 FEAT_EPIC_DEVASTATING_CRITICAL_HALBERD
143 519 FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTHAMMER
144 520 FEAT_EPIC_DEVASTATING_CRITICAL_LIGHTFLAIL
145 521 FEAT_EPIC_DEVASTATING_CRITICAL_WARHAMMER
146 522 FEAT_EPIC_DEVASTATING_CRITICAL_HEAVYFLAIL
147 523 FEAT_EPIC_DEVASTATING_CRITICAL_KAMA
148 524 FEAT_EPIC_DEVASTATING_CRITICAL_KUKRI
149 525 FEAT_EPIC_DEVASTATING_CRITICAL_SHURIKEN
150 526 FEAT_EPIC_DEVASTATING_CRITICAL_SCYTHE
151 527 FEAT_EPIC_DEVASTATING_CRITICAL_KATANA
152 528 FEAT_EPIC_DEVASTATING_CRITICAL_BASTARDSWORD
153 529 FEAT_EPIC_DEVASTATING_CRITICAL_DIREMACE
154 530 FEAT_EPIC_DEVASTATING_CRITICAL_DOUBLEAXE
155 531 FEAT_EPIC_DEVASTATING_CRITICAL_TWOBLADEDSWORD
156 1075 FEAT_EPIC_DEVASTATING_CRITICAL_TRIDENT
157 867 FEAT_WHIRLWIND_ATTACK
158 868 FEAT_IMPROVED_WHIRLWIND
159 814 FEAT_EPIC_GREAT_STRENGTH_1
160 815 FEAT_EPIC_GREAT_STRENGTH_2
161 816 FEAT_EPIC_GREAT_STRENGTH_3
162 491 FEAT_EPIC_BLINDING_SPEED
163 753 FEAT_EPIC_SUPERIOR_INITIATIVE
164 817 FEAT_EPIC_GREAT_STRENGTH_4
165 818 FEAT_EPIC_GREAT_STRENGTH_5
166 819 FEAT_EPIC_GREAT_STRENGTH_6
167 754 FEAT_EPIC_TOUGHNESS_1
168 755 FEAT_EPIC_TOUGHNESS_2
169 756 FEAT_EPIC_TOUGHNESS_3
170 820 FEAT_EPIC_GREAT_STRENGTH_7
171 821 FEAT_EPIC_GREAT_STRENGTH_8
172 822 FEAT_EPIC_GREAT_STRENGTH_9
173 823 FEAT_EPIC_GREAT_STRENGTH_10
174 757 FEAT_EPIC_TOUGHNESS_4
175 758 FEAT_EPIC_TOUGHNESS_5
176 759 FEAT_EPIC_TOUGHNESS_6
177 492 FEAT_EPIC_DAMAGE_REDUCTION_3
178 493 FEAT_EPIC_DAMAGE_REDUCTION_6
179 494 FEAT_EPIC_DAMAGE_REDUCTION_9
180 760 FEAT_EPIC_TOUGHNESS_7
181 761 FEAT_EPIC_TOUGHNESS_8
182 762 FEAT_EPIC_TOUGHNESS_9
183 763 FEAT_EPIC_TOUGHNESS_10
184 695 FEAT_EPIC_WILL
185 774 FEAT_EPIC_GREAT_CONSTITUTION_1
186 775 FEAT_EPIC_GREAT_CONSTITUTION_2
187 776 FEAT_EPIC_GREAT_CONSTITUTION_3
188 777 FEAT_EPIC_GREAT_CONSTITUTION_4
189 778 FEAT_EPIC_GREAT_CONSTITUTION_5
190 779 FEAT_EPIC_GREAT_CONSTITUTION_6
191 780 FEAT_EPIC_GREAT_CONSTITUTION_7
192 781 FEAT_EPIC_GREAT_CONSTITUTION_8
193 782 FEAT_EPIC_GREAT_CONSTITUTION_9
194 783 FEAT_EPIC_GREAT_CONSTITUTION_10
195 784 FEAT_EPIC_GREAT_DEXTERITY_1
196 785 FEAT_EPIC_GREAT_DEXTERITY_2
197 786 FEAT_EPIC_GREAT_DEXTERITY_3
198 787 FEAT_EPIC_GREAT_DEXTERITY_4
199 788 FEAT_EPIC_GREAT_DEXTERITY_5
200 789 FEAT_EPIC_GREAT_DEXTERITY_6
201 790 FEAT_EPIC_GREAT_DEXTERITY_7
202 791 FEAT_EPIC_GREAT_DEXTERITY_8
203 792 FEAT_EPIC_GREAT_DEXTERITY_9
204 793 FEAT_EPIC_GREAT_DEXTERITY_10
205 69 ImpCritGSw
206 28 PowerAtk
207 145 WeapSpeGSw
208 107 WeapFocGSw
209 3636 VitalRecovery
210 4096 "Extra Granted Maneuver"
211 6 Cleave
212 391 GreatCleave
213 408 BlindFight
214 40 Toughness
215 22 IronWill
216 5294 StonePower
217 389 Expertise
218 3253 ShieldWard
219 24609 WeaponFocusHeavyMace
220 3829 BladeMeditation_DevotedSpirit
221 4074 WhiteRavenDefense
222 10 Dodge
223 40 Toughness
224 26 Mobility
225 392 SpringAttack
226 14 GreatFort
227 24 LightngRef
228 389 Expertise
229 425 DirtyFighting
230 27 PBShot
231 30 RapidShot
232 1 Ambidex
233 41 TwoWeap
234 16 ImpDis
235 20 ImpTwo
236 390 ImpExpertise
237 0 Alertness
238 42 WeapFinesse
239 32 Shield
240 39 StunFist
241 3252 ShieldSpecializationHeavy
242 8 DefArrow
243 427 ResistEnergyCold
244 428 ResistEnergyAcid
245 429 ResistEnergyFire
246 430 ResistEnergyElectrical
247 431 ResistEnergySonic
248 43 WeapFocClub
249 15 ImpCritClub
250 57 ImpCritMorn
251 58 ImpCritStaff
252 59 ImpCritSpear
253 60 ImpCritSickle
254 61 ImpCritSling
255 62 ImpCritUnArm
256 63 ImpCritLongBow
257 64 ImpCritShortBow
258 65 ImpCritShortSwor
259 66 ImpCritRapier
260 67 ImpCritScim
261 70 ImpCritHAxe
262 71 ImpCritTAxe
263 72 ImpCritBAxe
264 73 ImpCritGAxe
265 74 ImpCritHalb
266 75 ImpCritLgHam
267 76 ImpCritLgFlail
268 77 ImpCritWHam
269 78 ImpCritHFlail
270 79 ImpCritKama
271 80 ImpCritKukri
272 82 ImpCritShur
273 83 ImpCritScy
274 84 ImpCritKatana
275 85 ImpCritBSw
276 87 ImpCritDMace
277 88 ImpCritDAxe
278 89 ImpCrit2Sw
279 1074 FEAT_IMPROVED_CRITICAL_TRIDENT
280 90 WeapFocDagger
281 91 WeapFocDart
282 92 WeapFocHXBow
283 68 ImpCritLSw
284 144 WeapSpeLSw
285 106 WeapFocLSw
286 24601 FEAT_WEAPON_FOCUS_LIGHT_LANCE
287 93 WeapFocLgXBow
288 94 WeapFocLgMace
289 95 WeapFocMorn
290 96 WeapFocStaff
291 97 WeapFocSpear
292 98 WeapFocSickle
293 99 WeapFocSling
294 100 WeapFocUnArm
295 101 WeapFocLongBow
296 102 WeapFocShortBow
297 103 WeapFocShortSwor
298 104 WeapFocRapier
299 105 WeapFocScim
300 108 WeapFocHAxe
301 109 WeapFocTAxe
302 110 WeapFocBAxe
303 111 WeapFocGAxe
304 112 WeapFocHalb
305 113 WeapFocLgHam
306 114 WeapFocLgFlail
307 115 WeapFocWHam
308 116 WeapFocHFlail
309 117 WeapFocKama
310 118 WeapFocKukri
311 120 WeapFocShur
312 121 WeapFocScy
313 122 WeapFocKatana
314 123 WeapFocBSw
315 125 WeapFocDMace
316 126 WeapFocDAxe
317 127 WeapFoc2Sw
318 24649 FEAT_IMPROVED_CRITICAL_LIGHT_LANCE
319 1087 FEAT_MOUNTED_COMBAT
320 3037 FEAT_SKILL_FOCUS_RIDE
321 1072 FEAT_WEAPON_FOCUS_TRIDENT
322 128 WeapSpeDagger
323 129 WeapSpeDart
324 130 WeapSpeHXBow
325 131 WeapSpeLgXBow
326 132 WeapSpeLgMace
327 133 WeapSpeMorn
328 134 WeapSpeStaff
329 135 WeapSpeSpear
330 136 WeapSpeSickle
331 137 WeapSpeSling
332 138 WeapSpeUnArm
333 139 WeapSpeLongBow
334 140 WeapSpeShortBow
335 141 WeapSpeShortSwor
336 142 WeapSpeRapier
337 143 WeapSpeScim
338 146 WeapSpeHAxe
339 147 WeapSpeTAxe
340 148 WeapSpeBAxe
341 149 WeapSpeGAxe
342 150 WeapSpeHalb
343 151 WeapSpeLgHam
344 152 WeapSpeLgFlail
345 153 WeapSpeWHam
346 154 WeapSpeHFlail
347 155 WeapSpeKama
348 156 WeapSpeKukri
349 158 WeapSpeShur
350 159 WeapSpeScy
351 160 WeapSpeKatana
352 161 WeapSpeBSw
353 163 WeapSpeDMace
354 164 WeapSpeDAxe
355 165 WeapSpe2Sw
356 1073 FEAT_WEAPON_SPECIALIZATION_TRIDENT
357 166 SpellFocusCon
358 167 SpellFocusDiv
359 168 SpellFocusEnc
360 169 SpellFocusEvo
361 170 SpellFocusIll
362 171 SpellFocusNec
363 172 SpellFocusTra
364 173 SkillFocusConc
365 174 SkillFocusDisa
366 175 SkillFocusGrip
367 177 SkillFocusHeal
368 178 SkillFocusHide
369 179 SkillFocusList
370 180 SkillFocusLore
371 181 SkillFocusMove
372 182 SkillFocusOpen
373 184 SkillFocusPerf
374 185 SkillFocusPers
375 186 SkillFocusPick
376 187 SkillFocusSearch
377 188 SkillFocusSet
378 189 SkillFocusSpell
379 190 SkillFocusSpot
380 193 SkillFocusDevi
381 35 SpellFocusAbj
382 36 SpellPen
383 37 StillSpell
384 25 MaxSpell
385 7 CmbtCast
386 29 Quicken
387 34 SkillFocusAnim
388 33 Silent
389 11 Empower
390 12 ExtSpell
391 13 ExtTurn

View File

@@ -0,0 +1,28 @@
2DA V2.0
SkillIndex Label
0 17 Spot
1 1 Concentration
2 32 Balance
3 12 Persuade
4 4 Heal
5 24 Intimidate
6 28 Jump
7 31 Martial_Lore
8 27 Ride
9 23 Bluff
10 5 Hide
11 8 MoveSilently
12 14 Search
13 19 UseMagicDevice
14 7 Lore
15 16 Spellcraft
16 6 Listen
17 34 CraftAlchemy
18 35 CraftPoison
19 38 GraftGeneral
20 26 CraftWeapon
21 25 CraftArmor
22 37 Climb
23 29 Truespeak
24 20 Appraise

View File

@@ -0,0 +1,29 @@
2DA V2.0
SkillIndex Label
0 1 Concentration
1 24 Intimidate
2 17 Spot
3 21 Tumble
4 7 Lore
5 32 Balance
6 12 Persuade
7 4 Heal
8 28 Jump
9 31 Martial_Lore
10 27 Ride
11 23 Bluff
12 5 Hide
13 8 MoveSilently
14 14 Search
15 19 UseMagicDevice
16 16 Spellcraft
17 6 Listen
18 34 CraftAlchemy
19 35 CraftPoison
20 38 GraftGeneral
21 26 CraftWeapon
22 25 CraftArmor
23 37 Climb
24 29 Truespeak
25 20 Appraise

View File

@@ -0,0 +1,29 @@
2DA V2.0
SkillIndex Label
0 1 Concentration
1 28 Jump
2 24 Intimidate
3 7 Lore
4 21 Tumble
5 17 Spot
6 32 Balance
7 12 Persuade
8 4 Heal
9 31 Martial_Lore
10 27 Ride
11 23 Bluff
12 5 Hide
13 8 MoveSilently
14 14 Search
15 19 UseMagicDevice
16 16 Spellcraft
17 6 Listen
18 34 CraftAlchemy
19 35 CraftPoison
20 38 GraftGeneral
21 26 CraftWeapon
22 25 CraftArmor
23 37 Climb
24 29 Truespeak
25 20 Appraise

View File

@@ -892,6 +892,7 @@ void CreateSwitchNameArray()
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CREATE_INFUSION_OPTIONAL_HERBS);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_SCEPTER_CASTER_LEVEL);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_SHOW_SR_CHECK_DETAILS);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_MATERIAL_COMPONENTS);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DISABLE_COMPONENTS_SHOP);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_TRUESEEING);

View File

@@ -39,8 +39,10 @@ int InvocationASFCheck(object oInvoker, int nClass)
case 1: nASF -= 5; break;//light
case 2: nASF -= 10; break;//light
case 3: nASF -= 20; break;//light
case 4: nASF -= GetHasFeat(FEAT_BATTLE_CASTER, oInvoker) ? 20 : 0; break;//medium;
case 5: nASF -= GetHasFeat(FEAT_BATTLE_CASTER, oInvoker) ? 30 : 0; break;//medium
//case 4: nASF -= GetHasFeat(FEAT_BATTLE_CASTER, oInvoker) ? 20 : 0; break; //medium;
//case 5: nASF -= GetHasFeat(FEAT_BATTLE_CASTER, oInvoker) ? 30 : 0; break; //medium
case 4: nASF = GetHasFeat(FEAT_BATTLE_CASTER, oInvoker) ? 0 : nASF; break; //medium
case 5: nASF = GetHasFeat(FEAT_BATTLE_CASTER, oInvoker) ? 0 : nASF; break; //medium;
default: break;
}
}

View File

@@ -1808,6 +1808,11 @@ int GetCraftingDC(object oItem)
void MakeMasterwork(object oItem)
{
if(GetPlotFlag(oItem)) return; //sanity check
itemproperty ip = ItemPropertyQuality(IP_CONST_QUALITY_MASTERWORK);
ip = TagItemProperty(ip, "Quality_Masterwork");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
int nBase = GetBaseItemType(oItem);
if((nBase == BASE_ITEM_ARMOR) ||
(nBase == BASE_ITEM_SMALLSHIELD) ||
@@ -1817,6 +1822,70 @@ void MakeMasterwork(object oItem)
{
//no armour check penalty here
if(GetItemArmourCheckPenalty(oItem) == 0) return;
ip = ItemPropertySkillBonus(SKILL_BALANCE, 1);
ip = TagItemProperty(ip, "Quality_Masterwork");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_CLIMB, 1);
ip = TagItemProperty(ip, "Quality_Masterwork");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_HIDE, 1);
ip = TagItemProperty(ip, "Quality_Masterwork");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_MOVE_SILENTLY, 1);
ip = TagItemProperty(ip, "Quality_Masterwork");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_PICK_POCKET, 1);
ip = TagItemProperty(ip, "Quality_Masterwork");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_SET_TRAP, 1);
ip = TagItemProperty(ip, "Quality_Masterwork");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_TUMBLE, 1);
ip = TagItemProperty(ip, "Quality_Masterwork");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_JUMP, 1);
ip = TagItemProperty(ip, "Quality_Masterwork");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
}
else if(GetWeaponType(nBase))
{
ip = ItemPropertyAttackBonus(1);
ip = TagItemProperty(ip, "Quality_Masterwork");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
else if(StringToInt(Get2DACache("prc_craft_gen_it", "Type", nBase)) == PRC_CRAFT_ITEM_TYPE_AMMO)
{
ip = ItemPropertyAttackBonus(1);
ip = TagItemProperty(ip, "Quality_Masterwork");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
else
return;
}
/* void MakeMasterwork(object oItem)
{
if(GetPlotFlag(oItem)) return; //sanity check
int nBase = GetBaseItemType(oItem);
if((nBase == BASE_ITEM_ARMOR) ||
(nBase == BASE_ITEM_SMALLSHIELD) ||
(nBase == BASE_ITEM_LARGESHIELD) ||
(nBase == BASE_ITEM_TOWERSHIELD)
)
{
//no armour check penalty here
if(GetItemArmourCheckPenalty(oItem) == 0) return;
IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_HIDE, 1) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_MOVE_SILENTLY, 1), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
IPSafeAddItemProperty(oItem, ItemPropertySkillBonus(SKILL_PICK_POCKET, 1) , 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
@@ -1830,17 +1899,226 @@ void MakeMasterwork(object oItem)
}
else if(StringToInt(Get2DACache("prc_craft_gen_it", "Type", nBase)) == PRC_CRAFT_ITEM_TYPE_AMMO)
{
/*
int nDamageType = (nBase == BASE_ITEM_BULLET) ? DAMAGE_TYPE_BLUDGEONING : DAMAGE_TYPE_PIERCING;
itemproperty ip1 = ItemPropertyDamageBonus(nDamageType, IP_CONST_DAMAGEBONUS_1);
*/
//int nDamageType = (nBase == BASE_ITEM_BULLET) ? DAMAGE_TYPE_BLUDGEONING : DAMAGE_TYPE_PIERCING;
//itemproperty ip1 = ItemPropertyDamageBonus(nDamageType, IP_CONST_DAMAGEBONUS_1);
IPSafeAddItemProperty(oItem, ItemPropertyAttackBonus(1), 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
else
return;
}
*/
void MakeAdamantine(object oItem)
{
if(GetPlotFlag(oItem)) return; //sanity check
if(GetBaseItemType(oItem) == BASE_ITEM_ARMOR)
{
int nBonus = 0;
switch(GetItemBaseAC(oItem))
{
case 1:
case 2:
case 3: nBonus = IP_CONST_DAMAGERESIST_1; break;
case 4:
case 5: nBonus = IP_CONST_DAMAGERESIST_2; break;
case 6:
case 7:
case 8: nBonus = IP_CONST_DAMAGERESIST_3; break;
}
if(nBonus)
{
itemproperty ip = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_BLUDGEONING, nBonus);
ip = TagItemProperty(ip, "Material_Adamantine");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_PIERCING, nBonus);
ip = TagItemProperty(ip, "Material_Adamantine");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SLASHING, nBonus);
ip = TagItemProperty(ip, "Material_Adamantine");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertyMaterial(IP_MATERIAL_ADAMANTINE);
ip = TagItemProperty(ip, "Material_Adamantine");
IPSafeAddItemProperty(oItem, ip, 0.0f, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
}
}
}
void MakeDarkwood(object oItem)
{
if(GetPlotFlag(oItem)) return; //sanity check
itemproperty ip = ItemPropertyWeightReduction(IP_CONST_REDUCEDWEIGHT_50_PERCENT);
ip = TagItemProperty(ip, "Material_Darkwood");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
int nBase = GetBaseItemType(oItem);
if(((nBase == BASE_ITEM_SMALLSHIELD) ||
(nBase == BASE_ITEM_LARGESHIELD) ||
(nBase == BASE_ITEM_TOWERSHIELD))
)
{
int nBonus = 2;
if(nBase == BASE_ITEM_SMALLSHIELD) nBonus = 1;
ip = ItemPropertySkillBonus(SKILL_BALANCE, nBonus);
ip = TagItemProperty(ip, "Material_Darkwood");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_CLIMB, nBonus);
ip = TagItemProperty(ip, "Material_Darkwood");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_HIDE, nBonus);
ip = TagItemProperty(ip, "Material_Darkwood");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_MOVE_SILENTLY, nBonus);
ip = TagItemProperty(ip, "Material_Darkwood");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_PICK_POCKET, nBonus);
ip = TagItemProperty(ip, "Material_Darkwood");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_SET_TRAP, nBonus);
ip = TagItemProperty(ip, "Material_Darkwood");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_TUMBLE, nBonus);
ip = TagItemProperty(ip, "Material_Darkwood");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_JUMP, nBonus);
ip = TagItemProperty(ip, "Material_Darkwood");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertyMaterial(IP_MATERIAL_WOOD_DARKWOOD_ZALANTAR);
ip = TagItemProperty(ip, "Material_Darkwood");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
}
}
void MakeDragonhide(object oItem)
{
//Does nothing so far
}
void MakeMithral(object oItem)
{
if(GetPlotFlag(oItem)) return; //sanity check
itemproperty ip = ItemPropertyWeightReduction(IP_CONST_REDUCEDWEIGHT_50_PERCENT);
ip = TagItemProperty(ip, "Material_Mithral");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
int nBase = GetBaseItemType(oItem);
if(GetWeaponType(nBase))
{
ip = ItemPropertyMaterial(IP_MATERIAL_MITHRAL);
ip = TagItemProperty(ip, "Material_Mithral");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
}
else if(((nBase == BASE_ITEM_ARMOR) ||
(nBase == BASE_ITEM_SMALLSHIELD) ||
(nBase == BASE_ITEM_LARGESHIELD) ||
(nBase == BASE_ITEM_TOWERSHIELD))
)
{
int nBonus = 3;
int nPenalty = GetItemArmourCheckPenalty(oItem);
if(nBonus > nPenalty) nBonus = nPenalty;
ip = ItemPropertySkillBonus(SKILL_BALANCE, nBonus);
ip = TagItemProperty(ip, "Material_Mithral");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_CLIMB, nBonus);
ip = TagItemProperty(ip, "Material_Mithral");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_HIDE, nBonus);
ip = TagItemProperty(ip, "Material_Mithral");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_MOVE_SILENTLY, nBonus);
ip = TagItemProperty(ip, "Material_Mithral");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_PICK_POCKET, nBonus);
ip = TagItemProperty(ip, "Material_Mithral");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_SET_TRAP, nBonus);
ip = TagItemProperty(ip, "Material_Mithral");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_TUMBLE, nBonus);
ip = TagItemProperty(ip, "Material_Mithral");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertySkillBonus(SKILL_JUMP, nBonus);
ip = TagItemProperty(ip, "Material_Mithral");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
ip = ItemPropertyMaterial(IP_MATERIAL_MITHRAL);
ip = TagItemProperty(ip, "Material_Mithral");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
if(GetItemBaseAC(oItem) == 1)
{
ip = ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_5_PERCENT);
ip = TagItemProperty(ip, "Material_Mithral");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
}
else
{
ip = ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_10_PERCENT);
ip = TagItemProperty(ip, "Material_Mithral");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
}
}
}
void MakeColdIron(object oItem)
{
//Does nothing so far
itemproperty ip = ItemPropertyMaterial(IP_MATERIAL_COLD_IRON);
ip = TagItemProperty(ip, "Material_ColdIron");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
}
void MakeSilver(object oItem)
{
//Does nothing so far
itemproperty ip = ItemPropertyMaterial(IP_MATERIAL_SILVER);
ip = TagItemProperty(ip, "Material_ColdIron");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
}
void MakeMundaneCrystal(object oItem)
{
//Does nothing so far
itemproperty ip = ItemPropertyMaterial(IP_MATERIAL_GEM_CRYSTAL_MUNDANE);
ip = TagItemProperty(ip, "Material_MundaneCrystal");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
}
void MakeDeepCrystal(object oItem)
{
//Does nothing so far
itemproperty ip = ItemPropertyMaterial(IP_MATERIAL_GEM_CRYSTAL_DEEP);
ip = TagItemProperty(ip, "Material_DeepCrystal");
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
}
/* void MakeAdamantine(object oItem)
{
if(GetPlotFlag(oItem)) return; //sanity check
if(GetBaseItemType(oItem) == BASE_ITEM_ARMOR)
@@ -1867,9 +2145,9 @@ void MakeAdamantine(object oItem)
IPSafeAddItemProperty(oItem, ipAdamantine, 0.0f, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
}
}
}
} */
void MakeDarkwood(object oItem)
/* void MakeDarkwood(object oItem)
{
if(GetPlotFlag(oItem)) return; //sanity check
IPSafeAddItemProperty(oItem, ItemPropertyWeightReduction(IP_CONST_REDUCEDWEIGHT_50_PERCENT), 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
@@ -1892,8 +2170,9 @@ void MakeDarkwood(object oItem)
IPSafeAddItemProperty(oItem, ipDarkwood, 0.0f, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
}
}
*/
void MakeDragonhide(object oItem)
/* void MakeDragonhide(object oItem)
{
//Does nothing so far
}
@@ -1929,34 +2208,39 @@ void MakeMithral(object oItem)
IPSafeAddItemProperty(oItem, ipMithral, 0.0f, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
}
}
*/
void MakeColdIron(object oItem)
/* void MakeColdIron(object oItem)
{
//Does nothing so far
itemproperty ipColdIron = ItemPropertyMaterial(IP_MATERIAL_COLD_IRON);
IPSafeAddItemProperty(oItem, ipColdIron, 0.0f, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
}
*/
void MakeSilver(object oItem)
/* void MakeSilver(object oItem)
{
//Does nothing so far
itemproperty ipSilver = ItemPropertyMaterial(IP_MATERIAL_SILVER);
IPSafeAddItemProperty(oItem, ipSilver, 0.0f, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
}
*/
void MakeMundaneCrystal(object oItem)
/* void MakeMundaneCrystal(object oItem)
{
//Does nothing so far
itemproperty ipCrystal = ItemPropertyMaterial(IP_MATERIAL_GEM_CRYSTAL_MUNDANE);
IPSafeAddItemProperty(oItem, ipCrystal, 0.0f, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
}
*/
void MakeDeepCrystal(object oItem)
/* void MakeDeepCrystal(object oItem)
{
//Does nothing so far
itemproperty ipDeepCrystal = ItemPropertyMaterial(IP_MATERIAL_GEM_CRYSTAL_DEEP);
IPSafeAddItemProperty(oItem, ipDeepCrystal, 0.0f, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
}
*/
//Creates an item on oOwner, from the baseitemtype and base AC (for armour)
object CreateStandardItem(object oOwner, int nBaseItemType, int nBaseAC = -1)
@@ -2985,4 +3269,4 @@ int ITEM_APPR_WEAPON_COLOR_MIDDLE = 1;
int ITEM_APPR_WEAPON_COLOR_TOP = 2;
*/
// void main () {}
//:: void main () {}

View File

@@ -498,6 +498,7 @@ effect EffectFatigue(){
effect eReturn = EffectAbilityDecrease(ABILITY_STRENGTH, 2);
eReturn = EffectLinkEffects(eReturn, EffectAbilityDecrease(ABILITY_DEXTERITY, 2));
eReturn = EffectLinkEffects(eReturn, EffectMovementSpeedDecrease(25));
eReturn = EffectLinkEffects(eReturn, EffectIcon(EFFECT_ICON_FATIGUE));
eReturn = TagEffect(eReturn, "PRCFatigue");
return eReturn;
}

View File

@@ -6336,6 +6336,13 @@ const int FEAT_HIDDEN_TALENT_THICKSKIN = 25944;
const int FEAT_HIDDEN_TALENT_VIGOR = 25945;
const int FEAT_HIDDEN_TALENT_GRIP_IRON = 25946;
//:: Player's Handbook II feats
const int FEAT_COMBAT_FOCUS = -9999;
const int FEAT_COMBAT_STABILITY = -9998;
const int FEAT_COMBAT_DEFENSE = -9997;
const int FEAT_COMBAT_VIGOR = -9996;
const int FEAT_COMBAT_AWARENESS = -9995;
const int FEAT_COMBAT_STRIKE = -9994;

View File

@@ -797,6 +797,7 @@ int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
if (nCastingClass == CLASS_TYPE_BARD || GetLevelByClass(CLASS_TYPE_BARD, oCaster))
{
//:: Includes RHD as bard. If they started with bard levels, then it
//:: counts as a prestige class, otherwise RHD is used instead of bard levels.
if(nRace == RACIAL_TYPE_GLOURA)
@@ -904,9 +905,13 @@ int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
if(GetHasFeat(FEAT_UNSEEN_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_BARD, oCaster))
// if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_BARD, oCaster))
// nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster);
if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_BARD, oCaster)
&& !(GetRacialType(oCaster) == RACIAL_TYPE_GLOURA && !GetLevelByClass(CLASS_TYPE_BARD, oCaster)))
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster);
if(GetHasFeat(FEAT_WWOC_SPELLCASTING_BARD, oCaster))
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster);
@@ -960,7 +965,8 @@ int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
}
//:: End Bard Arcane PrC casting calculations
if(nCastingClass == CLASS_TYPE_BARD || nCastingClass == CLASS_TYPE_BARD && nRace == RACIAL_TYPE_GLOURA && !GetLevelByClass(CLASS_TYPE_BARD, oCaster))
//if(nCastingClass == CLASS_TYPE_BARD || nCastingClass == CLASS_TYPE_BARD && nRace == RACIAL_TYPE_GLOURA && !GetLevelByClass(CLASS_TYPE_BARD, oCaster))
if((nCastingClass == CLASS_TYPE_FEY || nCastingClass == CLASS_TYPE_BARD) && nRace == RACIAL_TYPE_GLOURA && !GetLevelByClass(CLASS_TYPE_BARD, oCaster))
{
if(DEBUG) DoDebug("prc_inc_castlvl >> Found Fey RHD caster (not bard)");

View File

@@ -1572,7 +1572,7 @@ void BarbarianRage(object oPC)
if (nLevel > 0)
{
// Spell Rage: starts at 1st level, +1 use every 5 Rage Mage levels
int nUses = 1 + ((nLevel - 1) / 5);
int nUses = 1 + (nLevel / 5);
FeatUsePerDay(oPC, FEAT_SPELL_RAGE, -1, nUses);
}

View File

@@ -488,7 +488,7 @@ void DoNaturalWeaponHB(object oPC = OBJECT_SELF)
if(array_exists(oPC, ARRAY_NAT_SEC_WEAP_RESREF)
&& !GetIsPolyMorphedOrShifted(oPC))
{
DoDebug("prc_inc_nat_hb >> DoNaturalWeaponHB: creature has natural secondary weapons");
if(DEBUG) DoDebug("prc_inc_nat_hb >> DoNaturalWeaponHB: creature has natural secondary weapons");
UpdateSecondaryWeaponSizes(oPC);
int i;
while(i < array_get_size(oPC, ARRAY_NAT_SEC_WEAP_RESREF))

View File

@@ -417,7 +417,10 @@ int GetPrCAdjustedClassLevel(int nClass, object oCaster = OBJECT_SELF)
// is it arcane, divine or neither?
if(GetIsArcaneClass(nClass, oCaster) && nClass != CLASS_TYPE_SUBLIME_CHORD)
{
if (GetPrimaryArcaneClass(oCaster) == nClass) // adjust for any PrCs
if(nClass == CLASS_TYPE_FEY && GetRacialType(oCaster) == RACIAL_TYPE_GLOURA)
iTemp = GetArcanePRCLevels(oCaster, nClass);
else if (GetPrimaryArcaneClass(oCaster) == nClass) // adjust for any PrCs
iTemp = GetArcanePRCLevels(oCaster, nClass);
}
else if(GetIsDivineClass(nClass, oCaster))

View File

@@ -76,7 +76,7 @@
/* This variable MUST be updated with every new version of the PRC!!! */
const string PRC_VERSION = "PRC8 4.79";
const string PRC_VERSION = "PRC8 4.80";
/* This variable MUST be updated every time 'assemble_spellbooks.bat' is run!!! */
@@ -86,6 +86,13 @@
* Spell switches *
\******************************************************************************/
/**
* Show detailed spell resistance check information to the caster
* When enabled, displays the roll vs SR values when checking spell resistance
*/
const string PRC_SHOW_SR_CHECK_DETAILS = "PRC_SHOW_SR_CHECK_DETAILS";
/** Material Components
* Set switch to 1 to activate this
* This allows material components in NWN through the materialcomp.2da

View File

@@ -120,6 +120,10 @@ const int PRC_GEM_PERLEVEL = 6;
// Craft Skull Talisman constants
const int PRC_SKULL_BASECOST = 7;
int GetWeaponType(int nBaseItem);
void RemoveMasterworkProperties(object oItem);
// * Returns TRUE if an item is a Craft Base Item
// * to be used in spellscript that can be cast on items - i.e light
int CIGetIsCraftFeatBaseItem( object oItem );
@@ -214,6 +218,78 @@ int CICraftCheckCreateInfusion(object oSpellTarget, object oCaster, int nID = 0)
/* Function definitions */
//////////////////////////////////////////////////
void RemoveMasterworkProperties(object oItem)
{
if(DEBUG) DoDebug("RemoveMasterworkProperties() called on: " + DebugObject2Str(oItem));
int nBase = GetBaseItemType(oItem);
if(DEBUG) DoDebug("prc_x2_craft >> RemoveMasterworkProperties(): Item base type: " + IntToString(nBase));
int nRemoved = 0;
// For armor/shields: remove only the Quality property, keep skill bonuses
if((nBase == BASE_ITEM_ARMOR) ||
(nBase == BASE_ITEM_SMALLSHIELD) ||
(nBase == BASE_ITEM_LARGESHIELD) ||
(nBase == BASE_ITEM_TOWERSHIELD))
{
if(DEBUG) DoDebug("prc_x2_craft >> RemoveMasterworkProperties(): Processing armor/shield");
itemproperty ip = GetFirstItemProperty(oItem);
while(GetIsItemPropertyValid(ip))
{
string sTag = GetItemPropertyTag(ip);
int nType = GetItemPropertyType(ip);
if(DEBUG) DoDebug("prc_x2_craft >> RemoveMasterworkProperties(): Found property - Type: " + IntToString(nType) +
", Tag: " + sTag +
", String: " + DebugIProp2Str(ip));
if(sTag == "Quality_Masterwork" && nType == ITEM_PROPERTY_QUALITY)
{
if(DEBUG) DoDebug("prc_x2_craft >> RemoveMasterworkProperties(): Removing Quality property");
RemoveItemProperty(oItem, ip);
nRemoved++;
ip = GetFirstItemProperty(oItem); // Restart iteration
continue;
}
ip = GetNextItemProperty(oItem);
}
}
// For weapons/ammo: remove both Quality and Attack Bonus properties
if(GetWeaponType(nBase) ||
StringToInt(Get2DACache("prc_craft_gen_it", "Type", nBase)) == 4)
{
if(DEBUG) DoDebug("prc_x2_craft >> RemoveMasterworkProperties(): Processing weapon/ammo");
itemproperty ip = GetFirstItemProperty(oItem);
while(GetIsItemPropertyValid(ip))
{
string sTag = GetItemPropertyTag(ip);
int nType = GetItemPropertyType(ip);
if(DEBUG) DoDebug("prc_x2_craft >> RemoveMasterworkProperties(): Found property - Type: " + IntToString(nType) +
", Tag: " + sTag +
", String: " + DebugIProp2Str(ip));
// Check for both Quality and Attack Bonus with Quality_Masterwork tag
if(sTag == "Quality_Masterwork" &&
(nType == ITEM_PROPERTY_QUALITY || nType == ITEM_PROPERTY_ATTACK_BONUS))
{
if(DEBUG) DoDebug("prc_x2_craft >> RemoveMasterworkProperties(): Removing property type " + IntToString(nType));
RemoveItemProperty(oItem, ip);
nRemoved++;
ip = GetFirstItemProperty(oItem); // Restart iteration
continue;
}
ip = GetNextItemProperty(oItem);
}
}
if(DEBUG) DoDebug("prc_x2_craft: RemoveMasterworkProperties() completed. Removed " +
IntToString(nRemoved) + " properties.");
}
// * Returns the innate level of a spell. If bDefaultZeroToOne is given
// * Level 0 spell will be returned as level 1 spells
@@ -2481,6 +2557,8 @@ int CIDoCraftItemFromConversation(int nNumber)
if (GetIsObjectValid(oRet))
{
RemoveMasterworkProperties(oMajor);
// -----------------------------------------------------------------------
// Copy all item properties from the major object on the resulting item
// Through we problably won't use this, its a neat thing to have for the
@@ -2499,6 +2577,7 @@ int CIDoCraftItemFromConversation(int nNumber)
{
//TakeGoldFromCreature(stItem.nCost, oPC,TRUE);
SpendGP(oPC, stItem.nCost);
RemoveMasterworkProperties(oMajor);
IPCopyItemProperties(oMajor,oRet);
}
// set success variable for conversation

View File

@@ -304,10 +304,31 @@ int PRCDoResistSpell(object oCaster, object oTarget, int nEffCasterLvl=0, float
}
}
//:: A tie favors the caster.
int nSRValue = PRCGetSpellResistance(oTarget, oCaster);
int nD20Roll = d20(1);
int nCasterTotal = nEffCasterLvl + nD20Roll + iWeav;
// A tie favors the caster.
if ((nEffCasterLvl + d20(1)+iWeav) < PRCGetSpellResistance(oTarget, oCaster))
if (nCasterTotal < nSRValue)
nResist = SPELL_RESIST_PASS;
//:: Optional Detailed SR check to caster
if (GetIsPC(oCaster) && nResist != SPELL_RESIST_MANTLE && nResist != SPELL_RESIST_GLOBE && nSRValue > 0 && GetPRCSwitch(PRC_SHOW_SR_CHECK_DETAILS))
{
string message = nResist == SPELL_RESIST_FAIL ?
"Target affected. Roll: " + IntToString(nCasterTotal) + " vs SR: " + IntToString(nSRValue) :
"Target resisted. Roll: " + IntToString(nCasterTotal) + " vs SR: " + IntToString(nSRValue) +
" (missed by " + IntToString(nSRValue - nCasterTotal) + ")";
SendMessageToPC(oCaster, message);
}
//:: Basic pass/fail messages
PRCShowSpellResist(oCaster, oTarget, nResist, fDelay);
/* // A tie favors the caster.
if ((nEffCasterLvl + d20(1)+iWeav) < PRCGetSpellResistance(oTarget, oCaster))
nResist = SPELL_RESIST_PASS; */
}
}
@@ -399,3 +420,5 @@ int CheckSpellfire(object oCaster, object oTarget, int bFriendly = FALSE)
//absorbed
return 1;
}
//:; void main(){}

View File

@@ -1724,7 +1724,7 @@ int IsHiddenTalent(object oPC = OBJECT_SELF)
GetHasFeat(FEAT_HIDDEN_TALENT_ELFSIGHT, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_EMPATHY, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_EMPTYMIND, oPC) ||
//GetHasFeat(FEAT_HIDDEN_TALENT_ENERGYRAY, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_ENERGYRAY, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_ENTANGLE, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_EXPANSION, oPC) ||
GetHasFeat(FEAT_HIDDEN_TALENT_FARHAND, oPC) ||
@@ -1836,7 +1836,7 @@ int GetHiddenTalentCount(object oPC = OBJECT_SELF)
if (GetHasFeat(FEAT_HIDDEN_TALENT_ELFSIGHT, oPC)) nCount++;
if (GetHasFeat(FEAT_HIDDEN_TALENT_EMPATHY, oPC)) nCount++;
if (GetHasFeat(FEAT_HIDDEN_TALENT_EMPTYMIND, oPC)) nCount++;
//if (GetHasFeat(FEAT_HIDDEN_TALENT_ENERGYRAY, oPC)) nCount++;
if (GetHasFeat(FEAT_HIDDEN_TALENT_ENERGYRAY, oPC)) nCount++;
if (GetHasFeat(FEAT_HIDDEN_TALENT_ENTANGLE, oPC)) nCount++;
if (GetHasFeat(FEAT_HIDDEN_TALENT_EXPANSION, oPC)) nCount++;
if (GetHasFeat(FEAT_HIDDEN_TALENT_FARHAND, oPC)) nCount++;
@@ -1889,7 +1889,10 @@ int GetIsHiddenTalentPower(object oPC, int nPower)
if(nPower == POWER_ELFSIGHT && GetHasFeat(FEAT_HIDDEN_TALENT_ELFSIGHT, oPC)) return TRUE;
if(nPower == POWER_EMPATHY && GetHasFeat(FEAT_HIDDEN_TALENT_EMPATHY, oPC)) return TRUE;
if(nPower == POWER_EMPTYMIND && GetHasFeat(FEAT_HIDDEN_TALENT_EMPTYMIND, oPC)) return TRUE;
//if(nPower == POWER_ENERGYRAY && GetHasFeat(FEAT_HIDDEN_TALENT_ENERGYRAY, oPC)) return TRUE;
if(nPower == POWER_ENERGYRAY_FIRE && GetHasFeat(FEAT_HIDDEN_TALENT_ENERGYRAY, oPC)) return TRUE;
if(nPower == POWER_ENERGYRAY_COLD && GetHasFeat(FEAT_HIDDEN_TALENT_ENERGYRAY, oPC)) return TRUE;
if(nPower == POWER_ENERGYRAY_ELEC && GetHasFeat(FEAT_HIDDEN_TALENT_ENERGYRAY, oPC)) return TRUE;
if(nPower == POWER_ENERGYRAY_SONIC && GetHasFeat(FEAT_HIDDEN_TALENT_ENERGYRAY, oPC)) return TRUE;
if(nPower == POWER_ENTANGLE && GetHasFeat(FEAT_HIDDEN_TALENT_ENTANGLE, oPC)) return TRUE;
if(nPower == POWER_EXPANSION && GetHasFeat(FEAT_HIDDEN_TALENT_EXPANSION, oPC)) return TRUE;
if(nPower == POWER_FARHAND && GetHasFeat(FEAT_HIDDEN_TALENT_FARHAND, oPC)) return TRUE;

View File

@@ -29,7 +29,7 @@
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
#include "prc_inc_spells"
//////////////////////////////////////////////////
/* Constants */
//////////////////////////////////////////////////
@@ -572,6 +572,22 @@ int GetMaxPowerCount(object oCreature, int nList)
int GetHasPower(int nPower, object oCreature = OBJECT_SELF)
{
// Debug output
if (DEBUG) DoDebug("GetHasPower: Checking power " + IntToString(nPower));
// Check if it's a subradial spell first
if (GetIsSubradialSpell(nPower))
{
if(DEBUG) DoDebug("GetHasPower: " + IntToString(nPower) + " is a subradial");
int nMasterSpell = GetMasterSpellFromSubradial(nPower);
if (nMasterSpell != -1)
{
if(DEBUG) DoDebug("GetHasPower: Master spell is " + IntToString(nMasterSpell));
nPower = nMasterSpell;
}
}
// Check MISC list first (for Hidden Talent and similar feats)
if(GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_INVALID), oCreature))
return TRUE;
@@ -597,6 +613,7 @@ int GetHasPower(int nPower, object oCreature = OBJECT_SELF)
// add new psionic classes here
)
return TRUE;
return FALSE;
}

View File

@@ -558,6 +558,9 @@ void _ManifestationHB(object oManifester, location lManifester, object oMfToken)
if(DEBUG) DoDebug("_ManifestationHB(): Manifester moved or lost concentration, destroying token");
_DestroyManifestationToken(oManifester, oMfToken);
//:: Clean up variables
_CleanManifestationVariables(oManifester);
// Inform manifester
FloatingTextStrRefOnCreature(16828435, oManifester, FALSE); // "You have lost concentration on the power you were attempting to manifest!"
}
@@ -810,6 +813,25 @@ struct manifestation EvaluateManifestation(object oManifester, object oTarget, s
manif.bCanManifest = FALSE;
}
// Check defensive manifestation BEFORE PP deduction
if(GetLocalInt(oManifester, "PRC_DefensiveManifestActive"))
{
int nPowerLevel = GetPowerLevel(oManifester);
int nDC = 15 + nPowerLevel;
if(!GetPRCIsSkillSuccessful(oManifester, SKILL_CONCENTRATION, nDC))
{
// Failed - deduct PP and prevent manifestation
LosePowerPoints(oManifester, manif.nPPCost, TRUE);
PayMetapsionicsFocuses(manif);
manif.bCanManifest = FALSE;
SendMessageToPC(oManifester, "Defensive manifestation concentration check failed.");
return manif;
}
manif.bDefensive = TRUE;
}
// Psi-like abilities ignore PP costs and metapsi
if(!bIsPsiLike)
{
@@ -820,7 +842,7 @@ struct manifestation EvaluateManifestation(object oManifester, object oTarget, s
PayMetapsionicsFocuses(manif);
}
if(GetLocalInt(oManifester, "PRC_DefensiveManifestActive"))
/* if(GetLocalInt(oManifester, "PRC_DefensiveManifestActive"))
{
// Concentration check (DC 15 + power level)
int nPowerLevel = GetPowerLevel(oManifester);
@@ -837,7 +859,7 @@ struct manifestation EvaluateManifestation(object oManifester, object oTarget, s
// Set defensive flag for any other systems that need it
SendMessageToPC(oManifester, "Defensive manifestion concentration check successful.");
manif.bDefensive = TRUE;
}
} */
//* APPLY SIDE-EFFECTS THAT RESULT FROM SUCCESSFULL MANIFESTATION HERE *//
// Psicraft for all those who can see
@@ -1118,4 +1140,4 @@ struct manifestation EvaluateDiaDragChannel(object oManifester, object oTarget,
}
// Test main
//void main(){}
//:: void main(){}

View File

@@ -327,8 +327,25 @@ int ArcaneSpellFailure(object oCaster, int nCastingClass, int nSpellLevel, int n
default: break;
}
}
// Hexblade can cast in light/medium armour and while using small shield.
// Hexblade can cast in light armour only.
else if(nCastingClass == CLASS_TYPE_HEXBLADE)
{
//armors
switch(nAC)
{
case 1: nASF -= 5; break; //light
case 2: nASF -= 10; break; //light
case 3: nASF -= 20; break; //light
case 4: nASF = bBattleCaster ? 0 : nASF; break; //medium with Battlecaster
case 5: nASF = bBattleCaster ? 0 : nASF; break; //medium with Battlecaster
default: break;
}
}
// WRONG: Hexblade can cast in light/medium armour and while using small shield.
//:: RIGHT: Hexblades are proficient with all simple and martial weapons, and with light armor but not with shields.
/* else if(nCastingClass == CLASS_TYPE_HEXBLADE)
{
//shields
if(GetBaseItemType(oShield) == BASE_ITEM_SMALLSHIELD) nASF -= 5;
@@ -345,7 +362,7 @@ int ArcaneSpellFailure(object oCaster, int nCastingClass, int nSpellLevel, int n
case 8: nASF -= bBattleCaster ? 45 : 0; break;
default: break;
}
}
} */
// Bards cannot cast in light armour and while using small shield in 3e
/* else if(nCastingClass == CLASS_TYPE_BARD)
{
@@ -2163,8 +2180,33 @@ int PRCSpellEffects(object oCaster, object oTarget, int nSpellID, int nSpellLeve
if(GetPRCSwitch(PRC_PNP_TENSERS_TRANSFORMATION))
{
if(GetHasSpellEffect(SPELL_TENSERS_TRANSFORMATION, oCaster))
return FALSE;
{
// Allow potions - they are not spell trigger/completion items
object oSpellCastItem = PRCGetSpellCastItem();
if(GetIsObjectValid(oSpellCastItem))
{
int nItemType = GetBaseItemType(oSpellCastItem);
if(nItemType == BASE_ITEM_ENCHANTED_POTION
|| nItemType == BASE_ITEM_POTIONS)
{
// Continue with other checks
}
else
{
return FALSE; // Block other magic items
}
}
else
{
return FALSE; // Block regular spellcasting
}
}
}
/* {
if(GetHasSpellEffect(SPELL_TENSERS_TRANSFORMATION, oCaster))
return FALSE;
} */
// Gaseous Form check
if(GetHasSpellEffect(SPELL_GASEOUS_FORM, oCaster))

View File

@@ -166,24 +166,37 @@ void main()
string sFeatID;
int added = 0;
for(i = 14001; i < 14260 ; i++)
for(i = 14001; i < 14351 ; i++)
{
// Skip blank IDs between 14266 and 14329
if(i >= 14266 && i < 14330)
continue;
nPowerLevel = StringToInt(Get2DACache("spells", "Innate", i));
if(nPowerLevel > nMaxLevel)
break;
continue;
string sName = GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", i)));
if(sName != "")
// Check if it's a regular power or a subradial
int bHasPower = GetHasPower(i, oMeldshaper);
if (!bHasPower && GetIsSubradialSpell(i))
{
if (GetHasPower(i, oMeldshaper))
// For subradials, check if they know the master spell
int nMasterSpell = GetMasterSpellFromSubradial(i);
if (nMasterSpell != -1)
{
bHasPower = GetHasPower(nMasterSpell, oMeldshaper);
}
}
if (bHasPower)
{
if(SORT) AddToTempList(oMeldshaper, sName, i);
else AddChoice(sName, i, oMeldshaper);
added++;
}
}
}
if(SORT)
{

View File

@@ -0,0 +1,161 @@
//:://////////////////////////////////////////////////////////////////
//:: Hidden Talent
//:: ft_hidntalent_ft
//:://////////////////////////////////////////////////////////////////
/** @file
This allows you to pick a hidden talent @ 1st level
@original author Fencas
@date Created - 2025-01-12
@revised by Jaysyn (for Hidden Talent)
@date Revised - 2025-01-30 07:42:03
*/
//:://////////////////////////////////////////////////////////////////
#include "inc_dynconv"
#include "prc_inc_function"
#include "NW_I0_GENERIC"
#include "inc_persist_loca"
//////////////////////////////////////////////////
// Constant Definitions
//////////////////////////////////////////////////
const int STAGE_SELECT_ABIL = 0;
const int STAGE_CONFIRMATION = 1;
//////////////////////////////////////////////////
// Main Function
//////////////////////////////////////////////////
void main()
{
object oPC = GetPCSpeaker();
object oSkin = GetPCSkin(oPC);
int nRow;
int nValue = GetLocalInt(oPC, DYNCONV_VARIABLE);
int nStage = GetStage(oPC);
int nLevel = GetPersistantLocalInt(oPC, "HiddenTalentCheck");
// Abort if DynConv_Var is not set properly
if (nValue == 0)
{
if (DEBUG) DoDebug("ft_hidntalent_ft: Aborting due to error.");
return;
}
// Conversation Setup Stage
if (nValue == DYNCONV_SETUP_STAGE)
{
if (!GetIsStageSetUp(nStage, oPC))
{
if (nStage == STAGE_SELECT_ABIL)
{
// --- Step 1: Mark Already Selected Hidden Talents ---
int nStartFeat = 25901;
int nEndFeat = 25946;
effect eEffect = GetFirstEffect(oPC);
while (GetIsEffectValid(eEffect))
{
string sTag = GetEffectTag(eEffect);
// Check if effect tag matches Hidden Talent pattern
if(GetStringLeft(sTag, 13) == "HiddenTalent_")
{
int nFeatID = StringToInt(GetSubString(sTag, 13, GetStringLength(sTag) - 13));
SetLocalInt(oPC, "HiddenTalent_" + IntToString(nFeatID), 1);
}
eEffect = GetNextEffect(oPC);
}
// --- Step 2: Display Available Feats ---
SetHeader("Choose a Hidden Talent:");
for (nRow = nStartFeat; nRow <= nEndFeat; nRow++)
{
string sTextRef = Get2DAString("feat", "FEAT", nRow);
string sName = GetStringByStrRef(StringToInt(sTextRef));
if(sName == "") sName = "Power " + IntToString(nRow);
if (!GetHasFeat(nRow, oPC) && !GetLocalInt(oPC, "HiddenTalent_" + IntToString(nRow)))
{
AddChoice(sName, nRow, oPC);
}
}
SetDefaultTokens();
MarkStageSetUp(STAGE_SELECT_ABIL, oPC);
}
else if (nStage == STAGE_CONFIRMATION)
{
int nChoice = GetLocalInt(oPC, "HiddenTalentChoice");
string sFeatName = GetStringByStrRef(StringToInt(Get2DAString("feat", "FEAT", nChoice)));
if(sFeatName == "") sFeatName = "Power " + IntToString(nChoice);
AddChoice(GetStringByStrRef(4752), TRUE); // "Yes"
AddChoice(GetStringByStrRef(4753), FALSE); // "No"
string sText = "You have selected " + sFeatName + ".\n";
sText += "Is this correct?";
SetHeader(sText);
MarkStageSetUp(STAGE_CONFIRMATION, oPC);
}
}
// Token Setup
SetupTokens();
}
else if (nValue == DYNCONV_EXITED)
{
if (DEBUG) DoDebug("ft_hidntalent_ft: Running exit handler");
DeleteLocalInt(oPC, "HiddenTalentChoice");
}
else if (nValue == DYNCONV_ABORTED)
{
if (DEBUG) DoDebug("ft_hidntalent_ft: ERROR: Conversation abort section run");
DeleteLocalInt(oPC, "HiddenTalentChoice");
}
// --- Stage Selection & Feat Application ---
else
{
int nChoice = GetChoice(oPC);
int nLevel = GetHitDice(oPC);
if (nStage == STAGE_SELECT_ABIL)
{
// Store the choice and go to confirmation
SetLocalInt(oPC, "HiddenTalentChoice", nChoice);
nStage = STAGE_CONFIRMATION;
MarkStageNotSetUp(STAGE_SELECT_ABIL, oPC);
}
else if (nStage == STAGE_CONFIRMATION)
{
if (nChoice == TRUE) // User confirmed "Yes"
{
int nFeatChoice = GetLocalInt(oPC, "HiddenTalentChoice");
if (nFeatChoice > 0)
{
effect eBonusFeat = EffectBonusFeat(nFeatChoice);
eBonusFeat = UnyieldingEffect(eBonusFeat);
eBonusFeat = TagEffect(eBonusFeat, "HiddenTalent_" + IntToString(nFeatChoice));
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonusFeat, oPC);
}
SetPersistantLocalInt(oPC, "HiddenTalentChosen", 1);
SetPersistantLocalInt(oPC, "HiddenTalent_" + IntToString(nLevel), 1);
DeletePersistantLocalInt(oPC, "HiddenTalentCheck");
DeleteLocalInt(oPC, "HiddenTalentChoice");
AllowExit(DYNCONV_EXIT_FORCE_EXIT);
}
else // User chose "No"
{
nStage = STAGE_SELECT_ABIL;
MarkStageNotSetUp(STAGE_SELECT_ABIL, oPC);
MarkStageNotSetUp(STAGE_CONFIRMATION, oPC);
}
}
if (DEBUG) DoDebug("ft_hidntalent_ft: New stage: " + IntToString(nStage));
SetStage(nStage, oPC);
}
}

View File

@@ -1,174 +0,0 @@
//:://////////////////////////////////////////////
//:: Hidden Talent Power Conversation
//:: hidden_talent_cv
//:://////////////////////////////////////////////
/** @file
This allows you to choose a psionic power for Hidden Talent feat
@author Modified from prc_favsoulweap.nss
@date Created - 2025.12.14
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
#include "prc_inc_fork"
#include "inc_item_props"
#include "prc_x2_itemprop"
#include "inc_dynconv"
#include "psi_inc_psifunc"
//////////////////////////////////////////////////
/* Constant defintions */
//////////////////////////////////////////////////
const int STAGE_POWER_CHOICE = 0;
const int STAGE_CONFIRMATION = 1;
//////////////////////////////////////////////////
/* Aid functions */
//////////////////////////////////////////////////
//////////////////////////////////////////////////
/* Main function */
//////////////////////////////////////////////////
void main()
{
//object oPC = GetPCSpeaker();
object oPC = OBJECT_SELF;
/* Get the value of the local variable set by the conversation script calling
* this script. Values:
* DYNCONV_ABORTED Conversation aborted
* DYNCONV_EXITED Conversation exited via the exit node
* DYNCONV_SETUP_STAGE System's reply turn
* 0 Error - something else called the script
* Other The user made a choice
*/
int nValue = GetLocalInt(oPC, DYNCONV_VARIABLE);
// The stage is used to determine the active conversation node.
// 0 is the entry node.
int nStage = GetStage(oPC);
if(DEBUG) DoDebug("hidden_talent_cv: Entering Hidden Talent conversation");
// Check which of the conversation scripts called the scripts
if(nValue == 0) // All of them set the DynConv_Var to non-zero value, so something is wrong -> abort
return;
if(nValue == DYNCONV_SETUP_STAGE)
{
// Check if this stage is marked as already set up
// This stops list duplication when scrolling
if(!GetIsStageSetUp(nStage, oPC))
{
// variable named nStage determines the current conversation node
// Function SetHeader to set the text displayed to the PC
// Function AddChoice to add a response option for the PC. The responses are show in order added
if(nStage == STAGE_POWER_CHOICE)
{
string sHeader1 = "Select a 1st-level psionic power for Hidden Talent.\n";
sHeader1 += "This will grant you the ability to manifest this power as a psionic-like ability.";
SetHeader(sHeader1);
// Loop through all Hidden Talent feats (25901-25946)
int added = 0;
int i;
string sFeatName;
for(i = 25901; i <= 25946; i++)
{
// Get the feat name from the feats.2da
sFeatName = Get2DACache("feats", "NAME", i);
if(sFeatName != "" && sFeatName != "****")
{
// Convert the feat constant name to display name
// Remove "FEAT_HIDDEN_TALENT_" and replace underscores with spaces
string sDisplayName = GetStringByStrRef(StringToInt(sFeatName));
if(sDisplayName == "") sDisplayName = "Power " + IntToString(i);
AddChoice(sDisplayName, i, oPC);
added++;
}
}
if(added == 0)
{
AddChoice("No valid powers found.", 0, oPC);
}
MarkStageSetUp(STAGE_POWER_CHOICE, oPC); // This prevents the setup being run for this stage again until MarkStageNotSetUp is called for it
SetDefaultTokens(); // Set the next, previous, exit and wait tokens to default values
}
else if(nStage == STAGE_CONFIRMATION)//confirmation
{
int nChoice = GetLocalInt(oPC, "HiddenTalentPower");
AddChoice(GetStringByStrRef(4752), TRUE); // "Yes"
AddChoice(GetStringByStrRef(4753), FALSE); // "No"
string sText = "You have selected the Hidden Talent power.\n";
sText += "Is this correct?";
SetHeader(sText);
MarkStageSetUp(STAGE_CONFIRMATION, oPC);
}
}
// Do token setup
SetupTokens();
}
// End of conversation cleanup
else if(nValue == DYNCONV_EXITED)
{
// End of conversation cleanup
DeleteLocalInt(oPC, "HiddenTalentPower");
}
// Abort conversation cleanup.
// NOTE: This section is only run when the conversation is aborted
// while aborting is allowed. When it isn't, the dynconvo infrastructure
// handles restoring the conversation in a transparent manner
else if(nValue == DYNCONV_ABORTED)
{
// End of conversation cleanup
DeleteLocalInt(oPC, "HiddenTalentPower");
}
// Handle PC responses
else
{
// variable named nChoice is the value of the player's choice as stored when building the choice list
// variable named nStage determines the current conversation node
int nChoice = GetChoice(oPC);
if(nStage == STAGE_POWER_CHOICE)
{
// Go to this stage next
nStage = STAGE_CONFIRMATION;
SetLocalInt(oPC, "HiddenTalentPower", nChoice);
}
else if(nStage == STAGE_CONFIRMATION)//confirmation
{
if(nChoice == TRUE)
{
int nFeatID = GetLocalInt(oPC, "HiddenTalentPower");
// Grant the Hidden Talent feat directly
AddSkinFeat(nFeatID, nFeatID, GetPCSkin(oPC), oPC);
// Mark that Hidden Talent has been chosen
SetPersistantLocalInt(oPC, "HiddenTalentChosen", TRUE);
// And we're all done
AllowExit(DYNCONV_EXIT_FORCE_EXIT);
}
else
{
nStage = STAGE_POWER_CHOICE;
MarkStageNotSetUp(STAGE_POWER_CHOICE, oPC);
MarkStageNotSetUp(STAGE_CONFIRMATION, oPC);
}
DeleteLocalInt(oPC, "HiddenTalentPower");
}
// Store the stage value. If it has been changed, this clears out the choices
SetStage(nStage, oPC);
}
}

View File

@@ -1,529 +0,0 @@
//::///////////////////////////////////////////////
//:: Hidden Talent
//:: psi_hiddentalent.nss
//:://////////////////////////////////////////////
/*
Your latent power of psionics flares to life, conferring upon you
the designation of a psionic character. As a psionic character,
you gain a reserve of 2 power points, and you can take psionic
feats, metapsionic feats, and psionic item creation feats. If you
have or take a class that grants power points, the power points
gained from Hidden Talent are added to your total power point
reserve.
When you take this feat, choose one 1st-level power from any
psionic class list. You know this power (it becomes one of your
powers known). You can manifest this power with the power points
provided by this feat if you have a Charisma score of 11 or higher.
If you have no psionic class levels, you are considered a
1st-level manifester when manifesting this power. If you have
psionic class levels, you can manifest the power at the highest
manifester level you have attained. (This is not a manifester
level, and it does not add to any manifester levels gained by
taking psionic classes.) If you have no psionic class levels,
use Charisma to determine how powerful a power you can manifest
and how hard those powers are to resist.
*/
//:://////////////////////////////////////////////
//:: Created By: Jaysyn
//:: Created On: 2025-01-29 09:52:24
//:://////////////////////////////////////////////
#include "prc_feat_const"
#include "psi_inc_core"
#include "psi_inc_powknown"
int GetPowerRowID(int nPowerList, int nPower)
{
string sPowerFile = GetAMSDefinitionFileName(nPowerList);
int nCheck = -1;
int i;
for(i = 0; i < GetPRCSwitch(FILE_END_CLASS_POWER); i++)
{
nCheck = StringToInt(Get2DACache(sPowerFile, "RealSpellID", i));
// Find the row ID of the power we need and return it
if(nCheck == nPower)
{
return i;
}
}
// this should never trigger
return -1;
}
void GrantHiddenTalent(object oPC, int nPowerList, int nFeat, int nPower, string sTag)
{
if (GetHasFeat(nFeat, oPC) && !GetPersistantLocalInt(oPC, sTag))
{
if(DEBUG) DoDebug("psi_hiddentalent: Adding power ID " + IntToString(nPower));
AddPowerKnown(oPC, nPowerList, GetPowerRowID(nPowerList, nPower), TRUE, 1);
SetKnownPowersModifier(oPC, nPowerList, GetKnownPowersModifier(oPC, nPowerList) + 1);
SetPersistantLocalInt(oPC, sTag, TRUE);
}
}
void main()
{
object oPC = OBJECT_SELF;
int nPowerTotal = 1; //:: Can't have more than one Hidden Talent.
int nClass = CLASS_TYPE_INVALID;
int nPowerList = POWER_LIST_MISC;
// Determine why this script is running
if(GetRunningEvent() != EVENT_ONPLAYERLEVELDOWN)
{
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_BIOFEEDBACK, POWER_BIOFEEDBACK, "PRC_HT_BiofeedbackGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_BITE_WOLF, POWER_BITE_WOLF, "PRC_HT_BiteOfTheWolfGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_BOLT, POWER_BOLT, "PRC_HT_BoltGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_BURST, POWER_BURST, "PRC_HT_BurstGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_CALLTOMIND, POWER_CALLTOMIND, "PRC_HT_CallToMindGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_CALL_WEAPONRY, POWER_CALL_WEAPONRY, "PRC_HT_CallWeaponryGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_CHAMELEON, POWER_CHAMELEON, "PRC_HT_ChameleonGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_CLAWS_BEAST, POWER_CLAWS_BEAST, "PRC_HT_ClawsOfTheBeastGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_COMPRESSION, POWER_COMPRESSION, "PRC_HT_CompressionGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_CONCEALTHOUGHT, POWER_CONCEALTHOUGHT, "PRC_HT_ConcealThoughtsGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_CREATESOUND, POWER_CREATESOUND, "PRC_HT_CreateSoundGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_CRYSTALSHARD, POWER_CRYSTALSHARD, "PRC_HT_CrystalShardGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_DAZE, POWER_DAZE, "PRC_HT_DazeGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_DECELERATION, POWER_DECELERATION, "PRC_HT_DecelerationGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_DEFPRECOG, POWER_DEFPRECOG, "PRC_HT_DefensivePrecognitionGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_DEMORALIZE, POWER_DEMORALIZE, "PRC_HT_DemoralizeGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_DISABLE, POWER_DISABLE, "PRC_HT_DisableGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH, POWER_DISSIPATINGTOUCH, "PRC_HT_DissipatingTouchGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_DISTRACT, POWER_DISTRACT, "PRC_HT_DistractGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_ELFSIGHT, POWER_ELFSIGHT, "PRC_HT_ElfSightGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_EMPATHY, POWER_EMPATHY, "PRC_HT_EmpathyGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_EMPTYMIND, POWER_EMPTYMIND, "PRC_HT_EmptyMindGained");
//GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_ENERGYRAY, POWER_ENERGYRAY, "PRC_HT_EnergyRayGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_ENTANGLE, POWER_ENTANGLE, "PRC_HT_EntangleGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_EXPANSION, POWER_EXPANSION, "PRC_HT_ExpansionGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_FARHAND, POWER_FARHAND, "PRC_HT_FarHandGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_FORCESCREEN, POWER_FORCESCREEN, "PRC_HT_ForceScreenGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_GREASE, POWER_GREASE, "PRC_HT_GreaseGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_GRIP_IRON, POWER_GRIP_IRON, "PRC_HT_GripIronGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_HAMMER, POWER_HAMMER, "PRC_HT_HammerGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_INERTIALARMOUR, POWER_INERTIALARMOUR, "PRC_HT_InertialArmourGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_MATTERAGITATION, POWER_MATTERAGITATION, "PRC_HT_MatterAgitationGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW, POWER_METAPHYSICAL_CLAW, "PRC_HT_MetaClawGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON, POWER_METAPHYSICAL_WEAPON, "PRC_HT_MetaWeaponGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_MINDTHRUST, POWER_MINDTHRUST, "PRC_HT_MindThrustGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_MYLIGHT, POWER_MYLIGHT, "PRC_HT_MyLightGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_OFFPRECOG, POWER_OFFPRECOG, "PRC_HT_OffPrecogGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_OFFPRESC, POWER_OFFPRESC, "PRC_HT_OffPrescGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_PREVENOM, POWER_PREVENOM, "PRC_HT_PrevenomGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_PREVENOM_WEAPON, POWER_PREVENOM_WEAPON, "PRC_HT_PrevenomWeaponGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_SKATE, POWER_SKATE, "PRC_HT_SkateGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_STOMP, POWER_STOMP, "PRC_HT_StompGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_SYNESTHETE, POWER_SYNESTHETE, "PRC_HT_SynestheteGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_TELEMPATHICPRO, POWER_TELEMPATHICPRO, "PRC_HT_TeleProjGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_THICKSKIN, POWER_THICKSKIN, "PRC_HT_ThickSkinGained");
GrantHiddenTalent(oPC, POWER_LIST_MISC, FEAT_HIDDEN_TALENT_VIGOR, POWER_VIGOR, "PRC_HT_VigorGained");
}
else if(GetRunningEvent() == EVENT_ONPLAYERLEVELDOWN)
{
// Has lost Biofeedback, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_BiofeedbackGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_BIOFEEDBACK, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_BiofeedbackGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Bite of the Wolf, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_BiteOfTheWolfGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_BITE_WOLF, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_BiteOfTheWolfGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Bolt, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_BoltGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_BOLT, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_BoltGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Burst, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_BurstGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_BURST, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_BurstGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Call to Mind, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_CallToMindGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_CALLTOMIND, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_CallToMindGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Call Weaponry, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_CallWeaponryGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_CALL_WEAPONRY, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_CallWeaponryGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Chameleon, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_ChameleonGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_CHAMELEON, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_ChameleonGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Claws of the Beast, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_ClawsOfTheBeastGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_CLAWS_BEAST, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_ClawsOfTheBeastGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Compression, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_CompressionGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_COMPRESSION, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_CompressionGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Conceal Thought, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_ConcealThoughtGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_CONCEALTHOUGHT, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_ConcealThoughtGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Create Sound, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_CreateSoundGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_CREATESOUND, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_CreateSoundGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Crystal Shard, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_CrystalShardGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_CRYSTALSHARD, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_CrystalShardGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Daze, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_DazeGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_DAZE, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_DazeGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Deceleration, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_DecelerationGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_DECELERATION, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_DecelerationGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Deflection Precognition, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_DeflectionPrecognitionGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_DEFPRECOG, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_DeflectionPrecognitionGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Demoralize, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_DemoralizeGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_DEMORALIZE, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_DemoralizeGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Disable, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_DisableGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_DISABLE, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_DisableGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Dissipating Touch, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_DissipatingTouchGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_DissipatingTouchGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Distract, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_DistractGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_DISTRACT, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_DistractGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Elf Sight, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_ElfSightGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_ELFSIGHT, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_ElfSightGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Empathy, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_EmpathyGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_EMPATHY, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_EmpathyGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Empty Mind, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_EmptyMindGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_EMPTYMIND, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_EmptyMindGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Energy Ray, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_EnergyRayGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_ENERGYRAY, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_EnergyRayGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Entangling Ectoplasm, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_EntangleEctoGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_ENTANGLE, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_EntangleEctoGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Expansion, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_ExpansionGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_EXPANSION, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_ExpansionGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Far Hand, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_FarHandGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_FARHAND, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_FarHandGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Force Screen, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_ForceScreenGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_FORCESCREEN, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_ForceScreenGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Grease, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_GreaseGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_GREASE, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_GreaseGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Hammer, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_HammerGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_HAMMER, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_HammerGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Inertial Armour, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_InertialArmourGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_INERTIALARMOUR, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_InertialArmourGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Matter Agitation, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_MatterAgitationGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_MATTERAGITATION, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_MatterAgitationGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Metaphysical Claw, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_MetaClawGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_MetaClawGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Metaphysical Weapon, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_MetaWeaponGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_MetaWeaponGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Mind Thrust, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_MindThrustGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_MINDTHRUST, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_MindThrustGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost My Light, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_MyLightGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_MYLIGHT, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_MyLightGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Precognition, Offensive, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_OffPrecogGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_OFFPRECOG, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_OffPrecogGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Prescience, Offensive, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_OffPrescGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_OFFPRESC, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_OffPrescGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Prevenom, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_PrevenomGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_PREVENOM, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_PrevenomGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Prevenom Weapon, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_PrevenomWeaponGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_PREVENOM_WEAPON, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_PrevenomWeaponGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Skate, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_SkateGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_SKATE, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_SkateGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Stomp, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_StompGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_STOMP, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_StompGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Synesthete, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_SynestheteGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_SYNESTHETE, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_SynestheteGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Telempathic Projection, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_TeleProjGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_TELEMPATHICPRO, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_TeleProjGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Thicken Skin, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_ThickSkinGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_THICKSKIN, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_ThickSkinGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Vigor, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_VigorGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_VIGOR, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_VigorGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Grip of Iron, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_GripIronGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_GRIP_IRON, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_GripIronGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
//:: Remove eventhook if the character no longer has any Hidden Talent feats
if(!IsHiddenTalent())
RemoveEventScript(oPC, EVENT_ONPLAYERLEVELDOWN, "psi_hiddentalent", TRUE, FALSE);
}
}
/* #include "psi_inc_core"
#include "psi_inc_powknown"
int GetPowerRowID(int nPowerList, int nPower)
{
string sPowerFile = GetAMSDefinitionFileName(nPowerList);
int nCheck = -1;
int i;
for(i = 0; i < GetPRCSwitch(FILE_END_CLASS_POWER) ; i++)
{
nCheck = StringToInt(Get2DACache(sPowerFile, "RealSpellID", i));
// Find the row ID of the power we need and return it
if(nCheck == nPower)
{
return i;
}
}
// this should never trigger
return -1;
}
void main()
{
object oPC = OBJECT_SELF;
int nPowerList = GetPrimaryPsionicClass(oPC);
int nPowerTotal = GetKnownPowersModifier(oPC, nPowerList);
// Determine why this script is running
if(GetRunningEvent() == EVENT_ONPLAYERLEVELUP)
{
if (GetHasFeat(FEAT_HIDDEN_TALENT_BIOFEEDBACK, oPC) && !GetPersistantLocalInt(oPC, "PRC_HT_BiofeedbackGained"))
{
if(DEBUG) DoDebug("psi_hiddentalent: Adding Biofeedback");
AddPowerKnown(oPC, nPowerList, GetPowerRowID(nPowerList, POWER_BIOFEEDBACK), TRUE, GetHitDice(oPC));
SetKnownPowersModifier(oPC, nPowerList, ++nPowerTotal);
SetPersistantLocalInt(oPC, "PRC_HT_BiofeedbackGained", TRUE);
}
if (GetHasFeat(FEAT_HIDDEN_TALENT_BITE_WOLF, oPC) && !GetPersistantLocalInt(oPC, "PRC_HT_BiteOfTheWolfGained"))
{
if(DEBUG) DoDebug("psi_hiddentalent: Adding Bite of the Wolf");
AddPowerKnown(oPC, nPowerList, GetPowerRowID(nPowerList, POWER_BITEWOLF), TRUE, GetHitDice(oPC));
SetKnownPowersModifier(oPC, nPowerList, ++nPowerTotal);
SetPersistantLocalInt(oPC, "PRC_HT_BiteOfTheWolfGained", TRUE);
}
if (GetHasFeat(FEAT_HIDDEN_TALENT_BOLT, oPC) && !GetPersistantLocalInt(oPC, "PRC_HT_BoltGained"))
{
if(DEBUG) DoDebug("psi_hiddentalent: Adding Bolt");
AddPowerKnown(oPC, nPowerList, GetPowerRowID(nPowerList, POWER_BOLT), TRUE, GetHitDice(oPC));
SetKnownPowersModifier(oPC, nPowerList, ++nPowerTotal);
SetPersistantLocalInt(oPC, "PRC_HT_BoltGained", TRUE);
}
if (GetHasFeat(FEAT_HIDDEN_TALENT_BURST, oPC) && !GetPersistantLocalInt(oPC, "PRC_HT_BurstGained"))
{
if(DEBUG) DoDebug("psi_hiddentalent: Adding Burst");
AddPowerKnown(oPC, nPowerList, GetPowerRowID(nPowerList, POWER_BURST), TRUE, GetHitDice(oPC));
SetKnownPowersModifier(oPC, nPowerList, ++nPowerTotal);
SetPersistantLocalInt(oPC, "PRC_HT_BurstGained", TRUE);
}
if (GetHasFeat(FEAT_HIDDEN_TALENT_CALLTOMIND, oPC) && !GetPersistantLocalInt(oPC, "PRC_HT_CallToMindGained"))
{
if(DEBUG) DoDebug("psi_hiddentalent: Adding Call To Mind");
AddPowerKnown(oPC, nPowerList, GetPowerRowID(nPowerList, POWER_CALLTOMIND), TRUE, GetHitDice(oPC));
SetKnownPowersModifier(oPC, nPowerList, ++nPowerTotal);
SetPersistantLocalInt(oPC, "PRC_HT_CallToMindGained", TRUE);
}
// Hook to OnLevelDown to remove the power slots granted here
AddEventScript(oPC, EVENT_ONPLAYERLEVELDOWN, "psi_hiddentalent", TRUE, FALSE);
}
else if(GetRunningEvent() == EVENT_ONPLAYERLEVELDOWN)
{
// Has lost Biofeedback, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_BiofeedbackGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_BIOFEEDBACK, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_BiofeedbackGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Bolt, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_BiteOfTheWolfGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_BITE_WOLF, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_BiteOfTheWolfGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Has lost Bolt, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_HT_BoltGained") && !GetHasFeat(FEAT_HIDDEN_TALENT_BOLT, oPC))
{
DeletePersistantLocalInt(oPC, "PRC_HT_BoltGained");
SetKnownPowersModifier(oPC, nPowerList, --nPowerTotal);
}
// Remove eventhook if the character no longer has any Hidden Talent feats
if(!IsHiddenTalent)
RemoveEventScript(oPC, EVENT_ONPLAYERLEVELDOWN, "psi_hiddentalent", TRUE, FALSE);
}
} */

View File

@@ -59,8 +59,10 @@ void main()
{
effect eVis = EffectVisualEffect(VFX_IMP_MAGICAL_VISION);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oManifester, 4.0f, FALSE);
SetIdentified(oTarget, TRUE);
AssignCommand(oManifester, ActionExamine(oTarget));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oTarget, 4.5f, FALSE);
}
}

View File

@@ -1,125 +0,0 @@
//:://////////////////////////////////////////////////////////////////
//:: Hidden Talen
//:: ft_hidntalent_ft
//:://////////////////////////////////////////////////////////////////
/** @file
THis allows you to pick a hidden talent @ 1st level
@original author Fencas
@date Created - 2025-01-12
@revised by Jaysyn (for Hidden Talent)
@date Revised - 2025-01-30 07:42:03
*/
//:://////////////////////////////////////////////////////////////////
#include "inc_dynconv"
#include "prc_inc_function"
#include "NW_I0_GENERIC"
#include "inc_persist_loca"
//////////////////////////////////////////////////
// Constant Definitions
//////////////////////////////////////////////////
const int STAGE_SELECT_ABIL = 0;
//////////////////////////////////////////////////
// Main Function
//////////////////////////////////////////////////
void main()
{
object oPC = GetPCSpeaker();
object oSkin = GetPCSkin(oPC);
int nRow;
int nValue = GetLocalInt(oPC, DYNCONV_VARIABLE);
int nStage = GetStage(oPC);
int nLevel = GetPersistantLocalInt(oPC, "HiddenTalentCheck");
// Abort if DynConv_Var is not set properly
if (nValue == 0)
{
if (DEBUG) DoDebug("ft_hidntalent_ft: Aborting due to error.");
return;
}
// Conversation Setup Stage
if (nValue == DYNCONV_SETUP_STAGE)
{
if (!GetIsStageSetUp(nStage, oPC))
{
if (nStage == STAGE_SELECT_ABIL)
{
// --- Step 1: Mark Already Selected Hidden Talents ---
int nStartFeat = 25901;
int nTotalRows = FEAT_HIDDEN_TALENT_BIOFEEDBACK - FEAT_HIDDEN_TALENT_GRIP_IRON;
int nEndFeat = nStartFeat + nTotalRows;
string sFeat = Get2DAString("feat", "LABEL", nRow);
effect eEffect = GetFirstEffect(oPC);
while (GetIsEffectValid(eEffect))
{
if (GetEffectTag(eEffect) == "HiddenTalent_" + sFeat)
{
SetLocalInt(oPC, "HiddenTalent_" + IntToString(nRow), 1);
}
eEffect = GetNextEffect(oPC);
}
// --- Step 2: Display Available Feats ---
SetHeader("Choose a Hidden Talent:");
for (nRow = nStartFeat; nRow <= nEndFeat; nRow++)
{
string sName = Get2DAString("feats", "LABEL", nRow);
int nFeat = StringToInt(Get2DAString("feats", "FEAT", nRow));
if (!GetHasFeat(nRow, oPC) && !GetLocalInt(oPC, "HiddenTalent_" + IntToString(nRow)))
{
AddChoice(sName, nRow, oPC);
}
}
SetDefaultTokens();
MarkStageSetUp(STAGE_SELECT_ABIL, oPC);
}
}
// Token Setup
SetupTokens();
}
else if (nValue == DYNCONV_EXITED)
{
if (DEBUG) DoDebug("ft_hidntalent_ft: Running exit handler");
}
else if (nValue == DYNCONV_ABORTED)
{
if (DEBUG) DoDebug("ft_hidntalent_ft: ERROR: Conversation abort section run");
}
// --- Stage Selection & Feat Application ---
else
{
int nChoice = GetChoice(oPC);
int nLevel = GetHitDice(oPC);
if (nStage == STAGE_SELECT_ABIL)
{
SetPersistantLocalInt(oPC, "HiddenTalent_" + IntToString(nLevel), 1);
if (nChoice > 0)
{
effect eBonusFeat = EffectBonusFeat(nChoice);
eBonusFeat = UnyieldingEffect(eBonusFeat);
eBonusFeat = TagEffect(eBonusFeat, "HiddenTalent_" + IntToString(nChoice));
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonusFeat, oPC);
}
DeletePersistantLocalInt(oPC, "HiddenTalentCheck");
AllowExit(DYNCONV_EXIT_FORCE_EXIT);
}
if (DEBUG) DoDebug("ft_hidntalent_ft: New stage: " + IntToString(nStage));
SetStage(nStage, oPC);
}
}

View File

@@ -807,6 +807,13 @@ void CraftingHB(object oPC, object oItem, itemproperty ip, int nCost, int nXP, s
DeleteLocalInt(oPC, PRC_CRAFT_HB);
//if(GetIsItemPropertyValid(ip))
ApplyProperties(oPC, oItem, ip, nCost, nXP, sFile, nLine);
if(GetLocalInt(oPC, "PRC_CRAFT_REMOVE_MASTERWORK"))
{
RemoveMasterworkProperties(oItem);
DeleteLocalInt(oPC, "PRC_CRAFT_REMOVE_MASTERWORK");
}
if(sFile == "craft_golem")
{
}
@@ -1874,13 +1881,19 @@ void main()
int bCheck = FALSE;
TakeGoldFromCreature(GetLocalInt(oPC, PRC_CRAFT_COST), oPC, TRUE);
if(GetCraftingFeat(oNewItem) != FEAT_CRAFT_ARMS_ARMOR)
{
SetLocalInt(oPC, "PRC_CRAFT_REMOVE_MASTERWORK", TRUE);
CopyItem(oNewItem, oPC, TRUE);
}
else if(GetIsSkillSuccessful(oPC, nSkill, GetCraftingDC(oNewItem)))
{
bCheck = (nMaterial & PRC_CRAFT_FLAG_MASTERWORK) ? GetIsSkillSuccessful(oPC, nSkill, 20) : TRUE;
if(bCheck)
{
SetLocalInt(oPC, "PRC_CRAFT_REMOVE_MASTERWORK", TRUE);
CopyItem(oNewItem, oPC, TRUE);
}
}
AllowExit(DYNCONV_EXIT_FORCE_EXIT);
}
break;
@@ -2147,8 +2160,6 @@ void main()
break;
}
/*
case <CONSTANT>:
{

View File

@@ -40,7 +40,7 @@ void ActivateBreath(int nSpellLevel, object oPC = OBJECT_SELF)
//if none left, exit
if(!bCanUse) return;
int nDamageType;
int nDamageType = DAMAGE_TYPE_FIRE;
struct breath DracBreath;
//Acid

View File

@@ -288,15 +288,43 @@ void main()
///////////////////////////Draconic Senses//////////////////////////
if(GetHasFeat(FEAT_DRACONIC_SENSES, oPC))
{
effect eLow = EffectBonusFeat(FEAT_DARKVISION);
effect eDark = EffectBonusFeat(FEAT_LOWLIGHTVISION);
//effect eUltra = EffectUltravision();
effect eUltra = EffectBonusFeat(FEAT_ULTRAVISION);
effect eLink;
if(DEBUG) DoDebug("Entering Draconic Senses Branch. nPower is: "+IntToString(nPower)+".");
switch(nPower)
{
case 1: IPSafeAddItemProperty(oSkin, ItemPropertyBonusFeat(IP_CONST_FEAT_LOWLIGHT_VISION), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); break;
case 2: IPSafeAddItemProperty(oSkin, ItemPropertyBonusFeat(IP_CONST_FEAT_LOWLIGHT_VISION), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); break;
case 3: IPSafeAddItemProperty(oSkin, ItemPropertyDarkvision(), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); break;
//Using Ultravision as the ability is Blindsense, not Blindsight
default: IPSafeAddItemProperty(oSkin, ItemPropertyDarkvision(), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, ExtraordinaryEffect(EffectUltravision()), oPC); break;
case 1:
case 2:
{
if(DEBUG) DoDebug("Draconic Senses Branch Case 1 & 2: Lowlight vision");
//IPSafeAddItemProperty(oSkin, ItemPropertyBonusFeat(IP_CONST_FEAT_LOWLIGHT_VISION), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); break;
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, UnyieldingEffect(eLow), oPC);
break;
}
case 3:
{
if(DEBUG) DoDebug("Draconic Senses Branch Case 3: Lowlight vision + Darkvision");
//IPSafeAddItemProperty(oSkin, ItemPropertyDarkvision(), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); break;
eLink = EffectLinkEffects(eLow, eDark);
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, UnyieldingEffect(eLink), oPC);
break;
}
//;: Using Ultravision as the ability is Blindsense, not Blindsight
default:
{
if(DEBUG) DoDebug("Draconic Senses Branch Default: Lowlight vision + Darkvision + Ultravsion");
//IPSafeAddItemProperty(oSkin, ItemPropertyDarkvision(), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
eLink = EffectLinkEffects(eLow, eDark);
eLink = EffectLinkEffects(eUltra, eLink);
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, UnyieldingEffect(eLink), oPC);
break;
}
}
if(DEBUG) DoDebug("Draconic Senses: Adding skill bonuses.");
SetCompositeBonus(oSkin, "DS_Spot", nPower, ITEM_PROPERTY_SKILL_BONUS, SKILL_SPOT);
SetCompositeBonus(oSkin, "DS_Search", nPower, ITEM_PROPERTY_SKILL_BONUS, SKILL_SEARCH);
SetCompositeBonus(oSkin, "DS_Listen", nPower, ITEM_PROPERTY_SKILL_BONUS, SKILL_LISTEN);

View File

@@ -88,7 +88,11 @@ void main()
{
if(DEBUG) DoDebug("prc_forsake_abil: nChoice: " + IntToString(nChoice));
ApplyEffectToObject(DURATION_TYPE_PERMANENT,UnyieldingEffect(EffectAbilityIncrease(nChoice,1)),oPC); //Give the boost
effect eAbility = EffectAbilityIncrease(nChoice, 1);
eAbility = UnyieldingEffect(eAbility);
eAbility = TagEffect(eAbility, "ForsakerAbilityBoost");
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAbility, oPC); //Give the boost
SetPersistantLocalInt(oPC, "ForsakerBoost"+IntToString(nClass), nChoice+1); //Register the boost has been given
DeletePersistantLocalInt(oPC,"ForsakerBoostCheck");
@@ -101,4 +105,27 @@ void main()
// Store the stage value. If it has been changed, this clears out the choices
SetStage(nStage, oPC);
}
/* // Handle PC response
else
{
int nChoice = GetChoice(oPC);
if(DEBUG) DoDebug("prc_forsake_abil: Handling PC response, stage = " + IntToString(nStage) + "; nChoice = " +
IntToString(nChoice) + "; choice text = '" + GetChoiceText(oPC) + "'");
if(nStage == STAGE_SELECT_ABIL)
{
if(DEBUG) DoDebug("prc_forsake_abil: nChoice: " + IntToString(nChoice));
ApplyEffectToObject(DURATION_TYPE_PERMANENT,UnyieldingEffect(EffectAbilityIncrease(nChoice,1)),oPC); //Give the boost
SetPersistantLocalInt(oPC, "ForsakerBoost"+IntToString(nClass), nChoice+1); //Register the boost has been given
DeletePersistantLocalInt(oPC,"ForsakerBoostCheck");
// And we're all done
AllowExit(DYNCONV_EXIT_FORCE_EXIT);
}
if(DEBUG) DoDebug("prc_forsake_abil: New stage: " + IntToString(nStage));
// Store the stage value. If it has been changed, this clears out the choices
SetStage(nStage, oPC);
} */
}

View File

@@ -121,8 +121,94 @@ void main()
// Item is a creature weapon, allow it
return;
}
// Check if the item being equipped is magical
// Only check the item being equipped, not entire inventory
int bIsMagical = FALSE;
int nPropertyCount = 0;
itemproperty ipCheck = GetFirstItemProperty(oItem);
while (GetIsItemPropertyValid(ipCheck))
{
string sTag = GetItemPropertyTag(ipCheck);
int nType = GetItemPropertyType(ipCheck);
// Check for protected properties
if(sTag == "Tag_PRC_OnHitKeeper" ||
sTag == "Quality_Masterwork" ||
sTag == "Material_Mithral" ||
sTag == "Material_Adamantine" ||
sTag == "Material_Darkwood" ||
sTag == "Material_ColdIron" ||
sTag == "Material_MundaneCrystal" ||
sTag == "Material_DeepCrystal" ||
nType == ITEM_PROPERTY_MATERIAL) // All material properties
{
// Protected property - skip, don't set bIsMagical
}
else
{
// Check for helmet carveout: +1 Concentration only
if(GetBaseItemType(oItem) == BASE_ITEM_HELMET &&
GetItemPropertyType(ipCheck) == ITEM_PROPERTY_SKILL_BONUS &&
GetItemPropertySubType(ipCheck) == SKILL_CONCENTRATION &&
GetItemPropertyCostTableValue(ipCheck) == 1)
{
// This is a +1 Concentration helmet with no other properties, allow it
bIsMagical = FALSE;
break;
}
else
{
bIsMagical = TRUE;
break;
}
}
ipCheck = GetNextItemProperty(oItem);
}
/* while (GetIsItemPropertyValid(ipCheck))
{
// Skip protected properties
if(GetItemPropertyTag(ipCheck) != "Tag_PRC_OnHitKeeper")
{
nPropertyCount++;
// Check for helmet carveout: +1 Concentration only
if(GetBaseItemType(oItem) == BASE_ITEM_HELMET &&
nPropertyCount == 1 &&
GetItemPropertyType(ipCheck) == ITEM_PROPERTY_SKILL_BONUS &&
GetItemPropertySubType(ipCheck) == SKILL_CONCENTRATION &&
GetItemPropertyCostTableValue(ipCheck) == 1)
{
// This is a +1 Concentration helmet with no other properties, allow it
bIsMagical = FALSE;
break;
}
else
{
bIsMagical = TRUE;
break;
}
}
ipCheck = GetNextItemProperty(oItem);
} */
// Apply torch exclusion here (after magical item determination)
if(bIsMagical && GetResRef(oItem) == "nw_it_torch001")
{
bIsMagical = FALSE;
}
// If item is magical, unequip it
if(bIsMagical)
{
AssignCommand(oPC, ClearAllActions(TRUE));
AssignCommand(oPC, ActionUnequipItem(oItem));
FloatingTextStringOnCreature(GetName(oItem)+" is a magical item!", oPC, FALSE);
}
/* // Check if the item being equipped is magical
// Only check the item being equipped, not entire inventory
int bIsMagical = FALSE;
itemproperty ipCheck = GetFirstItemProperty(oItem);
@@ -144,7 +230,7 @@ void main()
AssignCommand(oPC, ActionUnequipItem(oItem));
FloatingTextStringOnCreature(GetName(oItem)+" is a magical item!", oPC, FALSE);
}
// If non-magical weapon and Forsaker has DR bypass, add bonuses
*/ // If non-magical weapon and Forsaker has DR bypass, add bonuses
else if(!bIsMagical && (IPGetIsMeleeWeapon(oItem) || GetWeaponRanged(oItem)) && (nForsakerLvl >= 3))
{
// Add DR bypass bonuses to non-magical weapons
@@ -167,6 +253,7 @@ void main()
}
}
}
// We are called from the OnPlayerUnEquipItem eventhook. Clean up Forsaker properties
else if(nEvent == EVENT_ONPLAYERUNEQUIPITEM)
{

View File

@@ -64,8 +64,10 @@ void main()
// Handle Hidden Talent
if(GetHasFeat(FEAT_HIDDEN_TALENT, oPC) && !GetPersistantLocalInt(oPC, "HiddenTalentChosen"))
{
if(DEBUG) DoDebug("prc_levelup: Entering Hidden Talent Branch");
// Trigger Hidden Talent power selection conversation
AssignCommand(oPC, ActionStartConversation(oPC, "hidden_talent_cv", TRUE, FALSE));
//DelayCommand(0.5, ExecuteScript("psi_hidntalent", oPC));
DelayCommand(1.0f, StartDynamicConversation("ft_hidntalent_ft", oPC, DYNCONV_EXIT_ALLOWED_SHOW_CHOICE, TRUE, FALSE, oPC));
}
// Execute scripts hooked to this event for the player triggering it

View File

@@ -15,6 +15,15 @@ void RestoreForsakerAbilities(object oPC)
int nForsakerLevel = GetLevelByClass(CLASS_TYPE_FORSAKER, oPC);
int i;
// Remove existing Forsaker ability effects first
effect eLoop = GetFirstEffect(oPC);
while(GetIsEffectValid(eLoop))
{
if(GetEffectTag(eLoop) == "ForsakerAbilityBoost")
RemoveEffect(oPC, eLoop);
eLoop = GetNextEffect(oPC);
}
for(i = 1; i <= nForsakerLevel; i++)
{
int nAbility = GetPersistantLocalInt(oPC, "ForsakerBoost" + IntToString(i));
@@ -23,6 +32,7 @@ void RestoreForsakerAbilities(object oPC)
{
effect eAbility = EffectAbilityIncrease(nAbility - 1, 1);
eAbility = SupernaturalEffect(eAbility);
eAbility = TagEffect(eAbility, "ForsakerAbilityBoost"); // Add tag for removal
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAbility, oPC);
}
}
@@ -401,6 +411,15 @@ void main()
if(GetHasFeat(FEAT_SPELLFIRE_WIELDER, oPC))
SpawnNewThread("PRC_Spellfire", "prc_spellfire_hb", 6.0f, oPC);
// Handle Hidden Talent
if(GetHasFeat(FEAT_HIDDEN_TALENT, oPC) && !GetPersistantLocalInt(oPC, "HiddenTalentChosen"))
{
if(DEBUG) DoDebug("prc_onenter: Entering Hidden Talent Branch");
// Trigger Hidden Talent power selection conversation
//DelayCommand(0.5, ExecuteScript("psi_hidntalent", oPC));
DelayCommand(1.0f, StartDynamicConversation("ft_hidntalent_ft", oPC, DYNCONV_EXIT_ALLOWED_SHOW_CHOICE, TRUE, FALSE, oPC));
}
//if the player logged off while being registered as a cohort
if(GetPersistantLocalInt(oPC, "RegisteringAsCohort"))
AssignCommand(GetModule(), CheckHB(oPC));

View File

@@ -72,8 +72,8 @@ void main()
// Sanity check - can't affect self or dead stuff. Also, check PvP limits
if(oTarget == oEater ||
GetIsDead(oTarget) ||
!spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oEater)
)
!spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oEater) ||
GetObjectType(oTarget) != OBJECT_TYPE_CREATURE) // NEW: Only affect creatures
return;
// Let the target's AI know about hostile action
@@ -246,11 +246,60 @@ void DoDeathDependent(object oEater, object oTarget, string sResRef, string sNam
object oSlave = CreateObject(OBJECT_TYPE_CREATURE, "soul_wight_test", lSpawn);
if(GetIsObjectValid(oSlave))
{
SetMaxHenchmen(PRCMax(nMaxHenchmen, i)); // Temporarily set the number of max henchmen high enough that we can add another
// Copy feats using EffectBonusFeat
effect eFeatLink;
int bHasEffect = FALSE;
int nFeat;
// Iterate through feat range
for(nFeat = 1; nFeat < 3000; nFeat++)
{
if(GetHasFeat(nFeat, oTarget))
{
// Skip certain combat feats that may not work on NPCs
if(nFeat == FEAT_POWER_ATTACK || nFeat == FEAT_IMPROVED_POWER_ATTACK ||
nFeat == FEAT_EXPERTISE || nFeat == FEAT_IMPROVED_EXPERTISE)
continue;
// Create bonus feat effect and link it
if(!bHasEffect)
{
eFeatLink = EffectBonusFeat(nFeat);
bHasEffect = TRUE;
}
else
{
eFeatLink = EffectLinkEffects(eFeatLink, EffectBonusFeat(nFeat));
}
}
}
// Apply the linked feat effects if any were found
if(bHasEffect)
{
eFeatLink = TagEffect(eFeatLink, "SOUL_SLAVE_COPIED_FEATS");
eFeatLink = UnyieldingEffect(eFeatLink);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eFeatLink, oSlave);
}
// Copy appearance and portrait (existing code)
SetCreatureAppearanceType(oSlave, GetAppearanceType(oTarget));
SetPhenoType(GetPhenoType(oTarget), oSlave);
// Copy portrait (existing code)
int nPortraitID = GetPortraitId(oTarget);
if(nPortraitID != PORTRAIT_INVALID)
{
string sPortraitResRef = Get2DACache("portraits", "BaseResRef", nPortraitID);
sPortraitResRef = GetStringLeft(sPortraitResRef, GetStringLength(sPortraitResRef)-1);
SetPortraitResRef(oSlave, sPortraitResRef);
SetPortraitId(oSlave, nPortraitID);
}
// Rest of existing code...
SetMaxHenchmen(PRCMax(nMaxHenchmen, i));
AddHenchman(oEater, oSlave);
SetMaxHenchmen(nMaxHenchmen);
// Level up the wight a bit to make it usefull. Needs to be delayed a bit to let the object creation routines happen first
DelayCommand(3.0f, LevelUpWight(GetHitDice(oEater) - 3, oSlave));
}
else if(DEBUG)

View File

@@ -16,21 +16,24 @@
#include "prc_inc_unarmed"
void main()
{
if (DEBUG)
{
DoDebug("unarmed_caller: FUNCTION STARTED");
DoDebug("unarmed_caller: CALL_UNARMED_FEATS = " + IntToString(GetLocalInt(OBJECT_SELF, CALL_UNARMED_FEATS)));
DoDebug("unarmed_caller: CALL_UNARMED_FISTS = " + IntToString(GetLocalInt(OBJECT_SELF, CALL_UNARMED_FISTS)));
}
int bCont = FALSE;
if(GetLocalInt(OBJECT_SELF, CALL_UNARMED_FEATS))
{
DoDebug("unarmed_caller: CALLING UnarmedFeats");
if (DEBUG) DoDebug("unarmed_caller: CALLING UnarmedFeats");
UnarmedFeats(OBJECT_SELF);
bCont = TRUE;
}
if(GetLocalInt(OBJECT_SELF, CALL_UNARMED_FISTS))
{
DoDebug("unarmed_caller: CALLING UnarmedFists");
if (DEBUG) DoDebug("unarmed_caller: CALLING UnarmedFists");
UnarmedFists(OBJECT_SELF);
bCont = TRUE;
}

View File

@@ -10021,7 +10021,8 @@ Combining the dynamic powers of martial prowess and arcane might, the Hexblade p
- Alignment Restrictions: non-good only
- Hit Die: d10
- Proficiencies: A Hexblade gains proficiency with Simple and Martial Weapons, Light and Medium Armour and with Shields.
- Proficiencies: Hexblades are proficient with all simple and martial weapons, and with light armor but not with shields.
- Skill Points: 2+ Int Modifier.
CLASS FEATURES:
@@ -20878,7 +20879,7 @@ Sharess is a paradoxical deity. Originally, she was a war goddess of the Mulhora
REQUIREMENTS:
Alignment: Chaotic good
Skills: Diplomacy 7 ranks , Perform 7 ranks
Skills: Persuade 7 ranks , Perform 7 ranks
Feats: Sacred Vow, Vow of Purity
CLASS FEATURES:
@@ -26873,9 +26874,9 @@ Note: if you take this feat and are not a Kalashtar, you will have to reselect y
Use: Selected.</entry>
<entry id="50961" lang="en" sex="m">Soulblade Warrior</entry>
<entry id="50962" lang="en" sex="m">Type of Feat: Racial
Prerequisite: Kalashtar, ability to manifest a mindblade
Prerequisite: Kalashtar, Soulknife 6
You can manifest a mindblade(using this feat) as a swift action. Your effective level for determining the mind blade enhancement class feature is 2 higher than normal, but you still do not get access to it until level 6 soulknife.
Note: if you take this feat and are not a Kalashtar, you will have to reselect your feats. if you take this feat at level 1 and are not Kalashtar, you will be unable to level.
Note: if you take this feat and are not a Kalashtar, you will have to reselect your feats.
Use: Selected.</entry>
<entry id="50963" lang="en" sex="m">Spiritual Force</entry>
<entry id="50964" lang="en" sex="m">Type of Feat: Racial
@@ -44159,7 +44160,7 @@ Use: Selected.
<entry id="55633" lang="en" sex="m">Type of Feat: Draconic
Prerequisite: Cha 11, Dragonblood subtype*, Turn Undead
When you activate this feat, you use up a Turn Undead use for the day and breathe a 15' cone of an element related your draconic ancestry. If your dragon type is not related to one of the 5 main elements, or you are not related to a specific dragon, the damage defaults to fire. The damage is a number of d6 equal to your turning level divided by 2, and the save is a Reflex save vs 10 + your Charisma modifier + your turning level divided by 2.
When you activate this feat, you use up a Turn Undead use for the day and channel via your holy symbol a 15' cone of an element related your draconic ancestry. If your dragon type is not related to one of the 5 main elements, or you are not related to a specific dragon, the damage defaults to fire. The damage is a number of d6 equal to your turning level divided by 2, and the save is a Reflex save vs 10 + your Charisma modifier + your turning level divided by 2.
Use: Selected.
*Note: In addition to race, you can gain the dragonblood subtype through the Dragon Devotee or Dragon Disciple classes, or through the Dragontouched or Dragon Heritage feats. If you take this feat and are not dragonblooded, you will be deleveled or unable to level.</entry>
@@ -73732,13 +73733,13 @@ Use: Selected</entry>
<entry id="200103" lang="en" sex="m">Type of Feat: Exalted
You have taken a sacred vow to forswear material possessions.
You gain bonuses to your Armor Class, ability scores, and saving throws, as well as bonus exalted feats, all depending on your character level.
You gain bonuses to your Armor Class, ability scores, and saving throws, as well as bonus exalted feats, all depending on your character's ascetic level.
To fulfill your vow, you must not own or use any material possessions, with the following exceptions: You may carry and use ordinary (neither magic nor masterwork) simple weapons, usually just a quarterstaff that serves as a walking stick. You may wear simple clothes (usually just a homespun robe, possibly also including a hat and sandals) with no magical properties. You may carry and use a spell component pouch. You may not use any magic item of any sort, though you can benefit from magic items used on your behalf-you can drink a potion of cure serious wounds a friend gives you, receive a spell cast from a wand, scroll, or staff, or ride on your companion's ebony fly. You may not, however, "borrow" a cloak of resistance or any other magic item from a companion for even a single round, nor may you yourself cast a spell from a scroll, wand, or staff.
FEAT FEATURES:
Level
Ascetic Level
1: AC Armor +4
2: Exalted Feat
3: AC Armor +5
@@ -75435,7 +75436,7 @@ Studded Leather Armor
Dagger
Light Crossbow
(2) quivers of bolts.
(2) Healing Kits
(2) Healer's Kits
(2) Blank Scrolls</entry>
<entry id="211403" lang="en" sex="m">Archivist (Healer)</entry>
<entry id="211404" lang="en" sex="m">(STARTING PACKAGE)
@@ -75448,7 +75449,7 @@ Scale Mail
Quarterstaff
Light Crossbow
(2) quivers of bolts.
(2) Healing Kits
(2) Healer's Kits
(2) Antitoxin</entry>
<entry id="211405" lang="en" sex="m">Archivist (Occult Hunter)</entry>
<entry id="211406" lang="en" sex="m">(STARTING PACKAGE)
@@ -75461,7 +75462,7 @@ Scale Mail
Heavy Mace
Light Crossbow
(2) quivers of bolts.
(2) Healing Kits
(2) Healer's Kits
(2) Holy Water</entry>
<entry id="211407" lang="en" sex="m">Archvist 4</entry>
<entry id="211408" lang="en" sex="m">Archvist 4</entry>
@@ -75478,7 +75479,7 @@ Studded Leather
Short sword
Light Crossbow
(2) quivers of bolts.
(2) Healing Kits
(2) Healer's Kits
(1) Thieves' Tools</entry>
<entry id="211413" lang="en" sex="m">Beguiler (Investigator)</entry>
<entry id="211414" lang="en" sex="m">(STARTING PACKAGE)
@@ -75491,7 +75492,7 @@ Studded Leather
Rapier
Shortbow
(2) quivers of arrows
(2) Healing Kits
(2) Healer's Kits
(1) Thieves' Tools</entry>
<entry id="211415" lang="en" sex="m">Beguiler (Trickster)</entry>
<entry id="211416" lang="en" sex="m">(STARTING PACKAGE)
@@ -75504,7 +75505,7 @@ Studded Leather
Morningstar
Light Crossbow
(2) quivers of bolts.
(2) Healing Kits
(2) Healer's Kits
(1) Thieves' Tools</entry>
<entry id="211417" lang="en" sex="m">Beguiler 4</entry>
<entry id="211418" lang="en" sex="m">Beguiler 4</entry>
@@ -75521,7 +75522,7 @@ Studded Leather Armor
Morningstar
Light Crossbow
(2) quivers of bolts.
(2) Healing Kits</entry>
(2) Healer's Kits</entry>
<entry id="211423" lang="en" sex="m">Binder (Trickster)</entry>
<entry id="211424" lang="en" sex="m">(STARTING PACKAGE)
@@ -75533,7 +75534,7 @@ Leather Armor
Dagger
Light Crossbow
(2) quivers of bolts.
(2) Healing Kits
(2) Healer's Kits
(1) Softfoot
(1) Blend Cream</entry>
<entry id="211425" lang="en" sex="m">Binder (Second-Rank Warrior)</entry>
@@ -75547,17 +75548,48 @@ Scale Mail
Spear
Light Crossbow
(2) quivers of bolts.
(2) Healing Kits</entry>
(2) Healer's Kits</entry>
<entry id="211427" lang="en" sex="m">Binder4</entry>
<entry id="211428" lang="en" sex="m">Binder4</entry>
<entry id="211429" lang="en" sex="m">Binder5</entry>
<entry id="211430" lang="en" sex="m">Binder5</entry>
<entry id="211431" lang="en" sex="m">Crusader1</entry>
<entry id="211432" lang="en" sex="m">Crusader1</entry>
<entry id="211433" lang="en" sex="m">Crusader2</entry>
<entry id="211434" lang="en" sex="m">Crusader2</entry>
<entry id="211435" lang="en" sex="m">Crusader3</entry>
<entry id="211436" lang="en" sex="m">Crusader3</entry>
<entry id="211431" lang="en" sex="m">Crusader (Default)</entry>
<entry id="211432" lang="en" sex="m">(STARTING PACKAGE)
The default Crusader package represents a balanced martial initiate, trained to hold the line while remaining adaptable to changing battlefield conditions.
Equipment:
Torch
Scale Mail
Large Shield
Longsword
Shortbow
(2) Quivers of arrows
(2) Healer's Kits</entry>
<entry id="211433" lang="en" sex="m">Crusader (Defender)</entry>
<entry id="211434" lang="en" sex="m">(STARTING PACKAGE)
The Defender package is a dedicated line-holder and damage sponge, optimized to remain in the thick of combat and protect allies rather than pursue aggressive kills.
Equipment:
Torch
Scale Mail
Large Shield
Heavy Mace
Sling
(2) Pouches of bullets
(2) Healer's Kits</entry>
<entry id="211435" lang="en" sex="m">Crusader (Striker)</entry>
<entry id="211436" lang="en" sex="m">(STARTING PACKAGE)
The striker package focuses on aggressive, mobile strikes, relying on charging, pressure, and punishment, not static defense.
Equipment:
Torch
Scale Mail
Greatsword
(1) brace of throwing axes
(2) Healer's Kits</entry>
<entry id="211437" lang="en" sex="m">Crusader4</entry>
<entry id="211438" lang="en" sex="m">Crusader4</entry>
<entry id="211439" lang="en" sex="m">Crusader5</entry>
@@ -75584,7 +75616,7 @@ Scale Mail
Morningstar
Sling
(2) pouches of bullets
(3) Healing Kits</entry>
(3) Healer's Kits</entry>
<entry id="211453" lang="en" sex="m">Dragon Shaman (Destroyer)</entry>
<entry id="211454" lang="en" sex="m">(STARTING PACKAGE)
@@ -75596,7 +75628,7 @@ Scale Mail
Large Shield
Morningstar
50 Throwing Axes
(3) Healing Kits</entry>
(3) Healer's Kits</entry>
<entry id="211455" lang="en" sex="m">Dragon Shaman (Second-Rank Warrior)</entry>
<entry id="211456" lang="en" sex="m">(STARTING PACKAGE)
@@ -75608,7 +75640,7 @@ Studded Leather
Spear
Light Crossbow
(2) quivers of bolts.
(3) Healing Kits</entry>
(3) Healer's Kits</entry>
<entry id="211457" lang="en" sex="m">DragonShamanReserve4</entry>
<entry id="211458" lang="en" sex="m">DragonShamanReserve4</entry>
<entry id="211459" lang="en" sex="m">DragonShamanReserve5</entry>
@@ -75633,7 +75665,7 @@ Torch
Scale Mail
Greataxe
50 Throwing Axes
(3) Healing Kits</entry>
(3) Healer's Kits</entry>
<entry id="211473" lang="en" sex="m">Duskblade (Defender)</entry>
<entry id="211474" lang="en" sex="m">(STARTING PACKAGE)
@@ -75646,7 +75678,7 @@ Small Shield
Dwarven Waraxe
Sling
(2) Pouches of Bullets
(3) Healing Kits</entry>
(3) Healer's Kits</entry>
<entry id="211475" lang="en" sex="m">Duskblade (Skirmisher)</entry>
<entry id="211476" lang="en" sex="m">(STARTING PACKAGE)
@@ -75658,7 +75690,7 @@ Studded Leather Armor
Halberd
Shortbow
(2) Quivers of Arrows
(3) Healing Kits</entry>
(3) Healer's Kits</entry>
<entry id="211477" lang="en" sex="m">Factotum1</entry>
<entry id="211478" lang="en" sex="m">Factotum1</entry>
<entry id="211479" lang="en" sex="m">Factotum2</entry>
@@ -75732,7 +75764,7 @@ Chain Shirt
Light Lance
Longsword
Throwing Axes
(3) Healing Kits</entry>
(3) Healer's Kits</entry>
<entry id="211529" lang="en" sex="m">Knight (Defender)</entry>
<entry id="211530" lang="en" sex="m">(STARTING PACKAGE)
@@ -75745,7 +75777,7 @@ Large Shield
Dwarven Waraxe
Warhammer
Throwing Axes
(3) Healing Kits</entry>
(3) Healer's Kits</entry>
<entry id="211531" lang="en" sex="m">Knight (Destroyer)</entry>
<entry id="211532" lang="en" sex="m">(STARTING PACKAGE)
@@ -75962,7 +75994,7 @@ Studded Leather Armor
Morningstar
Light Crossbow
(2) quivers of bolts.
(3) Healing Kits</entry>
(3) Healer's Kits</entry>
<entry id="211729" lang="en" sex="m">Warlock_RESERVE2</entry>
<entry id="211730" lang="en" sex="m">Warlock_RESERVE2</entry>
<entry id="211731" lang="en" sex="m">Warlock_RESERVE3</entry>

View File

@@ -1085,6 +1085,7 @@ void CreateSwitchNameArray()
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CREATE_INFUSION_OPTIONAL_HERBS);
//spells
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_SHOW_SR_CHECK_DETAILS);
//shifter
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_WEREWOLF_HYBRID_USE_SHIFTER_SHAPECHANGE);