generated from Jaysyn/ModuleTemplate
2025/12/25 Update
Hooked up new GUI module event. Updated merge 2DAs. Updated PRC8 includes. Updated nasher.cfg.
This commit is contained in:
97
nasher.cfg
97
nasher.cfg
@@ -227,20 +227,21 @@ description = "PRC8 version of The Aielund Saga Act I - Nature Abhors a Vacuum."
|
||||
filter = "x0_i0_transport.nss"
|
||||
filter = "x2_inc_cutscenep.nss"
|
||||
filter = "x2_inc_spellhook.nss"
|
||||
filter = "x3_inc_horse.nss"
|
||||
filter = "prc_inc_string.nss"
|
||||
filter = "prc_nui_sc_inc.nss"
|
||||
filter = "prc_nui_scd_inc.nss"
|
||||
filter = "prc_nui_consts.nss"
|
||||
filter = "nw_inc_nui.nss"
|
||||
filter = "xchst_inc.nss"
|
||||
filter = "prc_string_inc.nss"
|
||||
filter = "prc_nui_sbd_inc.nss"
|
||||
filter = "prc_nui_sb_inc.nss"
|
||||
filter = "prc_nui_sbd_inc.nss"
|
||||
filter = "prc_nui_lv_inc.nss"
|
||||
filter = "prc_nui_lv_inc.nss"
|
||||
filter = "prc_nui_com_inc.nss"
|
||||
filter = "prc_inc_size.nss"
|
||||
filter = "prc_inc_json.nss"
|
||||
filter = "nw_inc_nui.nss"
|
||||
filter = "nw_inc_gff.nss"
|
||||
filter = "inc_infusion.nss"
|
||||
filter = "prc_inc_gff.nss"
|
||||
filter = "inc_infusion.nss"
|
||||
|
||||
[target.rules]
|
||||
"*" = "src/module/Act1/$ext"
|
||||
@@ -460,20 +461,20 @@ description = "PRC8 version of The Aielund Saga Act II - Defender of the Crown."
|
||||
filter = "x2_inc_cutscenep.nss"
|
||||
filter = "x2_inc_spellhook.nss"
|
||||
filter = "x3_inc_horse.nss"
|
||||
filter = "prc_inc_string.nss"
|
||||
filter = "prc_nui_sc_inc.nss"
|
||||
filter = "prc_nui_scd_inc.nss"
|
||||
filter = "prc_nui_consts.nss"
|
||||
filter = "nw_inc_nui.nss"
|
||||
filter = "xchst_inc.nss"
|
||||
filter = "prc_string_inc.nss"
|
||||
filter = "prc_nui_sbd_inc.nss"
|
||||
filter = "prc_nui_sb_inc.nss"
|
||||
filter = "prc_nui_sbd_inc.nss"
|
||||
filter = "prc_nui_lv_inc.nss"
|
||||
filter = "prc_nui_lv_inc.nss"
|
||||
filter = "prc_nui_com_inc.nss"
|
||||
filter = "prc_inc_size.nss"
|
||||
filter = "prc_inc_json.nss"
|
||||
filter = "nw_inc_nui.nss"
|
||||
filter = "nw_inc_gff.nss"
|
||||
filter = "inc_infusion.nss"
|
||||
filter = "prc_inc_gff.nss"
|
||||
filter = "inc_infusion.nss"
|
||||
|
||||
[target.rules]
|
||||
"*" = "src/module/Act2/$ext"
|
||||
@@ -693,20 +694,20 @@ description = "PRC8 version of The Aielund Saga Act III - Return of the Ironlord
|
||||
filter = "x2_inc_cutscenep.nss"
|
||||
filter = "x2_inc_spellhook.nss"
|
||||
filter = "x3_inc_horse.nss"
|
||||
filter = "prc_inc_string.nss"
|
||||
filter = "prc_nui_sc_inc.nss"
|
||||
filter = "prc_nui_scd_inc.nss"
|
||||
filter = "prc_nui_consts.nss"
|
||||
filter = "nw_inc_nui.nss"
|
||||
filter = "xchst_inc.nss"
|
||||
filter = "prc_string_inc.nss"
|
||||
filter = "prc_nui_sbd_inc.nss"
|
||||
filter = "prc_nui_sb_inc.nss"
|
||||
filter = "prc_nui_sbd_inc.nss"
|
||||
filter = "prc_nui_lv_inc.nss"
|
||||
filter = "prc_nui_lv_inc.nss"
|
||||
filter = "prc_nui_com_inc.nss"
|
||||
filter = "prc_inc_size.nss"
|
||||
filter = "prc_inc_json.nss"
|
||||
filter = "nw_inc_nui.nss"
|
||||
filter = "nw_inc_gff.nss"
|
||||
filter = "inc_infusion.nss"
|
||||
filter = "prc_inc_gff.nss"
|
||||
filter = "inc_infusion.nss"
|
||||
|
||||
|
||||
[target.rules]
|
||||
@@ -927,20 +928,20 @@ description = "PRC8 version of The Aielund Saga Act IV - The Fall of Aielund Pt1
|
||||
filter = "x2_inc_cutscenep.nss"
|
||||
filter = "x2_inc_spellhook.nss"
|
||||
filter = "x3_inc_horse.nss"
|
||||
filter = "prc_inc_string.nss"
|
||||
filter = "prc_nui_sc_inc.nss"
|
||||
filter = "prc_nui_scd_inc.nss"
|
||||
filter = "prc_nui_consts.nss"
|
||||
filter = "nw_inc_nui.nss"
|
||||
filter = "xchst_inc.nss"
|
||||
filter = "prc_string_inc.nss"
|
||||
filter = "prc_nui_sbd_inc.nss"
|
||||
filter = "prc_nui_sb_inc.nss"
|
||||
filter = "prc_nui_sbd_inc.nss"
|
||||
filter = "prc_nui_lv_inc.nss"
|
||||
filter = "prc_nui_lv_inc.nss"
|
||||
filter = "prc_nui_com_inc.nss"
|
||||
filter = "prc_inc_size.nss"
|
||||
filter = "prc_inc_json.nss"
|
||||
filter = "nw_inc_nui.nss"
|
||||
filter = "nw_inc_gff.nss"
|
||||
filter = "inc_infusion.nss"
|
||||
filter = "prc_inc_gff.nss"
|
||||
filter = "inc_infusion.nss"
|
||||
|
||||
[target.rules]
|
||||
"*" = "src/module/Act4a/$ext"
|
||||
@@ -1160,20 +1161,20 @@ description = "PRC8 version of The Aielund Saga Act IV - The Fall of Aielund Pt2
|
||||
filter = "x2_inc_cutscenep.nss"
|
||||
filter = "x2_inc_spellhook.nss"
|
||||
filter = "x3_inc_horse.nss"
|
||||
filter = "prc_inc_string.nss"
|
||||
filter = "prc_nui_sc_inc.nss"
|
||||
filter = "prc_nui_scd_inc.nss"
|
||||
filter = "prc_nui_consts.nss"
|
||||
filter = "nw_inc_nui.nss"
|
||||
filter = "xchst_inc.nss"
|
||||
filter = "prc_string_inc.nss"
|
||||
filter = "prc_nui_sbd_inc.nss"
|
||||
filter = "prc_nui_sb_inc.nss"
|
||||
filter = "prc_nui_sbd_inc.nss"
|
||||
filter = "prc_nui_lv_inc.nss"
|
||||
filter = "prc_nui_lv_inc.nss"
|
||||
filter = "prc_nui_com_inc.nss"
|
||||
filter = "prc_inc_size.nss"
|
||||
filter = "prc_inc_json.nss"
|
||||
filter = "nw_inc_nui.nss"
|
||||
filter = "nw_inc_gff.nss"
|
||||
filter = "inc_infusion.nss"
|
||||
filter = "prc_inc_gff.nss"
|
||||
filter = "inc_infusion.nss"
|
||||
|
||||
[target.rules]
|
||||
"*" = "src/module/Act4b/$ext"
|
||||
@@ -1392,20 +1393,20 @@ description = "PRC8 version of The Aielund Saga Act IV - The Fall of Aielund Pt3
|
||||
filter = "x2_inc_cutscenep.nss"
|
||||
filter = "x2_inc_spellhook.nss"
|
||||
filter = "x3_inc_horse.nss"
|
||||
filter = "prc_inc_string.nss"
|
||||
filter = "prc_nui_sc_inc.nss"
|
||||
filter = "prc_nui_scd_inc.nss"
|
||||
filter = "prc_nui_consts.nss"
|
||||
filter = "nw_inc_nui.nss"
|
||||
filter = "xchst_inc.nss"
|
||||
filter = "prc_string_inc.nss"
|
||||
filter = "prc_nui_sbd_inc.nss"
|
||||
filter = "prc_nui_sb_inc.nss"
|
||||
filter = "prc_nui_sbd_inc.nss"
|
||||
filter = "prc_nui_lv_inc.nss"
|
||||
filter = "prc_nui_lv_inc.nss"
|
||||
filter = "prc_nui_com_inc.nss"
|
||||
filter = "prc_inc_size.nss"
|
||||
filter = "prc_inc_json.nss"
|
||||
filter = "nw_inc_nui.nss"
|
||||
filter = "nw_inc_gff.nss"
|
||||
filter = "inc_infusion.nss"
|
||||
filter = "prc_inc_gff.nss"
|
||||
filter = "inc_infusion.nss"
|
||||
|
||||
[target.rules]
|
||||
"*" = "src/module/Act4c/$ext"
|
||||
@@ -1625,20 +1626,20 @@ description = "PRC8 version of The Aielund Saga Act IV - Aielund Finale."
|
||||
filter = "x2_inc_cutscenep.nss"
|
||||
filter = "x2_inc_spellhook.nss"
|
||||
filter = "x3_inc_horse.nss"
|
||||
filter = "prc_inc_string.nss"
|
||||
filter = "prc_nui_sc_inc.nss"
|
||||
filter = "prc_nui_scd_inc.nss"
|
||||
filter = "prc_nui_consts.nss"
|
||||
filter = "nw_inc_nui.nss"
|
||||
filter = "xchst_inc.nss"
|
||||
filter = "prc_string_inc.nss"
|
||||
filter = "prc_nui_sbd_inc.nss"
|
||||
filter = "prc_nui_sb_inc.nss"
|
||||
filter = "prc_nui_sbd_inc.nss"
|
||||
filter = "prc_nui_lv_inc.nss"
|
||||
filter = "prc_nui_lv_inc.nss"
|
||||
filter = "prc_nui_com_inc.nss"
|
||||
filter = "prc_inc_size.nss"
|
||||
filter = "prc_inc_json.nss"
|
||||
filter = "nw_inc_nui.nss"
|
||||
filter = "nw_inc_gff.nss"
|
||||
filter = "inc_infusion.nss"
|
||||
filter = "prc_inc_gff.nss"
|
||||
filter = "inc_infusion.nss"
|
||||
|
||||
[target.rules]
|
||||
"*" = "src/module/Act4d/$ext"
|
||||
@@ -1858,20 +1859,20 @@ description = "PRC8 merge hakpak for PRC8 version of The Aielund Saga."
|
||||
filter = "x2_inc_cutscenep.nss"
|
||||
filter = "x2_inc_spellhook.nss"
|
||||
filter = "x3_inc_horse.nss"
|
||||
filter = "prc_inc_string.nss"
|
||||
filter = "prc_nui_sc_inc.nss"
|
||||
filter = "prc_nui_scd_inc.nss"
|
||||
filter = "prc_nui_consts.nss"
|
||||
filter = "nw_inc_nui.nss"
|
||||
filter = "xchst_inc.nss"
|
||||
filter = "prc_string_inc.nss"
|
||||
filter = "prc_nui_sbd_inc.nss"
|
||||
filter = "prc_nui_sb_inc.nss"
|
||||
filter = "prc_nui_sbd_inc.nss"
|
||||
filter = "prc_nui_lv_inc.nss"
|
||||
filter = "prc_nui_lv_inc.nss"
|
||||
filter = "prc_nui_com_inc.nss"
|
||||
filter = "prc_inc_size.nss"
|
||||
filter = "prc_inc_json.nss"
|
||||
filter = "nw_inc_nui.nss"
|
||||
filter = "nw_inc_gff.nss"
|
||||
filter = "inc_infusion.nss"
|
||||
filter = "prc_inc_gff.nss"
|
||||
filter = "inc_infusion.nss"
|
||||
|
||||
[target.rules]
|
||||
"*" = "src/hakpak/prc8_aielund_top/$ext"
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
100 **** RESERVED_poisons **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||
101 76389 empty_potion 1 2 0x00000 0 2 it_potion 0 **** **** **** it_potion_000 iit_potion 0 1 0 **** **** **** 10 255 **** **** **** **** 9 1 1 0.2 86786 24 1 0 8 2 **** **** **** **** **** **** 0 0 5455 0 2 1 **** **** 2 **** **** **** **** 0 1 **** **** **** **** **** **** **** **** **** ****
|
||||
102 76390 blank_scroll 1 1 0x00000 0 0 IT_SCROLL 0 **** **** **** gi_scrl iit_scroll_002 0 1 0 **** **** **** 0 255 **** **** **** **** 10 1 1 0.36 86787 27 1 0 9 2 **** **** **** **** **** **** 0 0 5470 0 0 1 **** **** 2 **** **** **** **** 1 1 **** **** **** **** **** **** **** **** **** ****
|
||||
103 76391 blank_magicwand 1 2 0x00000 1 2 WMGWn 0 1 1 1 it_bag iwmgwn 0 **** **** **** **** **** 10 255 **** **** **** **** 8 1 1 1 86788 16 1 0 1 3 **** **** **** **** **** **** 0 0 66196 50 1 10 **** **** 1 **** **** **** **** 10 1 **** **** **** **** **** **** **** **** **** ****
|
||||
103 76391 blank_magicwand 1 2 0x1C030 1 2 WMGWn 0 1 1 1 it_bag iwmgwn 0 1 2 1 **** **** 10 255 1 1 1 1 8 1 1 1 86788 16 1 0 1 3 **** **** **** **** **** **** 0 0 66196 50 1 10 4 **** 1 **** **** **** **** 10 1 **** **** **** **** **** **** **** **** **** ****
|
||||
104 83365 crafted_potion 1 2 0x00000 0 2 it_potion 0 **** **** **** it_potion_000 iit_potion 0 1 0 **** **** **** 10 255 **** **** **** **** 9 1 10 0.2 1719 24 1 0 8 2 **** **** **** **** **** **** 0 0 5455 0 2 1 **** **** 2 **** **** **** **** 0 1 **** **** **** **** **** **** **** **** **** ****
|
||||
105 83364 crafted_scroll 1 1 0x00000 0 0 IT_SCROLL 0 **** **** **** gi_scrl iit_scroll_002 0 1 0 **** **** **** 0 255 **** **** **** **** 10 1 10 0.36 1718 27 1 0 9 2 **** **** **** **** **** **** 0 0 5470 0 0 1 **** **** 2 **** **** **** **** 1 1 **** **** **** **** **** **** **** **** **** ****
|
||||
106 83363 crafted_magicwand 1 2 0x1C030 1 2 WMGWn 0 1 1 1 it_bag iwmgwn 0 1 2 1 **** **** 0 255 1 1 1 1 8 1 1 1 1707 16 1 1 10 3 **** **** **** **** **** **** 0 0 66196 50 1 10 4 **** 1 **** **** **** **** 10 1 **** **** **** **** **** **** **** **** **** ****
|
||||
@@ -116,7 +116,7 @@
|
||||
112 83664 craftbase 2 2 0x00000 0 0 it_midmisc 0 1 1 1 it_bag iinvalid_2x2 0 1 0 **** **** **** 0 255 **** **** **** **** 16 0 1 1 83698 29 8 0 15 4 **** **** **** **** **** **** 0 0 5449 0 0 5 **** **** 1 **** **** **** **** 0 1 **** **** **** **** **** **** **** **** **** ****
|
||||
113 **** padding **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||
114 **** START_NWNEE_WPN_FEATS **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||
115 67252 heavypick 2 3 0x1c030 1 2 wblph 0 1 1 1 it_bag iwblph 0 **** 1 3 **** 1.4 10 255 1 6 1 4 1 8 1 2 16807222 9 8 0 0 1 **** **** **** **** **** 4 0 0 16807223 0 1 60 17 **** **** **** 100 100 0 73 1 24602 24614 24626 24638 24650 24662 24674 24686 **** ****
|
||||
115 67252 heavypick 2 4 0x1c030 1 2 wblph 0 1 1 1 it_bag iwblph 0 **** 1 3 **** 1.4 10 255 1 6 1 4 1 8 1 2 16807222 9 8 0 0 1 **** **** **** **** **** 4 0 0 16807223 0 1 60 17 **** **** **** 100 100 0 73 1 24602 24614 24626 24638 24650 24662 24674 24686 **** ****
|
||||
116 67256 lightpick 1 2 0x1c030 1 2 wblpl 0 1 1 1 it_bag iwblpl 0 **** 1 2 **** 1.1 10 255 1 4 1 4 1 4 1 2 16807225 13 8 0 0 1 **** **** **** **** **** 4 0 0 16807226 0 1 40 2 **** **** **** 100 100 0 27 1 24603 24615 24627 24639 24651 24663 24675 24687 **** 2
|
||||
117 16807227 sai 1 1 0x1C030 0 2 wswsi 0 1 1 1 it_bag iwswsi 0 **** 2 1 **** 1.1 10 255 1 4 2 2 1 3 1 2 16807228 7 8 0 0 1 **** **** **** **** **** 4 0 0 16807229 0 1 10 18 **** **** **** 100 100 0 9 1 24604 24616 24628 24640 24652 24664 24676 24688 1 2
|
||||
118 16807230 nunchaku 1 3 0x1C030 1 2 wblnn 0 1 1 1 it_bag iwblnn 0 **** 2 2 **** 1.4 10 255 1 6 1 2 1 2 1 2 16807231 12 8 0 0 1 **** **** **** **** **** 4 0 0 16807232 0 1 20 3 **** **** **** 100 100 0 74 1 24605 24617 24629 24641 24653 24665 24677 24689 1 2
|
||||
@@ -250,8 +250,8 @@
|
||||
246 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||
247 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||
248 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||
249 16989398 craft_scepter 1 3 0x1C030 1 2 WMgRd 0 1 1 1 it_bag iwmgrd 0 **** 2 3 **** 1.2 10 255 1 6 1 2 8 1 1 1 16989399 16 8 0 4 3 **** **** **** **** **** **** 4 0 61890 50 1 60 2 **** 1 **** 100 100 0 10 1 43 619 47 657 15 709 495 919 **** ****
|
||||
250 16989400 magic_scepter 1 3 0x1C030 1 2 WMgRd 0 1 1 1 it_bag iwmgrd 0 **** 2 3 **** 1.2 10 255 1 6 1 2 8 1 1 1 16989401 16 8 0 4 3 **** **** **** **** **** **** 4 0 61890 50 1 60 2 **** 1 **** 100 100 0 10 1 43 619 47 657 15 709 495 919 **** ****
|
||||
249 16989399 crafted_scepter 1 3 0x1C030 1 2 WMgRd 0 1 1 1 it_bag iwmgrd 0 **** 2 3 **** 1.2 10 255 1 6 1 2 8 10 1 1 16989400 16 8 0 4 3 **** **** **** **** **** **** 4 0 16989401 50 1 30 2 **** 1 **** 100 100 0 10 1 43 619 47 657 15 709 495 919 **** ****
|
||||
250 16989402 crafted_vial 1 2 0x00000 0 0 it_thnmisc 0 1 1 1 it_potion_000 iit_thnmisc_019 0 1 0 **** **** **** 0 255 **** **** **** **** 16 0 1 1 16989403 24 8 0 15 3 **** **** **** **** **** **** 0 0 5470 0 0 3 **** **** 1 **** **** **** **** 0 1 **** **** **** **** **** **** **** **** **** ****
|
||||
251 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||
252 16989220 mundane_herb 1 1 0x00000 0 0 it_herb 0 **** **** **** it_bag iit_herb_000 0 1 0 **** **** **** 0 255 **** **** **** **** 16 1 1 0.36 16989221 2 1 0 9 2 **** **** **** **** **** **** 0 0 5470 0 0 0 **** **** 2 **** **** **** **** 1 1 **** **** **** **** **** **** **** **** **** ****
|
||||
253 16989222 infused_herb 1 1 0x00000 0 0 it_herb 0 **** **** **** it_bag iit_herb_254 0 1 0 **** **** **** 0 255 **** **** **** **** 16 1 10 0.36 16989223 2 1 0 9 2 **** **** **** **** **** **** 0 0 5470 0 0 0 **** **** 2 **** **** **** **** 1 1 **** **** **** **** **** **** **** **** **** ****
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -496,7 +496,7 @@
|
||||
492 ###cls_feat_allBaseClasses_BEGIN### **** **** **** ****
|
||||
493 **Bio169Feats** **** **** **** ****
|
||||
494 FEAT_HORSE_MENU 1089 3 1 1
|
||||
495 PLAYER_TOOL_01 1106 1 1 1
|
||||
495 PLAYER_TOOL_01 1106 3 1 1
|
||||
496 PLAYER_TOOL_02 1107 1 999 1
|
||||
497 PLAYER_TOOL_03 1108 1 999 1
|
||||
498 PLAYER_TOOL_04 1109 1 999 1
|
||||
@@ -678,438 +678,486 @@
|
||||
674 Invest_Armour 3643 0 -1 1
|
||||
675 Strength_of_Two 4965 0 -1 1
|
||||
676 **** **** **** **** ****
|
||||
677 **IncarnumFeats** **** **** **** ****
|
||||
678 InvestEssentiaConversation 8800 0 999 1
|
||||
679 HealingSoul 8882 0 999 1
|
||||
680 MidnightAugmentation 8884 0 999 1
|
||||
681 PsycarnumBlade 8887 0 999 1
|
||||
682 DivineSoultouch 8891 0 999 1
|
||||
683 PsycarnumInfusion 8896 0 999 1
|
||||
684 **** **** **** **** ****
|
||||
685 **BindingFeats** **** **** **** ****
|
||||
686 BindVestige 9131 0 -1 1
|
||||
687 ExpelVestige 9136 0 -1 1
|
||||
688 MalphasArcaneEye 9040 0 999 1
|
||||
689 SavnokCallArmor 9043 0 999 1
|
||||
690 AndromaliusSee_Invisibility 9048 0 999 1
|
||||
691 FocalorAuraSadness 9049 0 999 1
|
||||
692 KarsusSenses 9052 0 999 1
|
||||
693 **** **** **** **** ****
|
||||
694 **RacialFeats** **** **** **** ****
|
||||
695 FEAT_STONECHILD_MAGIC_STONE 5179 0 999 1
|
||||
696 FEAT_ASHERATI_BODY_DAZZLE 5213 0 999 1
|
||||
697 FEAT_ASHERATI_BODY_LAMP 5214 0 999 1
|
||||
698 FEAT_URDINNIR_STONESKIN 4644 0 999 1
|
||||
699 FEAT_AVARIEL_DIVE 4645 0 999 1
|
||||
700 FEAT_AYUAN_FEAR 4646 0 999 1
|
||||
701 FEAT_AYUAN_ENTANGLE 4647 0 999 1
|
||||
702 FEAT_AYUAN_DARKNESS 4648 0 999 1
|
||||
703 FEAT_AYUAN_NEUTRALIZE_POISON 4649 0 999 1
|
||||
704 FEAT_AASIMAR_LIGHT 4650 0 999 1
|
||||
705 FEAT_TIEFLING_DARK 4651 0 999 1
|
||||
706 FEAT_SVIRF_BLIND_DEAF 4652 0 999 1
|
||||
707 FEAT_SVIRF_BLUR 4653 0 999 1
|
||||
708 FEAT_SVIRF_DISGUISE 4654 0 999 1
|
||||
709 FEAT_SVIRF_REVERT 4655 0 999 1
|
||||
710 FEAT_RAK_DISGUISE 4656 0 999 1
|
||||
711 FEAT_RAK_CHANGE_SHAPE 4657 0 999 1
|
||||
712 FEAT_PYUAN_CHARM 4658 0 999 1
|
||||
713 FEAT_PYUAN_DARKNESS 4659 0 999 1
|
||||
714 FEAT_PYUAN_ENTANGLE 4660 0 999 1
|
||||
715 FEAT_PYUAN_FEAR 4661 0 999 1
|
||||
716 FEAT_PIXIE_INVIS 4662 0 999 1
|
||||
717 FEAT_PIXIE_CONFUSE 4663 0 999 1
|
||||
718 FEAT_PIXIE_ENTANGLE 4664 0 999 1
|
||||
719 FEAT_PIXIE_DISPEL_MAGIC 4665 0 999 1
|
||||
720 FEAT_PIXIE_POLYMORPH 4666 0 999 1
|
||||
721 FEAT_PIXIE_REVERT 4667 0 999 1
|
||||
722 FEAT_MINOTAUR_CHARGE 4668 0 999 1
|
||||
723 FEAT_ILLITHID_CHARM 4669 0 999 1
|
||||
724 FEAT_ILLITHID_BLAST 4670 0 999 1
|
||||
725 FEAT_ILLITHID_SUCKBRAIN 4671 0 999 1
|
||||
726 FEAT_GITHZERAI_DAZE 4672 0 999 1
|
||||
727 FEAT_GITHYANKI_DAZE 4673 0 999 1
|
||||
728 FEAT_GITHYANKI_BLUR 4674 0 999 1
|
||||
729 FEAT_FEYRI_CHARMPERSON 4675 0 999 1
|
||||
730 FEAT_FEYRI_CLAIRAUDIENCE 4676 0 999 1
|
||||
731 FEAT_FEYRI_DARKNESS 4677 0 999 1
|
||||
732 FEAT_FEYRI_ENERVATION 4678 0 999 1
|
||||
733 FEAT_FEYRI_ALTER 4679 0 999 1
|
||||
734 FEAT_FEYRI_REVERT 4680 0 999 1
|
||||
735 FEAT_DUERGAR_INVIS 4681 0 999 1
|
||||
736 FEAT_DROW_DARKNESS 4682 0 999 1
|
||||
737 FEAT_DROW_FAERIE_FIRE 4683 0 999 1
|
||||
738 BROWNIE_RAKSHASA_HIPS 433 0 999 0
|
||||
739 FEAT_WGNOME_SILENCE 4555 0 999 1
|
||||
740 FEAT_WGNOME_MAGEHAND 4519 0 999 1
|
||||
741 FEAT_HOUND_AID 4574 0 999 1
|
||||
742 FEAT_HOUND_AURAMENACE 4548 0 999 1
|
||||
743 FEAT_HOUND_CONTFLAME 4514 0 999 1
|
||||
744 FEAT_HOUND_DETECTEVIL 4618 0 999 1
|
||||
745 FEAT_HOUND_DISGUISE 4513 0 999 1
|
||||
746 FEAT_HOUND_MAGICCIRCLE 4515 0 999 1
|
||||
747 FEAT_HOUND_TELEPORT 4516 0 999 1
|
||||
748 FEAT_RACE_ENERGYRAY 4856 0 999 1
|
||||
749 FEAT_RACE_ENERGYRAYSONIC 4520 0 999 1
|
||||
750 FEAT_ELAN_RESISTANCE 4521 0 999 1
|
||||
751 FEAT_ELAN_RESILIANCE 4522 0 999 1
|
||||
752 FEAT_PSIRACE_STOMP 4524 0 999 1
|
||||
753 FEAT_MAENAD_OUTBURST 4525 0 999 1
|
||||
754 FEAT_XEPH_BURST 4526 0 999 1
|
||||
755 FEAT_ZENYTH_TRUESTRIKE 4536 0 999 1
|
||||
756 FEAT_TULADH_MAGIC_CIRCL 4533 0 999 1
|
||||
757 FEAT_NATHRI_EXP_RETREAT 4534 0 999 1
|
||||
758 FEAT_BLADELING_RAZOR_STORM 4539 0 999 1
|
||||
759 FEAT_KAPAK_SALIVA 4546 0 999 1
|
||||
760 FEAT_IRDA_FLARE 4551 0 999 1
|
||||
761 FEAT_ZAKYA_CHILLTOUCH 4570 0 999 1
|
||||
762 FEAT_ZAKYA_TRUESTRIKE 4557 0 999 1
|
||||
763 FEAT_ZAKYA_VAMPTOUCH 4558 0 999 1
|
||||
764 FEAT_MINOR_CHANGE_SHAPE 4560 0 999 1
|
||||
765 FEAT_CHANGELING_CHANGE_SHAPE 4561 0 999 1
|
||||
766 FEAT_IRDA_CHANGE_SHAPE 4562 0 999 1
|
||||
767 FEAT_QUICK_CHANGE_SHAPE 4563 0 999 1
|
||||
768 FEAT_SHIFTER_SHIFTING 4566 0 999 1
|
||||
769 FEAT_RAK_SHADOW_JUMP 3307 0 999 1
|
||||
770 FEAT_NIXIE_CHARM_PERSON 4597 0 999 1
|
||||
771 FEAT_NIXIE_WATERBREATHING 4641 0 999 1
|
||||
772 FEAT_NYMPH_DIMENSION_DOOR 4755 0 999 1
|
||||
773 FEAT_NYMPH_STUNNING_GLANCE 4684 0 999 1
|
||||
774 FEAT_NYMPH_BLINDING_BEAUTY 4685 0 999 1
|
||||
775 FEAT_GRIG_PYROTECHNICS 4686 0 999 1
|
||||
776 FEAT_GRIG_INVIS 4687 0 999 1
|
||||
777 FEAT_GRIG_ENTANGLE 4635 0 999 1
|
||||
778 FEAT_BRALANI_LIGHTNING_BOLT 4995 0 999 1
|
||||
779 FEAT_BRALANI_CURE_SERIOUS 4996 0 999 1
|
||||
780 FEAT_BRALANI_BLUR 4997 0 999 1
|
||||
781 FEAT_BRALANI_CHARM_PERSON 4998 0 999 1
|
||||
782 FEAT_BRALANI_MIRROR_IMAGE 4999 0 999 1
|
||||
783 FEAT_BRALANI_GUST_OF_WIND 4978 0 999 1
|
||||
784 FEAT_TOUCH_OF_LUCK 4634 0 999 1
|
||||
785 FEAT_FORESTLORD_TREEWALK 4633 0 999 1
|
||||
786 FEAT_TROGLODYTE_STENCH 23549 0 999 1
|
||||
787 Skarn_spines 5180 0 999 1
|
||||
788 Killoren_Aspect_H 5209 0 999 1
|
||||
789 Killoren_Aspect_D 5210 0 999 1
|
||||
790 Killoren_Aspect_A 5211 0 999 1
|
||||
791 FrostFolk_IceBlast 5372 0 999 1
|
||||
792 Uldra_RayFrost 5373 0 999 1
|
||||
793 Uldra_Fatigue 5374 0 999 1
|
||||
794 Marrulurk_DA 2930 0 999 1
|
||||
795 Marrulurk_NauseatingBreath 5375 0 999 1
|
||||
796 ExtaminaarCharmAnimal 5379 0 999 1
|
||||
797 Marrusault_Howl 3308 0 999 1
|
||||
798 FEAT_HYBSIL_MIRROR_IMAGE 5382 0 999 1
|
||||
799 FEAT_HYBSIL_DANCLIGHTS 5383 0 999 1
|
||||
800 FEAT_HYBSIL_JUMP 5384 0 999 1
|
||||
801 FEAT_WILDREN_FURY 5386 0 999 1
|
||||
802 Turlemoi_RockThrowing 5419 0 999 1
|
||||
803 Arkamoi_ArcaneMastermind 5424 0 999 1
|
||||
804 Muckdweller_Squirt 5425 0 999 1
|
||||
805 Aranea_AlternateForm 5426 0 999 1
|
||||
806 Aranea_Web 5427 0 999 1
|
||||
807 Mephling_breath 5429 0 999 1
|
||||
808 FEAT_FOG_CLOUD_BREATH 5434 0 999 1
|
||||
809 Warsoul_CultPower 1805 0 999 1
|
||||
810 Warsoul_SoulTyrant 1806 0 999 1
|
||||
811 **** **** **** **** ****
|
||||
812 **BonusDomains** **** **** **** ****
|
||||
813 FEAT_CHECK_DOMAIN_SLOTS 2000 0 999 1
|
||||
814 FEAT_CAST_DOMAIN_LEVEL_ONE 2049 0 999 1
|
||||
815 FEAT_CAST_DOMAIN_LEVEL_TWO 2050 0 999 1
|
||||
816 FEAT_CAST_DOMAIN_LEVEL_THREE 2051 0 999 1
|
||||
817 FEAT_CAST_DOMAIN_LEVEL_FOUR 2052 0 999 1
|
||||
818 FEAT_CAST_DOMAIN_LEVEL_FIVE 2053 0 999 1
|
||||
819 FEAT_CAST_DOMAIN_LEVEL_SIX 2054 0 999 1
|
||||
820 FEAT_CAST_DOMAIN_LEVEL_SEVEN 2055 0 999 1
|
||||
821 FEAT_CAST_DOMAIN_LEVEL_EIGHT 2056 0 999 1
|
||||
822 FEAT_CAST_DOMAIN_LEVEL_NINE 2057 0 999 1
|
||||
823 Strength_Domain_Power 307 0 999 1
|
||||
824 Protection_Domain_Power 308 0 999 1
|
||||
825 Death_Domain_Power 310 0 999 1
|
||||
826 Air_Domain_Power 311 0 999 1
|
||||
827 Destruction_Domain_Power 313 0 999 1
|
||||
828 Earth_Domain_Power 314 0 999 1
|
||||
829 Fire_Domain_Power 316 0 999 1
|
||||
830 Plant_Domain_Power 321 0 999 1
|
||||
831 Sun_Domain_Power 322 0 999 1
|
||||
832 Travel_Domain_Power 323 0 999 1
|
||||
833 Trickery_Domain_Power 324 0 999 1
|
||||
834 Water_Domain_Power 325 0 999 1
|
||||
835 FEAT_ORC_DOMAIN 4041 0 999 1
|
||||
836 FEAT_SLIME_DOMAIN 4043 0 999 1
|
||||
837 FEAT_CHARM_DOMAIN 4045 0 999 1
|
||||
838 FEAT_FAMILY_DOMAIN 4051 0 999 1
|
||||
839 FEAT_HALFLING_DOMAIN 4052 0 999 1
|
||||
840 FEAT_ILLUSION_DOMAIN 4053 0 999 0
|
||||
841 FEAT_HATRED_DOMAIN 4054 0 999 1
|
||||
842 FEAT_NOBILITY_DOMAIN 4055 0 999 1
|
||||
843 FEAT_SCALEYKIND_DOMAIN 4057 0 999 1
|
||||
844 FEAT_RENEWAL_DOMAIN 4060 0 999 1
|
||||
845 FEAT_SPIDER_DOMAIN 4061 0 999 1
|
||||
846 FEAT_BLIGHTBRINGER 2250 0 999 1
|
||||
847 **** **** **** **** ****
|
||||
848 **Templates** **** **** **** ****
|
||||
849 Celestial_Smite_Evil 22601 0 999 1
|
||||
850 Fiendish_Smite_Good 22603 0 999 1
|
||||
851 Half_Celestial_Smite_Evil 22605 0 999 1
|
||||
852 Half_Celestial_Protection_from_Evil 22606 0 999 1
|
||||
853 Half_Celestial_Bless 22607 0 999 1
|
||||
854 Half_Celestial_Aid 22608 0 999 1
|
||||
855 Half_Celestial_Detect_Evil 22609 0 999 1
|
||||
856 Half_Celestial_Cure_Serious_Wounds 22610 0 999 1
|
||||
857 Half_Celestial_Neutralize_Poison 22611 0 999 1
|
||||
858 Half_Celestial_HolySmite **** 0 999 1
|
||||
859 Half_Celestial_Remove_Disease 22613 0 999 1
|
||||
860 Half_Celestial_DispelEvil **** 0 999 1
|
||||
861 Half_Celestial_Holy_Word 22615 0 999 1
|
||||
862 Half_Celestial_HolyAura 22616 0 999 1
|
||||
863 Half_Celestial_Hallow **** 0 999 1
|
||||
864 Half_Celestial_Mass_Charm 22618 0 999 1
|
||||
865 Half_Celestial_Summon_Creature_IX 22619 0 999 1
|
||||
866 Half_Celestial_Resurrection 22620 0 999 1
|
||||
867 Half_Celestial_Daylight 22621 0 999 1
|
||||
868 Half_Fiendish_Smite_Good 22624 0 999 1
|
||||
869 Half_Fiendish_Darkness 22625 0 999 1
|
||||
870 Half_Fiendish_Desecrate **** 0 999 1
|
||||
871 Half_Fiendish_Unholy_Blight **** 0 999 1
|
||||
872 Half_Fiendish_Poison 22628 0 999 1
|
||||
873 Half_Fiendish_Contagion 22629 0 999 1
|
||||
874 Half_Fiendish_Blasphemy 22630 0 999 1
|
||||
875 Half_Fiendish_Unholy_Aura **** 0 999 1
|
||||
876 Half_Fiendish_Unhallow **** 0 999 1
|
||||
877 Half_Fiendish_Horrid_Wilting 22633 0 999 1
|
||||
878 Half_Fiendish_Summon_Creature_IX 22634 0 999 1
|
||||
879 Half_Fiendish_Destruction 22635 0 999 1
|
||||
880 Lich_Fear_Aura 22637 0 999 1
|
||||
881 Lich_Paralyzing_Touch 22638 0 999 1
|
||||
882 Lich_Appearance 22639 0 999 1
|
||||
883 Demilich_Alter_Self 22641 0 999 1
|
||||
884 Demilich_Astral_Projection **** 0 999 1
|
||||
885 Demilich_Create_Greater_Undead 22643 0 999 1
|
||||
886 Demilich_Create_Undead 22644 0 999 1
|
||||
887 Demilich_Death_Knell **** 0 999 1
|
||||
888 Demilich_Enervation 22646 0 999 1
|
||||
889 Demilich_Greater_Dispel_Magic 22647 0 999 1
|
||||
890 Demilich_Harm 22648 0 999 1
|
||||
891 Demilich_Summon_Creature_I 22649 0 999 1
|
||||
892 Demilich_Summon_Creature_II 22650 0 999 1
|
||||
893 Demilich_Summon_Creature_III 22651 0 999 1
|
||||
894 Demilich_Summon_Creature_IV 22652 0 999 1
|
||||
895 Demilich_Summon_Creature_V 22653 0 999 1
|
||||
896 Demilich_Summon_Creature_VI 22654 0 999 1
|
||||
897 Demilich_Summon_Creature_VII 22655 0 999 1
|
||||
898 Demilich_Summon_Creature_VIII 22656 0 999 1
|
||||
899 Demilich_Summon_Creature_IX 22657 0 999 1
|
||||
900 Demilich_Telekinesis **** 0 999 1
|
||||
901 Demilich_Weird 22659 0 999 1
|
||||
902 Demilich_Greater_Planar_Ally 22660 0 999 1
|
||||
903 HalfDragon_Breath_Weapon 22662 0 999 1
|
||||
904 Earth_Strike 5328 0 999 1
|
||||
905 BloodedOne_War_Cry 5377 0 999 1
|
||||
906 RethDekala_VilefireBlast 5409 0 999 1
|
||||
907 RethDekala_MartialSpirit 5410 0 999 1
|
||||
908 RethDekala_ThicketOfBlades 5411 0 999 1
|
||||
909 RethDekala_DauntingStrike 5412 0 999 1
|
||||
910 RethDekala_DeathFromAbove 5413 0 999 1
|
||||
911 RethDekala_DisarmingStrike 5414 0 999 1
|
||||
912 RethDekala_EntanglingBlade 5415 0 999 1
|
||||
913 RethDekala_WallOfBlades 5416 0 999 1
|
||||
914 RethDekala_RecoverManeuvers 5417 0 999 1
|
||||
915 ArchlichTurnUndead 22701 0 999 1
|
||||
916 FEAT_ANIMATE_DEAD 3574 0 999 1
|
||||
917 FEAT_PROJECTION 3579 0 999 1
|
||||
918 FEAT_END_PROJECTION 3575 0 999 1
|
||||
919 **** **** **** **** ****
|
||||
920 Saint_Bless 22702 0 999 1
|
||||
921 Saint_Guidance_Placeholder **** **** **** ****
|
||||
922 Saint_Resistance 22704 0 999 1
|
||||
923 Saint_Virtue 22705 0 999 1
|
||||
924 Saint_Protective_Aura 22706 0 999 1
|
||||
925 **** **** **** **** ****
|
||||
926 **WeaponsOfLegacy** **** **** **** ****
|
||||
927 BBB_Darkvision 22710 0 999 1
|
||||
928 BBB_Longstrider 22711 0 999 1
|
||||
929 BBB_Lesser_Restoration 22712 0 999 1
|
||||
930 BBB_Teleport_SelfOnly 22713 0 999 1
|
||||
931 BBB_Protection_from_Evil 22714 0 999 1
|
||||
932 BBB_Drowseeker 22715 0 999 1
|
||||
933 BBB_ShockingShot 22716 0 999 1
|
||||
934 BBB_PierceTheBlackHeart 22717 0 999 1
|
||||
935 Steadfast_vigor 22718 0 999 1
|
||||
936 Steadfast_slow 22719 0 999 1
|
||||
937 Flay_SnakeSting 22720 0 999 1
|
||||
938 Flay_WhipWrap 22721 0 999 1
|
||||
939 CrimsonRuination_FrozenFate 22722 0 999 1
|
||||
940 Devious_DetectThoughts 22723 0 999 1
|
||||
941 SimpleBow_TrueSeeing 22724 0 999 1
|
||||
942 SimpleBow_Prescience 22725 0 999 1
|
||||
943 SimpleBow_Focus 22726 0 999 1
|
||||
944 Aradros_Extend 22727 0 999 1
|
||||
945 Aradros_Survive 22728 0 999 1
|
||||
946 Guurgal_Force 22729 0 999 1
|
||||
947 Guurgal_Rage 22730 0 999 1
|
||||
948 DivSpark_Fear 22731 0 999 1
|
||||
949 DivSpark_Light 22732 0 999 1
|
||||
950 Wargirds_Haste 22733 0 999 1
|
||||
951 Wargirds_Stoneskin 22734 0 999 1
|
||||
952 DesertWind_FierySlash 22735 0 999 1
|
||||
953 DesertWind_HowlingWind 22736 0 999 1
|
||||
954 DesertWind_FanFlames 22737 0 999 1
|
||||
955 DesertWind_DustDesert 22738 0 999 1
|
||||
956 Mindsplinter_VirtueDenied 22739 0 999 1
|
||||
957 Mindsplinter_KissOfDeath 22740 0 999 1
|
||||
958 Mindsplinter_BattleShriek 22741 0 999 1
|
||||
959 Mindsplinter_RuinousHowl 22742 0 999 1
|
||||
960 NotchedSpear_ParliamentOfFishes 22743 0 999 1
|
||||
961 NotchedSpear_ConcealmentKraken 22744 0 999 1
|
||||
962 NotchedSpear_ScionSea 22745 0 999 1
|
||||
963 NotchedSpear_CommandSeaChildren 22746 0 999 1
|
||||
964 Ur_SwiftStride 22747 0 999 1
|
||||
965 Ur_HealingTotem 22748 0 999 1
|
||||
966 Ur_SavageTransformation 22749 0 999 1
|
||||
967 FlamecastersBolt_MarkTarget 22750 0 999 1
|
||||
968 FlamecastersBolt_Morale 22751 0 999 1
|
||||
969 FlamecastersBolt_Fireball 22752 0 999 1
|
||||
970 StalkersBow_StalkersInsight 22753 0 999 1
|
||||
971 StalkersBow_Ethereal 22754 0 999 1
|
||||
972 Exordius_Guidance 22755 0 999 1
|
||||
973 Exordius_Cure 22756 0 999 1
|
||||
974 Exordius_Dismissal 22757 0 999 1
|
||||
975 Caladbolg_Imprison 22758 0 999 1
|
||||
976 HammerWitches_Detect 22759 0 999 1
|
||||
977 HammerWitches_Spellbreaker 22760 0 999 1
|
||||
978 HammerWitches_AMF 22761 0 999 1
|
||||
979 HammerWitches_Dispel 22762 0 999 1
|
||||
980 HammerWitches_Mantle 22763 0 999 1
|
||||
981 SlingOfTheDireWind_StunningStone 22764 0 999 1
|
||||
982 SlingOfTheDireWind_GustOfWind 22765 0 999 1
|
||||
983 SlingOfTheDireWind_WindWall 22766 0 999 1
|
||||
984 Treebrother_Shillelagh 22767 0 999 1
|
||||
985 Treebrother_Charm_Plant 22768 0 999 1
|
||||
986 Treebrother_Entangle 22769 0 999 1
|
||||
987 Treebrother_Owls_Insight 22770 0 999 1
|
||||
988 Treebrother_Changestaff 22771 0 999 1
|
||||
989 FullMoonsTrick_Rage 22772 0 999 1
|
||||
990 FullMoonsTrick_Invis 22773 0 999 1
|
||||
991 FiendkillersFlail_Darkvis 22774 0 999 1
|
||||
992 FiendkillersFlail_Detect 22775 0 999 1
|
||||
993 ScalesBalance_Detect 22776 0 999 1
|
||||
994 ScalesBalance_Cure 22777 0 999 1
|
||||
995 ScalesBalance_Knell 22778 0 999 1
|
||||
996 ScalesBalance_Enerv 22779 0 999 1
|
||||
997 ScalesBalance_Heal 22780 0 999 1
|
||||
998 ScalesBalance_Finger 22781 0 999 1
|
||||
999 ShishiO_Charm 22782 0 999 1
|
||||
1000 ShishiO_Summon 22783 0 999 1
|
||||
1001 ShishiO_Poly 22784 0 999 1
|
||||
1002 ShishiO_Shout 22785 0 999 1
|
||||
1003 Dymondheart_ShedBolts 22786 0 999 1
|
||||
1004 Dymondheart_Deflect 22787 0 999 1
|
||||
1005 Dymondheart_Daylight 22788 0 999 1
|
||||
1006 Dymondheart_Cure 22789 0 999 1
|
||||
1007 Dymondheart_Banish 22790 0 999 1
|
||||
1008 Sunsword_Daylight 22791 0 999 1
|
||||
1009 Sunsword_Death_Ward 22792 0 999 1
|
||||
1010 Sunsword_Banish 22793 0 999 1
|
||||
1011 Sunsword_Undeath 22794 0 999 1
|
||||
1012 Blackrazor_Detect 22795 0 999 1
|
||||
1013 Blackrazor_Knell 22796 0 999 1
|
||||
1014 Blackrazor_Haste 22797 0 999 1
|
||||
1015 Ramethene_Detect 22798 0 999 1
|
||||
1016 Ramethene_Smite 22799 0 999 1
|
||||
1017 Ramethene_Resist_Elements 22800 0 999 1
|
||||
1018 Ramethene_Cloudkill 22801 0 999 1
|
||||
1019 Ramethene_SuddenMaximize 22802 0 999 1
|
||||
1020 Ramethene_Horrid_Wilting 22803 0 999 1
|
||||
1021 Wyrmbane_Cause_Fear 22804 0 999 1
|
||||
1022 Wyrmbane_Lightning_Bolt 22805 0 999 1
|
||||
1023 Wyrmbane_Sudden_Emp 22806 0 999 1
|
||||
1024 Wyrmbane_Breath_Lightning 22807 0 999 1
|
||||
1025 Whelm_Detect_Giant 22808 0 999 1
|
||||
1026 Whelm_Locate_Object 22809 0 999 1
|
||||
1027 Whelm_Detect_Goblin 22810 0 999 1
|
||||
1028 Ravenkind_Dancing_Lights 22811 0 999 1
|
||||
1029 Ravenkind_Light 22812 0 999 1
|
||||
1030 Ravenkind_Flare 22813 0 999 1
|
||||
1031 Ravenkind_Detect_Undead 22814 0 999 1
|
||||
1032 Ravenkind_Halt_Undead 22815 0 999 1
|
||||
1033 Ravenkind_Cure_Light_Wounds 22816 0 999 1
|
||||
1034 Ravenkind_Daylight 22817 0 999 1
|
||||
1035 Ravenkind_Death_Ward 22818 0 999 1
|
||||
1036 Ravenkind_Break_Enchantment 22819 0 999 1
|
||||
1037 Ravenkind_Mass_Heal 22820 0 999 1
|
||||
1038 LastCitadel_LeadingTheAttack 22821 0 999 1
|
||||
1039 LastCitadel_Prayer 22822 0 999 1
|
||||
1040 LastCitadel_Remove_Fear 22823 0 999 1
|
||||
1041 LastCitadel_Cure_Critical_Wounds 22824 0 999 1
|
||||
1042 LastCitadel_Blade_Barrier 22825 0 999 1
|
||||
1043 LastCitadel_Heal 22826 0 999 1
|
||||
1044 Unfettered_ChargingMinotaur 22827 0 999 1
|
||||
1045 Unfettered_ENLARGE_PERSON 22828 0 999 1
|
||||
1046 Unfettered_Etherealness 22829 0 999 1
|
||||
1047 Unfettered_Stoneskin 22830 0 999 1
|
||||
1048 Unfettered_Mordenkainens_Sword 22831 0 999 1
|
||||
1049 Hillcrusher_Earthen_Might 22832 0 999 1
|
||||
1050 Hillcrusher_Soften_Earth 22833 0 999 1
|
||||
1051 Hillcrusher_Fangs_of_Stone 22834 0 999 1
|
||||
1052 Hillcrusher_Raise_the_Earth 22835 0 999 1
|
||||
1053 Hillcrusher_Shake_the_Earth 22836 0 999 1
|
||||
1054 DesertWindToB_BurningBlade 22837 0 999 1
|
||||
1055 DesertWindToB_FanTheFlames 22838 0 999 1
|
||||
1056 DesertWindToB_WyrmsFlame 22839 0 999 1
|
||||
1057 Faithful_Detect_Evil 22840 0 999 1
|
||||
1058 Faithful_Lesser_Restoration 22841 0 999 1
|
||||
1059 Faithful_Restoration 22842 0 999 1
|
||||
1060 Faithful_Resiliency 22843 0 999 1
|
||||
1061 Faithful_ImmortalFortitude 22844 0 999 1
|
||||
1062 SupernalClarity_SapphireNightmareBlade 22845 0 999 1
|
||||
1063 SupernalClarity_PsychicPoise 22846 0 999 1
|
||||
1064 SupernalClarity_Haste 22847 0 999 1
|
||||
1065 SupernalClarity_Freeeeeedom 22848 0 999 1
|
||||
1066 SupernalClarity_Time_Stop 22849 0 999 1
|
||||
1067 Kamate_SteelWind 22850 0 999 1
|
||||
1068 Kamate_ShockingGrasp 22851 0 999 1
|
||||
1069 Kamate_Lightning_Bolt 22852 0 999 1
|
||||
1070 Kamate_Chain_Lightning 22853 0 999 1
|
||||
1071 Kamate_True_Strike 22854 0 999 1
|
||||
1072 Eventide_CometThrow 22855 0 999 1
|
||||
1073 Eventide_BafflingDefense 22856 0 999 1
|
||||
1074 Eventide_Improved_Invisibility 22857 0 999 1
|
||||
1075 Umbral_Invisibility 22858 0 999 1
|
||||
1076 Umbral_Shadowstep 22859 0 999 1
|
||||
1077 TigerFang_FrenziedCharge 22860 0 999 1
|
||||
1078 TigerFang_BattleFever 22861 0 999 1
|
||||
1079 TigerFang_Haste 22862 0 999 1
|
||||
1080 Bullybasher_KnockSilly 22863 0 999 1
|
||||
1081 Bullybasher_StoneGathering 22864 0 999 1
|
||||
1082 Bullybasher_LightningPunch 22865 0 999 1
|
||||
1083 Bullybasher_GiantBearing 26000 0 999 1
|
||||
1084 Lorestealer_Read_Magic 22866 0 999 1
|
||||
1085 Lorestealer_DetectMagic 22867 0 999 1
|
||||
1086 Lorestealer_Axecasting 22868 0 999 1
|
||||
1087 Durindana_Daylight 22869 0 999 1
|
||||
1088 Durindana_Death_Ward 22870 0 999 1
|
||||
1089 Durindana_Hallow 22871 0 999 1
|
||||
1090 Durindana_Dazzle 22872 0 999 1
|
||||
1091 Thaas_Detect_Demon 22873 0 999 1
|
||||
1092 Thaas_ObstructSummoning 22874 0 999 1
|
||||
1093 Thaas_Banishment 22875 0 999 1
|
||||
1094 Thaas_Teleport 22876 0 999 1
|
||||
1095 Quickspur_Entropic_Shield 22877 0 999 1
|
||||
1096 Quickspur_Resist_Elements 22878 0 999 1
|
||||
1097 Quickspur_PhantomSteed 22879 0 999 1
|
||||
1098 Quickspur_Blur 22880 0 999 1
|
||||
1099 Quickspur_Stoneskin 22881 0 999 1
|
||||
1100 BES_FIRE_OF_THE_HEART 22882 0 999 1
|
||||
1101 BES_ENTHRALLING_LIGHT 22883 0 999 1
|
||||
1102 BES_COLOR_SPRAY 22884 0 999 1
|
||||
1103 BES_BLINDING_FLASH 22885 0 999 1
|
||||
1104 BES_SHOOTING_STARS 22886 0 999 1
|
||||
1105 BES_GLITTERING_MOTES 22887 0 999 1
|
||||
1106 BES_TWINKLE 22888 0 999 1
|
||||
1107 BES_SILVER_STARLIGHT 22889 0 999 1
|
||||
1108 BES_STARLIGHT_DISPELLING 22890 0 999 1
|
||||
1109 BES_TALES_IN_THE_SKY 22891 0 999 1
|
||||
1110 BES_CALL_DOWN_A_STAR 22892 0 999 1
|
||||
1111 ###cls_feat_allBaseClasses_END### **** **** **** ****
|
||||
677 **HiddenTalents** **** **** **** ****
|
||||
678 FEAT_HIDDEN_TALENT_BIOFEEDBACK 25901 0 1 1
|
||||
679 FEAT_HIDDEN_TALENT_BITE_WOLF 25902 0 1 1
|
||||
680 FEAT_HIDDEN_TALENT_BOLT 25903 0 1 1
|
||||
681 FEAT_HIDDEN_TALENT_BURST 25904 0 1 1
|
||||
682 FEAT_HIDDEN_TALENT_CALLTOMIND 25905 0 1 1
|
||||
683 FEAT_HIDDEN_TALENT_CALL_WEAPONRY 25906 0 1 1
|
||||
684 FEAT_HIDDEN_TALENT_CHAMELEON 25907 0 1 1
|
||||
685 FEAT_HIDDEN_TALENT_CLAWS_BEAST 25908 0 1 1
|
||||
686 FEAT_HIDDEN_TALENT_COMPRESSION 25909 0 1 1
|
||||
687 FEAT_HIDDEN_TALENT_CONCEALTHOUGHT 25910 0 1 1
|
||||
688 FEAT_HIDDEN_TALENT_CREATESOUND 25911 0 1 1
|
||||
689 FEAT_HIDDEN_TALENT_CRYSTALSHARD 25912 0 1 1
|
||||
690 FEAT_HIDDEN_TALENT_DAZE 25913 0 1 1
|
||||
691 FEAT_HIDDEN_TALENT_DECELERATION 25914 0 1 1
|
||||
692 FEAT_HIDDEN_TALENT_DEFPRECOG 25915 0 1 1
|
||||
693 FEAT_HIDDEN_TALENT_DEMORALIZE 25916 0 1 1
|
||||
694 FEAT_HIDDEN_TALENT_DISABLE 25917 0 1 1
|
||||
695 FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH 25918 0 1 1
|
||||
696 FEAT_HIDDEN_TALENT_DISTRACT 25919 0 1 1
|
||||
697 FEAT_HIDDEN_TALENT_ELF_SIGHT 25920 0 1 1
|
||||
698 FEAT_HIDDEN_TALENT_EMPATHY 25921 0 1 1
|
||||
699 FEAT_HIDDEN_TALENT_EMPTYMIND 25922 0 1 1
|
||||
700 FEAT_HIDDEN_TALENT_ENERGYRAY 25923 0 1 1
|
||||
701 FEAT_HIDDEN_TALENT_ENTANGLE 25924 0 1 1
|
||||
702 FEAT_HIDDEN_TALENT_EXPANSION 25925 0 1 1
|
||||
703 FEAT_HIDDEN_TALENT_FARHAND 25926 0 1 1
|
||||
704 FEAT_HIDDEN_TALENT_FORCESCREEN 25927 0 1 1
|
||||
705 FEAT_HIDDEN_TALENT_GREASE 25928 0 1 1
|
||||
706 FEAT_HIDDEN_TALENT_HAMMER 25929 0 1 1
|
||||
707 FEAT_HIDDEN_TALENT_INERTIALARMOUR 25930 0 1 1
|
||||
708 FEAT_HIDDEN_TALENT_MATTERAGITATION 25931 0 1 1
|
||||
709 FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW 25932 0 1 1
|
||||
710 FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON 25933 0 1 1
|
||||
711 FEAT_HIDDEN_TALENT_MINDTHRUST 25934 0 1 1
|
||||
712 FEAT_HIDDEN_TALENT_MYLIGHT 25935 0 1 1
|
||||
713 FEAT_HIDDEN_TALENT_OFFPRECOG 25936 0 1 1
|
||||
714 FEAT_HIDDEN_TALENT_OFFPRESC 25937 0 1 1
|
||||
715 FEAT_HIDDEN_TALENT_PREVENOM 25938 0 1 1
|
||||
716 FEAT_HIDDEN_TALENT_PREVENOM_WEAPON 25939 0 1 1
|
||||
717 FEAT_HIDDEN_TALENT_SKATE 25940 0 1 1
|
||||
718 FEAT_HIDDEN_TALENT_STOMP 25941 0 1 1
|
||||
719 FEAT_HIDDEN_TALENT_SYNESTHETE 25942 0 1 1
|
||||
720 FEAT_HIDDEN_TALENT_TELEMPATHICPRO 25943 0 1 1
|
||||
721 FEAT_HIDDEN_TALENT_THICKSKIN 25944 0 1 1
|
||||
722 FEAT_HIDDEN_TALENT_VIGOR 25945 0 1 1
|
||||
723 FEAT_HIDDEN_TALENT_GRIP_IRON 25946 0 1 1
|
||||
724 **** **** **** **** ****
|
||||
725 **IncarnumFeats** **** **** **** ****
|
||||
726 InvestEssentiaConversation 8800 0 999 1
|
||||
727 HealingSoul 8882 0 999 1
|
||||
728 MidnightAugmentation 8884 0 999 1
|
||||
729 PsycarnumBlade 8887 0 999 1
|
||||
730 DivineSoultouch 8891 0 999 1
|
||||
731 PsycarnumInfusion 8896 0 999 1
|
||||
732 **** **** **** **** ****
|
||||
733 **BindingFeats** **** **** **** ****
|
||||
734 BindVestige 9131 0 -1 1
|
||||
735 ExpelVestige 9136 0 -1 1
|
||||
736 MalphasArcaneEye 9040 0 999 1
|
||||
737 SavnokCallArmor 9043 0 999 1
|
||||
738 AndromaliusSee_Invisibility 9048 0 999 1
|
||||
739 FocalorAuraSadness 9049 0 999 1
|
||||
740 KarsusSenses 9052 0 999 1
|
||||
741 **** **** **** **** ****
|
||||
742 **RacialFeats** **** **** **** ****
|
||||
743 FEAT_STONECHILD_MAGIC_STONE 5179 0 999 1
|
||||
744 FEAT_ASHERATI_BODY_DAZZLE 5213 0 999 1
|
||||
745 FEAT_ASHERATI_BODY_LAMP 5214 0 999 1
|
||||
746 FEAT_URDINNIR_STONESKIN 4644 0 999 1
|
||||
747 FEAT_AVARIEL_DIVE 4645 0 999 1
|
||||
748 FEAT_AYUAN_FEAR 4646 0 999 1
|
||||
749 FEAT_AYUAN_ENTANGLE 4647 0 999 1
|
||||
750 FEAT_AYUAN_DARKNESS 4648 0 999 1
|
||||
751 FEAT_AYUAN_NEUTRALIZE_POISON 4649 0 999 1
|
||||
752 FEAT_AASIMAR_LIGHT 4650 0 999 1
|
||||
753 FEAT_TIEFLING_DARK 4651 0 999 1
|
||||
754 FEAT_SVIRF_BLIND_DEAF 4652 0 999 1
|
||||
755 FEAT_SVIRF_BLUR 4653 0 999 1
|
||||
756 FEAT_SVIRF_DISGUISE 4654 0 999 1
|
||||
757 FEAT_SVIRF_REVERT 4655 0 999 1
|
||||
758 FEAT_RAK_DISGUISE 4656 0 999 1
|
||||
759 FEAT_RAK_CHANGE_SHAPE 4657 0 999 1
|
||||
760 FEAT_PYUAN_CHARM 4658 0 999 1
|
||||
761 FEAT_PYUAN_DARKNESS 4659 0 999 1
|
||||
762 FEAT_PYUAN_ENTANGLE 4660 0 999 1
|
||||
763 FEAT_PYUAN_FEAR 4661 0 999 1
|
||||
764 FEAT_PIXIE_INVIS 4662 0 999 1
|
||||
765 FEAT_PIXIE_CONFUSE 4663 0 999 1
|
||||
766 FEAT_PIXIE_ENTANGLE 4664 0 999 1
|
||||
767 FEAT_PIXIE_DISPEL_MAGIC 4665 0 999 1
|
||||
768 FEAT_PIXIE_POLYMORPH 4666 0 999 1
|
||||
769 FEAT_PIXIE_REVERT 4667 0 999 1
|
||||
770 FEAT_MINOTAUR_CHARGE 4668 0 999 1
|
||||
771 FEAT_ILLITHID_CHARM 4669 0 999 1
|
||||
772 FEAT_ILLITHID_BLAST 4670 0 999 1
|
||||
773 FEAT_ILLITHID_SUCKBRAIN 4671 0 999 1
|
||||
774 FEAT_GITHZERAI_DAZE 4672 0 999 1
|
||||
775 FEAT_GITHYANKI_DAZE 4673 0 999 1
|
||||
776 FEAT_GITHYANKI_BLUR 4674 0 999 1
|
||||
777 FEAT_FEYRI_CHARMPERSON 4675 0 999 1
|
||||
778 FEAT_FEYRI_CLAIRAUDIENCE 4676 0 999 1
|
||||
779 FEAT_FEYRI_DARKNESS 4677 0 999 1
|
||||
780 FEAT_FEYRI_ENERVATION 4678 0 999 1
|
||||
781 FEAT_FEYRI_ALTER 4679 0 999 1
|
||||
782 FEAT_FEYRI_REVERT 4680 0 999 1
|
||||
783 FEAT_DUERGAR_INVIS 4681 0 999 1
|
||||
784 FEAT_DROW_DARKNESS 4682 0 999 1
|
||||
785 FEAT_DROW_FAERIE_FIRE 4683 0 999 1
|
||||
786 BROWNIE_RAKSHASA_HIPS 433 0 999 0
|
||||
787 FEAT_WGNOME_SILENCE 4555 0 999 1
|
||||
788 FEAT_WGNOME_MAGEHAND 4519 0 999 1
|
||||
789 FEAT_HOUND_AID 4574 0 999 1
|
||||
790 FEAT_HOUND_AURAMENACE 4548 0 999 1
|
||||
791 FEAT_HOUND_CONTFLAME 4514 0 999 1
|
||||
792 FEAT_HOUND_DETECTEVIL 4618 0 999 1
|
||||
793 FEAT_HOUND_DISGUISE 4513 0 999 1
|
||||
794 FEAT_HOUND_MAGICCIRCLE 4515 0 999 1
|
||||
795 FEAT_HOUND_TELEPORT 4516 0 999 1
|
||||
796 FEAT_RACE_ENERGYRAY 4856 0 999 1
|
||||
797 FEAT_RACE_ENERGYRAYSONIC 4520 0 999 1
|
||||
798 FEAT_ELAN_RESISTANCE 4521 0 999 1
|
||||
799 FEAT_ELAN_RESILIANCE 4522 0 999 1
|
||||
800 FEAT_PSIRACE_STOMP 4524 0 999 1
|
||||
801 FEAT_MAENAD_OUTBURST 4525 0 999 1
|
||||
802 FEAT_XEPH_BURST 4526 0 999 1
|
||||
803 FEAT_ZENYTH_TRUESTRIKE 4536 0 999 1
|
||||
804 FEAT_TULADH_MAGIC_CIRCL 4533 0 999 1
|
||||
805 FEAT_NATHRI_EXP_RETREAT 4534 0 999 1
|
||||
806 FEAT_BLADELING_RAZOR_STORM 4539 0 999 1
|
||||
807 FEAT_KAPAK_SALIVA 4546 0 999 1
|
||||
808 FEAT_IRDA_FLARE 4551 0 999 1
|
||||
809 FEAT_ZAKYA_CHILLTOUCH 4570 0 999 1
|
||||
810 FEAT_ZAKYA_TRUESTRIKE 4557 0 999 1
|
||||
811 FEAT_ZAKYA_VAMPTOUCH 4558 0 999 1
|
||||
812 FEAT_MINOR_CHANGE_SHAPE 4560 0 999 1
|
||||
813 FEAT_CHANGELING_CHANGE_SHAPE 4561 0 999 1
|
||||
814 FEAT_IRDA_CHANGE_SHAPE 4562 0 999 1
|
||||
815 FEAT_QUICK_CHANGE_SHAPE 4563 0 999 1
|
||||
816 FEAT_SHIFTER_SHIFTING 4566 0 999 1
|
||||
817 FEAT_RAK_SHADOW_JUMP 3307 0 999 1
|
||||
818 FEAT_NIXIE_CHARM_PERSON 4597 0 999 1
|
||||
819 FEAT_NIXIE_WATERBREATHING 4641 0 999 1
|
||||
820 FEAT_NYMPH_DIMENSION_DOOR 4755 0 999 1
|
||||
821 FEAT_NYMPH_STUNNING_GLANCE 4684 0 999 1
|
||||
822 FEAT_NYMPH_BLINDING_BEAUTY 4685 0 999 1
|
||||
823 FEAT_GRIG_PYROTECHNICS 4686 0 999 1
|
||||
824 FEAT_GRIG_INVIS 4687 0 999 1
|
||||
825 FEAT_GRIG_ENTANGLE 4635 0 999 1
|
||||
826 FEAT_BRALANI_LIGHTNING_BOLT 4995 0 999 1
|
||||
827 FEAT_BRALANI_CURE_SERIOUS 4996 0 999 1
|
||||
828 FEAT_BRALANI_BLUR 4997 0 999 1
|
||||
829 FEAT_BRALANI_CHARM_PERSON 4998 0 999 1
|
||||
830 FEAT_BRALANI_MIRROR_IMAGE 4999 0 999 1
|
||||
831 FEAT_BRALANI_GUST_OF_WIND 4978 0 999 1
|
||||
832 FEAT_TOUCH_OF_LUCK 4634 0 999 1
|
||||
833 FEAT_FORESTLORD_TREEWALK 4633 0 999 1
|
||||
834 FEAT_TROGLODYTE_STENCH 23549 0 999 1
|
||||
835 Skarn_spines 5180 0 999 1
|
||||
836 Killoren_Aspect_H 5209 0 999 1
|
||||
837 Killoren_Aspect_D 5210 0 999 1
|
||||
838 Killoren_Aspect_A 5211 0 999 1
|
||||
839 FrostFolk_IceBlast 5372 0 999 1
|
||||
840 Uldra_RayFrost 5373 0 999 1
|
||||
841 Uldra_Fatigue 5374 0 999 1
|
||||
842 Marrulurk_DA 2930 0 999 1
|
||||
843 Marrulurk_NauseatingBreath 5375 0 999 1
|
||||
844 ExtaminaarCharmAnimal 5379 0 999 1
|
||||
845 Marrusault_Howl 3308 0 999 1
|
||||
846 FEAT_HYBSIL_MIRROR_IMAGE 5382 0 999 1
|
||||
847 FEAT_HYBSIL_DANCLIGHTS 5383 0 999 1
|
||||
848 FEAT_HYBSIL_JUMP 5384 0 999 1
|
||||
849 FEAT_WILDREN_FURY 5386 0 999 1
|
||||
850 Turlemoi_RockThrowing 5419 0 999 1
|
||||
851 Arkamoi_ArcaneMastermind 5424 0 999 1
|
||||
852 Muckdweller_Squirt 5425 0 999 1
|
||||
853 Aranea_AlternateForm 5426 0 999 1
|
||||
854 Aranea_Web 5427 0 999 1
|
||||
855 Mephling_breath 5429 0 999 1
|
||||
856 FEAT_FOG_CLOUD_BREATH 5434 0 999 1
|
||||
857 Warsoul_CultPower 1805 0 999 1
|
||||
858 Warsoul_SoulTyrant 1806 0 999 1
|
||||
859 **** **** **** **** ****
|
||||
860 **BonusDomains** **** **** **** ****
|
||||
861 FEAT_CHECK_DOMAIN_SLOTS 2000 0 999 1
|
||||
862 FEAT_CAST_DOMAIN_LEVEL_ONE 2049 0 999 1
|
||||
863 FEAT_CAST_DOMAIN_LEVEL_TWO 2050 0 999 1
|
||||
864 FEAT_CAST_DOMAIN_LEVEL_THREE 2051 0 999 1
|
||||
865 FEAT_CAST_DOMAIN_LEVEL_FOUR 2052 0 999 1
|
||||
866 FEAT_CAST_DOMAIN_LEVEL_FIVE 2053 0 999 1
|
||||
867 FEAT_CAST_DOMAIN_LEVEL_SIX 2054 0 999 1
|
||||
868 FEAT_CAST_DOMAIN_LEVEL_SEVEN 2055 0 999 1
|
||||
869 FEAT_CAST_DOMAIN_LEVEL_EIGHT 2056 0 999 1
|
||||
870 FEAT_CAST_DOMAIN_LEVEL_NINE 2057 0 999 1
|
||||
871 Strength_Domain_Power 307 0 999 1
|
||||
872 Protection_Domain_Power 308 0 999 1
|
||||
873 Death_Domain_Power 310 0 999 1
|
||||
874 Air_Domain_Power 311 0 999 1
|
||||
875 Destruction_Domain_Power 313 0 999 1
|
||||
876 Earth_Domain_Power 314 0 999 1
|
||||
877 Fire_Domain_Power 316 0 999 1
|
||||
878 Plant_Domain_Power 321 0 999 1
|
||||
879 Sun_Domain_Power 322 0 999 1
|
||||
880 Travel_Domain_Power 323 0 999 1
|
||||
881 Trickery_Domain_Power 324 0 999 1
|
||||
882 Water_Domain_Power 325 0 999 1
|
||||
883 FEAT_ORC_DOMAIN 4041 0 999 1
|
||||
884 FEAT_SLIME_DOMAIN 4043 0 999 1
|
||||
885 FEAT_CHARM_DOMAIN 4045 0 999 1
|
||||
886 FEAT_FAMILY_DOMAIN 4051 0 999 1
|
||||
887 FEAT_HALFLING_DOMAIN 4052 0 999 1
|
||||
888 FEAT_ILLUSION_DOMAIN 4053 0 999 0
|
||||
889 FEAT_HATRED_DOMAIN 4054 0 999 1
|
||||
890 FEAT_NOBILITY_DOMAIN 4055 0 999 1
|
||||
891 FEAT_SCALEYKIND_DOMAIN 4057 0 999 1
|
||||
892 FEAT_RENEWAL_DOMAIN 4060 0 999 1
|
||||
893 FEAT_SPIDER_DOMAIN 4061 0 999 1
|
||||
894 FEAT_BLIGHTBRINGER 2250 0 999 1
|
||||
895 **** **** **** **** ****
|
||||
896 **Templates** **** **** **** ****
|
||||
897 Celestial_Smite_Evil 22601 0 999 1
|
||||
898 Fiendish_Smite_Good 22603 0 999 1
|
||||
899 Half_Celestial_Smite_Evil 22605 0 999 1
|
||||
900 Half_Celestial_Protection_from_Evil 22606 0 999 1
|
||||
901 Half_Celestial_Bless 22607 0 999 1
|
||||
902 Half_Celestial_Aid 22608 0 999 1
|
||||
903 Half_Celestial_Detect_Evil 22609 0 999 1
|
||||
904 Half_Celestial_Cure_Serious_Wounds 22610 0 999 1
|
||||
905 Half_Celestial_Neutralize_Poison 22611 0 999 1
|
||||
906 Half_Celestial_HolySmite **** 0 999 1
|
||||
907 Half_Celestial_Remove_Disease 22613 0 999 1
|
||||
908 Half_Celestial_DispelEvil **** 0 999 1
|
||||
909 Half_Celestial_Holy_Word 22615 0 999 1
|
||||
910 Half_Celestial_HolyAura 22616 0 999 1
|
||||
911 Half_Celestial_Hallow **** 0 999 1
|
||||
912 Half_Celestial_Mass_Charm 22618 0 999 1
|
||||
913 Half_Celestial_Summon_Creature_IX 22619 0 999 1
|
||||
914 Half_Celestial_Resurrection 22620 0 999 1
|
||||
915 Half_Celestial_Daylight 22621 0 999 1
|
||||
916 Half_Fiendish_Smite_Good 22624 0 999 1
|
||||
917 Half_Fiendish_Darkness 22625 0 999 1
|
||||
918 Half_Fiendish_Desecrate **** 0 999 1
|
||||
919 Half_Fiendish_Unholy_Blight **** 0 999 1
|
||||
920 Half_Fiendish_Poison 22628 0 999 1
|
||||
921 Half_Fiendish_Contagion 22629 0 999 1
|
||||
922 Half_Fiendish_Blasphemy 22630 0 999 1
|
||||
923 Half_Fiendish_Unholy_Aura **** 0 999 1
|
||||
924 Half_Fiendish_Unhallow **** 0 999 1
|
||||
925 Half_Fiendish_Horrid_Wilting 22633 0 999 1
|
||||
926 Half_Fiendish_Summon_Creature_IX 22634 0 999 1
|
||||
927 Half_Fiendish_Destruction 22635 0 999 1
|
||||
928 Lich_Fear_Aura 22637 0 999 1
|
||||
929 Lich_Paralyzing_Touch 22638 0 999 1
|
||||
930 Lich_Appearance 22639 0 999 1
|
||||
931 Demilich_Alter_Self 22641 0 999 1
|
||||
932 Demilich_Astral_Projection **** 0 999 1
|
||||
933 Demilich_Create_Greater_Undead 22643 0 999 1
|
||||
934 Demilich_Create_Undead 22644 0 999 1
|
||||
935 Demilich_Death_Knell **** 0 999 1
|
||||
936 Demilich_Enervation 22646 0 999 1
|
||||
937 Demilich_Greater_Dispel_Magic 22647 0 999 1
|
||||
938 Demilich_Harm 22648 0 999 1
|
||||
939 Demilich_Summon_Creature_I 22649 0 999 1
|
||||
940 Demilich_Summon_Creature_II 22650 0 999 1
|
||||
941 Demilich_Summon_Creature_III 22651 0 999 1
|
||||
942 Demilich_Summon_Creature_IV 22652 0 999 1
|
||||
943 Demilich_Summon_Creature_V 22653 0 999 1
|
||||
944 Demilich_Summon_Creature_VI 22654 0 999 1
|
||||
945 Demilich_Summon_Creature_VII 22655 0 999 1
|
||||
946 Demilich_Summon_Creature_VIII 22656 0 999 1
|
||||
947 Demilich_Summon_Creature_IX 22657 0 999 1
|
||||
948 Demilich_Telekinesis **** 0 999 1
|
||||
949 Demilich_Weird 22659 0 999 1
|
||||
950 Demilich_Greater_Planar_Ally 22660 0 999 1
|
||||
951 HalfDragon_Breath_Weapon 22662 0 999 1
|
||||
952 Earth_Strike 5328 0 999 1
|
||||
953 BloodedOne_War_Cry 5377 0 999 1
|
||||
954 RethDekala_VilefireBlast 5409 0 999 1
|
||||
955 RethDekala_MartialSpirit 5410 0 999 1
|
||||
956 RethDekala_ThicketOfBlades 5411 0 999 1
|
||||
957 RethDekala_DauntingStrike 5412 0 999 1
|
||||
958 RethDekala_DeathFromAbove 5413 0 999 1
|
||||
959 RethDekala_DisarmingStrike 5414 0 999 1
|
||||
960 RethDekala_EntanglingBlade 5415 0 999 1
|
||||
961 RethDekala_WallOfBlades 5416 0 999 1
|
||||
962 RethDekala_RecoverManeuvers 5417 0 999 1
|
||||
963 ArchlichTurnUndead 22701 0 999 1
|
||||
964 FEAT_ANIMATE_DEAD 3574 0 999 1
|
||||
965 FEAT_PROJECTION 3579 0 999 1
|
||||
966 FEAT_END_PROJECTION 3575 0 999 1
|
||||
967 **** **** **** **** ****
|
||||
968 Saint_Bless 22702 0 999 1
|
||||
969 Saint_Guidance_Placeholder **** **** **** ****
|
||||
970 Saint_Resistance 22704 0 999 1
|
||||
971 Saint_Virtue 22705 0 999 1
|
||||
972 Saint_Protective_Aura 22706 0 999 1
|
||||
973 **** **** **** **** ****
|
||||
974 **WeaponsOfLegacy** **** **** **** ****
|
||||
975 BBB_Darkvision 22710 0 999 1
|
||||
976 BBB_Longstrider 22711 0 999 1
|
||||
977 BBB_Lesser_Restoration 22712 0 999 1
|
||||
978 BBB_Teleport_SelfOnly 22713 0 999 1
|
||||
979 BBB_Protection_from_Evil 22714 0 999 1
|
||||
980 BBB_Drowseeker 22715 0 999 1
|
||||
981 BBB_ShockingShot 22716 0 999 1
|
||||
982 BBB_PierceTheBlackHeart 22717 0 999 1
|
||||
983 Steadfast_vigor 22718 0 999 1
|
||||
984 Steadfast_slow 22719 0 999 1
|
||||
985 Flay_SnakeSting 22720 0 999 1
|
||||
986 Flay_WhipWrap 22721 0 999 1
|
||||
987 CrimsonRuination_FrozenFate 22722 0 999 1
|
||||
988 Devious_DetectThoughts 22723 0 999 1
|
||||
989 SimpleBow_TrueSeeing 22724 0 999 1
|
||||
990 SimpleBow_Prescience 22725 0 999 1
|
||||
991 SimpleBow_Focus 22726 0 999 1
|
||||
992 Aradros_Extend 22727 0 999 1
|
||||
993 Aradros_Survive 22728 0 999 1
|
||||
994 Guurgal_Force 22729 0 999 1
|
||||
995 Guurgal_Rage 22730 0 999 1
|
||||
996 DivSpark_Fear 22731 0 999 1
|
||||
997 DivSpark_Light 22732 0 999 1
|
||||
998 Wargirds_Haste 22733 0 999 1
|
||||
999 Wargirds_Stoneskin 22734 0 999 1
|
||||
1000 DesertWind_FierySlash 22735 0 999 1
|
||||
1001 DesertWind_HowlingWind 22736 0 999 1
|
||||
1002 DesertWind_FanFlames 22737 0 999 1
|
||||
1003 DesertWind_DustDesert 22738 0 999 1
|
||||
1004 Mindsplinter_VirtueDenied 22739 0 999 1
|
||||
1005 Mindsplinter_KissOfDeath 22740 0 999 1
|
||||
1006 Mindsplinter_BattleShriek 22741 0 999 1
|
||||
1007 Mindsplinter_RuinousHowl 22742 0 999 1
|
||||
1008 NotchedSpear_ParliamentOfFishes 22743 0 999 1
|
||||
1009 NotchedSpear_ConcealmentKraken 22744 0 999 1
|
||||
1010 NotchedSpear_ScionSea 22745 0 999 1
|
||||
1011 NotchedSpear_CommandSeaChildren 22746 0 999 1
|
||||
1012 Ur_SwiftStride 22747 0 999 1
|
||||
1013 Ur_HealingTotem 22748 0 999 1
|
||||
1014 Ur_SavageTransformation 22749 0 999 1
|
||||
1015 FlamecastersBolt_MarkTarget 22750 0 999 1
|
||||
1016 FlamecastersBolt_Morale 22751 0 999 1
|
||||
1017 FlamecastersBolt_Fireball 22752 0 999 1
|
||||
1018 StalkersBow_StalkersInsight 22753 0 999 1
|
||||
1019 StalkersBow_Ethereal 22754 0 999 1
|
||||
1020 Exordius_Guidance 22755 0 999 1
|
||||
1021 Exordius_Cure 22756 0 999 1
|
||||
1022 Exordius_Dismissal 22757 0 999 1
|
||||
1023 Caladbolg_Imprison 22758 0 999 1
|
||||
1024 HammerWitches_Detect 22759 0 999 1
|
||||
1025 HammerWitches_Spellbreaker 22760 0 999 1
|
||||
1026 HammerWitches_AMF 22761 0 999 1
|
||||
1027 HammerWitches_Dispel 22762 0 999 1
|
||||
1028 HammerWitches_Mantle 22763 0 999 1
|
||||
1029 SlingOfTheDireWind_StunningStone 22764 0 999 1
|
||||
1030 SlingOfTheDireWind_GustOfWind 22765 0 999 1
|
||||
1031 SlingOfTheDireWind_WindWall 22766 0 999 1
|
||||
1032 Treebrother_Shillelagh 22767 0 999 1
|
||||
1033 Treebrother_Charm_Plant 22768 0 999 1
|
||||
1034 Treebrother_Entangle 22769 0 999 1
|
||||
1035 Treebrother_Owls_Insight 22770 0 999 1
|
||||
1036 Treebrother_Changestaff 22771 0 999 1
|
||||
1037 FullMoonsTrick_Rage 22772 0 999 1
|
||||
1038 FullMoonsTrick_Invis 22773 0 999 1
|
||||
1039 FiendkillersFlail_Darkvis 22774 0 999 1
|
||||
1040 FiendkillersFlail_Detect 22775 0 999 1
|
||||
1041 ScalesBalance_Detect 22776 0 999 1
|
||||
1042 ScalesBalance_Cure 22777 0 999 1
|
||||
1043 ScalesBalance_Knell 22778 0 999 1
|
||||
1044 ScalesBalance_Enerv 22779 0 999 1
|
||||
1045 ScalesBalance_Heal 22780 0 999 1
|
||||
1046 ScalesBalance_Finger 22781 0 999 1
|
||||
1047 ShishiO_Charm 22782 0 999 1
|
||||
1048 ShishiO_Summon 22783 0 999 1
|
||||
1049 ShishiO_Poly 22784 0 999 1
|
||||
1050 ShishiO_Shout 22785 0 999 1
|
||||
1051 Dymondheart_ShedBolts 22786 0 999 1
|
||||
1052 Dymondheart_Deflect 22787 0 999 1
|
||||
1053 Dymondheart_Daylight 22788 0 999 1
|
||||
1054 Dymondheart_Cure 22789 0 999 1
|
||||
1055 Dymondheart_Banish 22790 0 999 1
|
||||
1056 Sunsword_Daylight 22791 0 999 1
|
||||
1057 Sunsword_Death_Ward 22792 0 999 1
|
||||
1058 Sunsword_Banish 22793 0 999 1
|
||||
1059 Sunsword_Undeath 22794 0 999 1
|
||||
1060 Blackrazor_Detect 22795 0 999 1
|
||||
1061 Blackrazor_Knell 22796 0 999 1
|
||||
1062 Blackrazor_Haste 22797 0 999 1
|
||||
1063 Ramethene_Detect 22798 0 999 1
|
||||
1064 Ramethene_Smite 22799 0 999 1
|
||||
1065 Ramethene_Resist_Elements 22800 0 999 1
|
||||
1066 Ramethene_Cloudkill 22801 0 999 1
|
||||
1067 Ramethene_SuddenMaximize 22802 0 999 1
|
||||
1068 Ramethene_Horrid_Wilting 22803 0 999 1
|
||||
1069 Wyrmbane_Cause_Fear 22804 0 999 1
|
||||
1070 Wyrmbane_Lightning_Bolt 22805 0 999 1
|
||||
1071 Wyrmbane_Sudden_Emp 22806 0 999 1
|
||||
1072 Wyrmbane_Breath_Lightning 22807 0 999 1
|
||||
1073 Whelm_Detect_Giant 22808 0 999 1
|
||||
1074 Whelm_Locate_Object 22809 0 999 1
|
||||
1075 Whelm_Detect_Goblin 22810 0 999 1
|
||||
1076 Ravenkind_Dancing_Lights 22811 0 999 1
|
||||
1077 Ravenkind_Light 22812 0 999 1
|
||||
1078 Ravenkind_Flare 22813 0 999 1
|
||||
1079 Ravenkind_Detect_Undead 22814 0 999 1
|
||||
1080 Ravenkind_Halt_Undead 22815 0 999 1
|
||||
1081 Ravenkind_Cure_Light_Wounds 22816 0 999 1
|
||||
1082 Ravenkind_Daylight 22817 0 999 1
|
||||
1083 Ravenkind_Death_Ward 22818 0 999 1
|
||||
1084 Ravenkind_Break_Enchantment 22819 0 999 1
|
||||
1085 Ravenkind_Mass_Heal 22820 0 999 1
|
||||
1086 LastCitadel_LeadingTheAttack 22821 0 999 1
|
||||
1087 LastCitadel_Prayer 22822 0 999 1
|
||||
1088 LastCitadel_Remove_Fear 22823 0 999 1
|
||||
1089 LastCitadel_Cure_Critical_Wounds 22824 0 999 1
|
||||
1090 LastCitadel_Blade_Barrier 22825 0 999 1
|
||||
1091 LastCitadel_Heal 22826 0 999 1
|
||||
1092 Unfettered_ChargingMinotaur 22827 0 999 1
|
||||
1093 Unfettered_ENLARGE_PERSON 22828 0 999 1
|
||||
1094 Unfettered_Etherealness 22829 0 999 1
|
||||
1095 Unfettered_Stoneskin 22830 0 999 1
|
||||
1096 Unfettered_Mordenkainens_Sword 22831 0 999 1
|
||||
1097 Hillcrusher_Earthen_Might 22832 0 999 1
|
||||
1098 Hillcrusher_Soften_Earth 22833 0 999 1
|
||||
1099 Hillcrusher_Fangs_of_Stone 22834 0 999 1
|
||||
1100 Hillcrusher_Raise_the_Earth 22835 0 999 1
|
||||
1101 Hillcrusher_Shake_the_Earth 22836 0 999 1
|
||||
1102 DesertWindToB_BurningBlade 22837 0 999 1
|
||||
1103 DesertWindToB_FanTheFlames 22838 0 999 1
|
||||
1104 DesertWindToB_WyrmsFlame 22839 0 999 1
|
||||
1105 Faithful_Detect_Evil 22840 0 999 1
|
||||
1106 Faithful_Lesser_Restoration 22841 0 999 1
|
||||
1107 Faithful_Restoration 22842 0 999 1
|
||||
1108 Faithful_Resiliency 22843 0 999 1
|
||||
1109 Faithful_ImmortalFortitude 22844 0 999 1
|
||||
1110 SupernalClarity_SapphireNightmareBlade 22845 0 999 1
|
||||
1111 SupernalClarity_PsychicPoise 22846 0 999 1
|
||||
1112 SupernalClarity_Haste 22847 0 999 1
|
||||
1113 SupernalClarity_Freeeeeedom 22848 0 999 1
|
||||
1114 SupernalClarity_Time_Stop 22849 0 999 1
|
||||
1115 Kamate_SteelWind 22850 0 999 1
|
||||
1116 Kamate_ShockingGrasp 22851 0 999 1
|
||||
1117 Kamate_Lightning_Bolt 22852 0 999 1
|
||||
1118 Kamate_Chain_Lightning 22853 0 999 1
|
||||
1119 Kamate_True_Strike 22854 0 999 1
|
||||
1120 Eventide_CometThrow 22855 0 999 1
|
||||
1121 Eventide_BafflingDefense 22856 0 999 1
|
||||
1122 Eventide_Improved_Invisibility 22857 0 999 1
|
||||
1123 Umbral_Invisibility 22858 0 999 1
|
||||
1124 Umbral_Shadowstep 22859 0 999 1
|
||||
1125 TigerFang_FrenziedCharge 22860 0 999 1
|
||||
1126 TigerFang_BattleFever 22861 0 999 1
|
||||
1127 TigerFang_Haste 22862 0 999 1
|
||||
1128 Bullybasher_KnockSilly 22863 0 999 1
|
||||
1129 Bullybasher_StoneGathering 22864 0 999 1
|
||||
1130 Bullybasher_LightningPunch 22865 0 999 1
|
||||
1131 Bullybasher_GiantBearing 26000 0 999 1
|
||||
1132 Lorestealer_Read_Magic 22866 0 999 1
|
||||
1133 Lorestealer_DetectMagic 22867 0 999 1
|
||||
1134 Lorestealer_Axecasting 22868 0 999 1
|
||||
1135 Durindana_Daylight 22869 0 999 1
|
||||
1136 Durindana_Death_Ward 22870 0 999 1
|
||||
1137 Durindana_Hallow 22871 0 999 1
|
||||
1138 Durindana_Dazzle 22872 0 999 1
|
||||
1139 Thaas_Detect_Demon 22873 0 999 1
|
||||
1140 Thaas_ObstructSummoning 22874 0 999 1
|
||||
1141 Thaas_Banishment 22875 0 999 1
|
||||
1142 Thaas_Teleport 22876 0 999 1
|
||||
1143 Quickspur_Entropic_Shield 22877 0 999 1
|
||||
1144 Quickspur_Resist_Elements 22878 0 999 1
|
||||
1145 Quickspur_PhantomSteed 22879 0 999 1
|
||||
1146 Quickspur_Blur 22880 0 999 1
|
||||
1147 Quickspur_Stoneskin 22881 0 999 1
|
||||
1148 BES_FIRE_OF_THE_HEART 22882 0 999 1
|
||||
1149 BES_ENTHRALLING_LIGHT 22883 0 999 1
|
||||
1150 BES_COLOR_SPRAY 22884 0 999 1
|
||||
1151 BES_BLINDING_FLASH 22885 0 999 1
|
||||
1152 BES_SHOOTING_STARS 22886 0 999 1
|
||||
1153 BES_GLITTERING_MOTES 22887 0 999 1
|
||||
1154 BES_TWINKLE 22888 0 999 1
|
||||
1155 BES_SILVER_STARLIGHT 22889 0 999 1
|
||||
1156 BES_STARLIGHT_DISPELLING 22890 0 999 1
|
||||
1157 BES_TALES_IN_THE_SKY 22891 0 999 1
|
||||
1158 BES_CALL_DOWN_A_STAR 22892 0 999 1
|
||||
1159 ###cls_feat_allBaseClasses_END### **** **** **** ****
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -15,7 +15,85 @@
|
||||
#include "NW_I0_SPELLS"
|
||||
//#include "wm_include"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
object oTarget = GetEnteringObject();
|
||||
object oCreator = GetAreaOfEffectCreator();
|
||||
|
||||
// Only apply special handling if the creator is a dragon
|
||||
if (GetRacialType(oCreator) == RACIAL_TYPE_DRAGON)
|
||||
{
|
||||
if (MyPRCGetRacialType(oTarget) == RACIAL_TYPE_DRAGON)
|
||||
return;
|
||||
|
||||
string sDragonID = GetObjectUUID(oCreator);
|
||||
string sVar = "DRAGON_FEAR_IMMUNE_" + sDragonID;
|
||||
|
||||
// If target is already immune to this dragon<6F>s aura, skip
|
||||
if (GetLocalInt(oTarget, sVar))
|
||||
return;
|
||||
|
||||
int nHD = GetHitDice(oCreator);
|
||||
int nCHA = GetAbilityModifier(ABILITY_CHARISMA, oCreator);
|
||||
int nDC = 10 + (nHD / 2) + nCHA;
|
||||
int nDuration = GetScaledDuration(nHD, oTarget);
|
||||
|
||||
if (GetIsEnemy(oTarget, oCreator))
|
||||
{
|
||||
SignalEvent(oTarget, EventSpellCastAt(oCreator, SPELLABILITY_AURA_FEAR));
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR);
|
||||
effect eDur2 = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eFear = EffectFrightened();
|
||||
effect eLink = EffectLinkEffects(eFear, eDur);
|
||||
eLink = EffectLinkEffects(eLink, eDur2);
|
||||
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR))
|
||||
{
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Successful save grants 24-hour immunity to this dragon<6F>s aura
|
||||
SetLocalInt(oTarget, sVar, TRUE);
|
||||
DelayCommand(HoursToSeconds(24), DeleteLocalInt(oTarget, sVar));
|
||||
}
|
||||
}
|
||||
}
|
||||
else // non-dragon sources use normal aura behavior
|
||||
{
|
||||
int nHD = GetHitDice(oCreator);
|
||||
int nCHA = GetAbilityModifier(ABILITY_CHARISMA, oCreator);
|
||||
int nDC = 10 + (nHD / 2) + nCHA;
|
||||
int nDuration = GetScaledDuration(nHD, oTarget);
|
||||
|
||||
if (GetIsEnemy(oTarget, oCreator))
|
||||
{
|
||||
SignalEvent(oTarget, EventSpellCastAt(oCreator, SPELLABILITY_AURA_FEAR));
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR);
|
||||
effect eDur2 = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
effect eFear = EffectFrightened();
|
||||
effect eLink = EffectLinkEffects(eFear, eDur);
|
||||
eLink = EffectLinkEffects(eLink, eDur2);
|
||||
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR))
|
||||
{
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* void main()
|
||||
{
|
||||
//Declare major variables
|
||||
object oTarget = GetEnteringObject();
|
||||
@@ -27,13 +105,15 @@ void main()
|
||||
effect eLink = EffectLinkEffects(eFear, eDur);
|
||||
eLink = EffectLinkEffects(eLink, eDur2);
|
||||
|
||||
int nHD = GetHitDice(GetAreaOfEffectCreator());
|
||||
int nDC = 10 + GetHitDice(GetAreaOfEffectCreator())/3;
|
||||
object oCreator = GetAreaOfEffectCreator();
|
||||
int nHD = GetHitDice(oCreator);
|
||||
int nCHA = GetAbilityModifier(ABILITY_CHARISMA, oCreator);
|
||||
int nDC = 10 + nCHA + (nHD/2);
|
||||
int nDuration = GetScaledDuration(nHD, oTarget);
|
||||
if(GetIsEnemy(oTarget, GetAreaOfEffectCreator()))
|
||||
if(GetIsEnemy(oTarget, oCreator))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(GetAreaOfEffectCreator(), SPELLABILITY_AURA_FEAR));
|
||||
SignalEvent(oTarget, EventSpellCastAt(oCreator, SPELLABILITY_AURA_FEAR));
|
||||
//Make a saving throw check
|
||||
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR))
|
||||
{
|
||||
@@ -42,4 +122,4 @@ void main()
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
} */
|
||||
@@ -4,12 +4,15 @@
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
|
||||
|
||||
|
||||
@author Primogenitor
|
||||
@date 2005.09.23 - Rebuilt the system - Ornedan
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
//PRC8 Token pre-fix = 161838
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Constant definitions */
|
||||
@@ -37,11 +40,11 @@ const int DYNCONV_TOKEN_PREV = 161838113;
|
||||
const int DYNCONV_MIN_TOKEN = 16183899;
|
||||
const int DYNCONV_MAX_TOKEN = 161838113;
|
||||
|
||||
const int DYNCONV_STRREF_PLEASE_WAIT = 16824202; // "Please wait"
|
||||
const int DYNCONV_STRREF_PREVIOUS = 16824203; // "Previous"
|
||||
const int DYNCONV_STRREF_NEXT = 16824204; // "Next"
|
||||
const int DYNCONV_STRREF_ABORT_CONVO = 16824212; // "Abort"
|
||||
const int DYNCONV_STRREF_EXIT_CONVO = 16183878; // "Exit"
|
||||
const int DYNCONV_STRREF_PLEASE_WAIT = 16824202; // "Please wait"
|
||||
const int DYNCONV_STRREF_PREVIOUS = 16824203; // "Previous"
|
||||
const int DYNCONV_STRREF_NEXT = 16824204; // "Next"
|
||||
const int DYNCONV_STRREF_ABORT_CONVO = 16824212; // "Abort"
|
||||
const int DYNCONV_STRREF_EXIT_CONVO = 78; // "Exit"
|
||||
|
||||
const string DYNCONV_SCRIPT = "DynConv_Script";
|
||||
const string DYNCONV_VARIABLE = "DynConv_Var";
|
||||
@@ -475,9 +478,28 @@ void _DynConvInternal_ExitedConvo(object oPC, int bAbort)
|
||||
DeleteLocalInt(oPC, DYNCONV_STAGE);
|
||||
DeleteLocalString(oPC, DYNCONV_SCRIPT);
|
||||
DeleteLocalString(oPC, "DynConv_HeaderText");
|
||||
int i;
|
||||
for(i = DYNCONV_MIN_TOKEN; i <= DYNCONV_MAX_TOKEN; i++)
|
||||
DeleteLocalString(oPC, GetTokenIDString(i));
|
||||
|
||||
DeleteLocalString(oPC, GetTokenIDString(DYNCONV_TOKEN_HEADER));
|
||||
DeleteLocalString(oPC, GetTokenIDString(DYNCONV_TOKEN_REPLY_0));
|
||||
DeleteLocalString(oPC, GetTokenIDString(DYNCONV_TOKEN_REPLY_1));
|
||||
DeleteLocalString(oPC, GetTokenIDString(DYNCONV_TOKEN_REPLY_2));
|
||||
DeleteLocalString(oPC, GetTokenIDString(DYNCONV_TOKEN_REPLY_3));
|
||||
DeleteLocalString(oPC, GetTokenIDString(DYNCONV_TOKEN_REPLY_4));
|
||||
DeleteLocalString(oPC, GetTokenIDString(DYNCONV_TOKEN_REPLY_5));
|
||||
DeleteLocalString(oPC, GetTokenIDString(DYNCONV_TOKEN_REPLY_6));
|
||||
DeleteLocalString(oPC, GetTokenIDString(DYNCONV_TOKEN_REPLY_7));
|
||||
DeleteLocalString(oPC, GetTokenIDString(DYNCONV_TOKEN_REPLY_8));
|
||||
DeleteLocalString(oPC, GetTokenIDString(DYNCONV_TOKEN_REPLY_9));
|
||||
DeleteLocalString(oPC, GetTokenIDString(DYNCONV_TOKEN_EXIT));
|
||||
DeleteLocalString(oPC, GetTokenIDString(DYNCONV_TOKEN_WAIT));
|
||||
DeleteLocalString(oPC, GetTokenIDString(DYNCONV_TOKEN_NEXT));
|
||||
DeleteLocalString(oPC, GetTokenIDString(DYNCONV_TOKEN_PREV));
|
||||
DeleteLocalString(oPC, GetTokenIDString(DYNCONV_MIN_TOKEN));
|
||||
DeleteLocalString(oPC, GetTokenIDString(DYNCONV_MAX_TOKEN));
|
||||
|
||||
//int i;
|
||||
//for(i = DYNCONV_MIN_TOKEN; i <= DYNCONV_MAX_TOKEN; i++)
|
||||
//DeleteLocalString(oPC, GetTokenIDString(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ int GetSpellFromAbrev(string sAbrev);
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
#include "inc_utility"
|
||||
//#include "inc_epicspelldef"
|
||||
#include "inc_epicspells"
|
||||
|
||||
// SEED FUNCTIONS
|
||||
|
||||
|
||||
@@ -303,11 +303,18 @@ int GetIsEpicShaman(object oPC)
|
||||
&& GetAbilityScore(oPC, ABILITY_WISDOM) > 18;
|
||||
}
|
||||
|
||||
int GetIsEpicSorcerer(object oPC)
|
||||
int GetIsEpicSorcerer(object oPC)
|
||||
{
|
||||
return GetHitDice(oPC) >= 21
|
||||
&& GetCasterLvl(CLASS_TYPE_SORCERER, oPC) > 17
|
||||
&& GetAbilityScore(oPC, ABILITY_CHARISMA) > 18;
|
||||
}
|
||||
|
||||
/* int GetIsEpicSorcerer(object oPC)
|
||||
{
|
||||
return GetPrCAdjustedCasterLevel(CLASS_TYPE_SORCERER, oPC, FALSE) > 17
|
||||
&& GetAbilityScore(oPC, ABILITY_CHARISMA) > 18;
|
||||
}
|
||||
} */
|
||||
|
||||
int GetIsEpicSublimeChord(object oPC)
|
||||
{
|
||||
|
||||
@@ -1643,7 +1643,60 @@ int GetIsMagicItem(object oItem)
|
||||
int FeatToIprop(int nFeat)
|
||||
{
|
||||
switch(nFeat)
|
||||
{//: Weapon Focus
|
||||
{
|
||||
//:: Weapon Proficiencies
|
||||
case FEAT_WEAPON_PROFICIENCY_SHORTSWORD: return IP_CONST_FEAT_WEAPON_PROFICIENCY_SHORTSWORD;
|
||||
case FEAT_WEAPON_PROFICIENCY_LONGSWORD: return IP_CONST_FEAT_WEAPON_PROFICIENCY_LONGSWORD;
|
||||
case FEAT_WEAPON_PROFICIENCY_BATTLEAXE: return IP_CONST_FEAT_WEAPON_PROFICIENCY_BATTLEAXE;
|
||||
case FEAT_WEAPON_PROFICIENCY_BASTARD_SWORD: return IP_CONST_FEAT_WEAPON_PROFICIENCY_BASTARD_SWORD;
|
||||
case FEAT_WEAPON_PROFICIENCY_LIGHT_FLAIL: return IP_CONST_FEAT_WEAPON_PROFICIENCY_LIGHT_FLAIL;
|
||||
case FEAT_WEAPON_PROFICIENCY_WARHAMMER: return IP_CONST_FEAT_WEAPON_PROFICIENCY_WARHAMMER;
|
||||
case FEAT_WEAPON_PROFICIENCY_LONGBOW: return IP_CONST_FEAT_WEAPON_PROFICIENCY_LONGBOW;
|
||||
case FEAT_WEAPON_PROFICIENCY_LIGHT_MACE: return IP_CONST_FEAT_WEAPON_PROFICIENCY_LIGHT_MACE;
|
||||
case FEAT_WEAPON_PROFICIENCY_HALBERD: return IP_CONST_FEAT_WEAPON_PROFICIENCY_HALBERD;
|
||||
case FEAT_WEAPON_PROFICIENCY_SHORTBOW: return IP_CONST_FEAT_WEAPON_PROFICIENCY_SHORTBOW;
|
||||
case FEAT_WEAPON_PROFICIENCY_TWO_BLADED_SWORD: return IP_CONST_FEAT_WEAPON_PROFICIENCY_TWO_BLADED_SWORD;
|
||||
case FEAT_WEAPON_PROFICIENCY_GREATSWORD: return IP_CONST_FEAT_WEAPON_PROFICIENCY_GREATSWORD;
|
||||
case FEAT_WEAPON_PROFICIENCY_GREATAXE: return IP_CONST_FEAT_WEAPON_PROFICIENCY_GREATAXE;
|
||||
case FEAT_WEAPON_PROFICIENCY_DART: return IP_CONST_FEAT_WEAPON_PROFICIENCY_DART;
|
||||
case FEAT_WEAPON_PROFICIENCY_DIRE_MACE: return IP_CONST_FEAT_WEAPON_PROFICIENCY_DIRE_MACE;
|
||||
case FEAT_WEAPON_PROFICIENCY_DOUBLE_AXE: return IP_CONST_FEAT_WEAPON_PROFICIENCY_DOUBLE_AXE;
|
||||
case FEAT_WEAPON_PROFICIENCY_HEAVY_FLAIL: return IP_CONST_FEAT_WEAPON_PROFICIENCY_HEAVY_FLAIL;
|
||||
case FEAT_WEAPON_PROFICIENCY_LIGHT_HAMMER: return IP_CONST_FEAT_WEAPON_PROFICIENCY_LIGHT_HAMMER;
|
||||
case FEAT_WEAPON_PROFICIENCY_HANDAXE: return IP_CONST_FEAT_WEAPON_PROFICIENCY_HANDAXE;
|
||||
case FEAT_WEAPON_PROFICIENCY_KAMA: return IP_CONST_FEAT_WEAPON_PROFICIENCY_KAMA;
|
||||
case FEAT_WEAPON_PROFICIENCY_KATANA: return IP_CONST_FEAT_WEAPON_PROFICIENCY_KATANA;
|
||||
case FEAT_WEAPON_PROFICIENCY_KUKRI: return IP_CONST_FEAT_WEAPON_PROFICIENCY_KUKRI;
|
||||
case FEAT_WEAPON_PROFICIENCY_MORNINGSTAR: return IP_CONST_FEAT_WEAPON_PROFICIENCY_MORNINGSTAR;
|
||||
case FEAT_WEAPON_PROFICIENCY_RAPIER: return IP_CONST_FEAT_WEAPON_PROFICIENCY_RAPIER;
|
||||
case FEAT_WEAPON_PROFICIENCY_SCIMITAR: return IP_CONST_FEAT_WEAPON_PROFICIENCY_SCIMITAR;
|
||||
case FEAT_WEAPON_PROFICIENCY_SCYTHE: return IP_CONST_FEAT_WEAPON_PROFICIENCY_SCYTHE;
|
||||
case FEAT_WEAPON_PROFICIENCY_SHORTSPEAR: return IP_CONST_FEAT_WEAPON_PROFICIENCY_SHORTSPEAR;
|
||||
case FEAT_WEAPON_PROFICIENCY_SHURIKEN: return IP_CONST_FEAT_WEAPON_PROFICIENCY_SHURIKEN;
|
||||
case FEAT_WEAPON_PROFICIENCY_SICKLE: return IP_CONST_FEAT_WEAPON_PROFICIENCY_SICKLE;
|
||||
case FEAT_WEAPON_PROFICIENCY_SLING: return IP_CONST_FEAT_WEAPON_PROFICIENCY_SLING;
|
||||
case FEAT_WEAPON_PROFICIENCY_THROWING_AXE: return IP_CONST_FEAT_WEAPON_PROFICIENCY_THROWING_AXE;
|
||||
case FEAT_WEAPON_PROFICIENCY_TRIDENT: return IP_CONST_FEAT_WEAPON_PROFICIENCY_TRIDENT;
|
||||
case FEAT_WEAPON_PROFICIENCY_DWARVEN_WARAXE: return IP_CONST_FEAT_WEAPON_PROFICIENCY_DWARVEN_WARAXE;
|
||||
case FEAT_WEAPON_PROFICIENCY_WHIP: return IP_CONST_FEAT_WEAPON_PROFICIENCY_WHIP;
|
||||
case FEAT_WEAPON_PROFICIENCY_ELVEN_LIGHTBLADE: return IP_CONST_FEAT_WEAPON_PROFICIENCY_ELVEN_LIGHTBLADE;
|
||||
case FEAT_WEAPON_PROFICIENCY_ELVEN_THINBLADE: return IP_CONST_FEAT_WEAPON_PROFICIENCY_ELVEN_THINBLADE;
|
||||
case FEAT_WEAPON_PROFICIENCY_ELVEN_COURTBLADE: return IP_CONST_FEAT_WEAPON_PROFICIENCY_ELVEN_COURTBLADE;
|
||||
case FEAT_WEAPON_PROFICIENCY_LIGHT_LANCE: return IP_CONST_FEAT_WEAPON_PROFICIENCY_LIGHT_LANCE;
|
||||
case FEAT_WEAPON_PROFICIENCY_HEAVY_PICK: return IP_CONST_FEAT_WEAPON_PROFICIENCY_HEAVY_PICK;
|
||||
case FEAT_WEAPON_PROFICIENCY_LIGHT_PICK: return IP_CONST_FEAT_WEAPON_PROFICIENCY_LIGHT_PICK;
|
||||
case FEAT_WEAPON_PROFICIENCY_SAI: return IP_CONST_FEAT_WEAPON_PROFICIENCY_SAI;
|
||||
case FEAT_WEAPON_PROFICIENCY_NUNCHAKU: return IP_CONST_FEAT_WEAPON_PROFICIENCY_NUNCHAKU;
|
||||
case FEAT_WEAPON_PROFICIENCY_FALCHION: return IP_CONST_FEAT_WEAPON_PROFICIENCY_FALCHION;
|
||||
case FEAT_WEAPON_PROFICIENCY_SAP: return IP_CONST_FEAT_WEAPON_PROFICIENCY_SAP;
|
||||
case FEAT_WEAPON_PROFICIENCY_KATAR: return IP_CONST_FEAT_WEAPON_PROFICIENCY_KATAR;
|
||||
case FEAT_WEAPON_PROFICIENCY_HEAVY_MACE: return IP_CONST_FEAT_WEAPON_PROFICIENCY_HEAVY_MACE;
|
||||
case FEAT_WEAPON_PROFICIENCY_MAUL: return IP_CONST_FEAT_WEAPON_PROFICIENCY_MAUL;
|
||||
case FEAT_WEAPON_PROFICIENCY_DOUBLE_SCIMITAR: return IP_CONST_FEAT_WEAPON_PROFICIENCY_DOUBLE_SCIMITAR;
|
||||
case FEAT_WEAPON_PROFICIENCY_GOAD: return IP_CONST_FEAT_WEAPON_PROFICIENCY_GOAD;
|
||||
case FEAT_WEAPON_PROFICIENCY_EAGLE_CLAW: return IP_CONST_FEAT_WEAPON_PROFICIENCY_EAGLE_CLAW;
|
||||
|
||||
//: Weapon Focus
|
||||
case FEAT_WEAPON_FOCUS_BASTARD_SWORD: return IP_CONST_FEAT_WEAPON_FOCUS_BASTARD_SWORD;
|
||||
case FEAT_WEAPON_FOCUS_BATTLE_AXE: return IP_CONST_FEAT_WEAPON_FOCUS_BATTLE_AXE;
|
||||
case FEAT_WEAPON_FOCUS_CLUB: return IP_CONST_FEAT_WEAPON_FOCUS_CLUB;
|
||||
|
||||
@@ -108,11 +108,10 @@ void ProcessPreparedSpellLevel(object oPC, int nClass, int nSpellLevel, int nLev
|
||||
//#include "prc_effect_inc" //access via prc_inc_core
|
||||
//#include "inc_lookups" //access via prc_inc_core
|
||||
#include "prc_inc_core"
|
||||
#include "inc_sp_gain_mem" //providing child access to prc_inc_core
|
||||
//Must load in this order.
|
||||
#include "inc_sp_gain_mem"
|
||||
//#include "prc_inc_castlvl" //access via prc_inc_core
|
||||
//#include "prc_inc_descrptr" //access via prc_inc_core
|
||||
|
||||
#include "inc_item_props"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Function definitions */
|
||||
@@ -1622,6 +1621,3 @@ void DoCleanUp(int nMetamagic)
|
||||
DeleteLocalInt(OBJECT_SELF, "NSB_SpellLevel");
|
||||
DeleteLocalInt(OBJECT_SELF, "NSB_SpellbookID");
|
||||
}
|
||||
|
||||
//:: Test Void
|
||||
//:: void main (){}
|
||||
@@ -7,8 +7,11 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
//:: Levels up an NPC according to variables set on NPC.
|
||||
void LevelUpSummon(object oSummon, int iTargetLvl);
|
||||
|
||||
// Get the master of oAssociate.
|
||||
object GetMasterNPC(object oAssociate=OBJECT_SELF);
|
||||
object GetMasterNPC(object oAssociate0 = OBJECT_SELF);
|
||||
|
||||
// Returns the associate type of the specified creature.
|
||||
// - Returns ASSOCIATE_TYPE_NONE if the creature is not the associate of anyone.
|
||||
@@ -75,7 +78,6 @@ void DestroySummon(object oSummon)
|
||||
DestroyObject(oSummon);
|
||||
}
|
||||
|
||||
|
||||
object CreateLocalNPC(object oMaster,int nAssociateType,string sTemplate,location loc,int Nth=1,string sTag="")
|
||||
{
|
||||
object oSummon=CreateObject(OBJECT_TYPE_CREATURE,sTemplate,loc,FALSE,sTag);
|
||||
@@ -111,7 +113,7 @@ object CreateLocalNextNPC(object oMaster,int nAssociateType,string sTemplate,loc
|
||||
SetLocalObject(oMaster, IntToString(nAssociateType)+"oHench"+IntToString(nCount), oSummon);
|
||||
SetLocalInt(oSummon, "iAssocNth", nCount);
|
||||
|
||||
SetAssociateState(NW_ASC_HAVE_MASTER,TRUE,oSummon);
|
||||
SetAssociateState(NW_ASC_HAVE_MASTER, TRUE, oSummon);
|
||||
SetAssociateState(NW_ASC_DISTANCE_2_METERS);
|
||||
SetAssociateState(NW_ASC_DISTANCE_4_METERS, FALSE);
|
||||
SetAssociateState(NW_ASC_DISTANCE_6_METERS, FALSE);
|
||||
@@ -122,6 +124,7 @@ object CreateLocalNextNPC(object oMaster,int nAssociateType,string sTemplate,loc
|
||||
return oSummon;
|
||||
|
||||
}
|
||||
|
||||
object GetMasterNPC(object oAssociate=OBJECT_SELF)
|
||||
{
|
||||
object oMaster = GetLocalObject(oAssociate, "oMaster");
|
||||
@@ -220,4 +223,173 @@ int GetAssociateHealMasterNPC()
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Levels up a summoned creature based on its master's total casting level,
|
||||
* while respecting configured HD limits and multiclass transition rules.
|
||||
* Should only be called on the NPC onSpawn event.
|
||||
*
|
||||
* This function:
|
||||
* - Retrieves the master<65>s total casting level and clamps it to the creature<72>s
|
||||
* minimum and maximum HD (iMinHD, iMaxHD).
|
||||
* - Repeatedly calls LevelUpHenchman() until the creature reaches that level,
|
||||
* switching classes when the creature's stored "ClassXStart" thresholds are met.
|
||||
*
|
||||
* Local variables recognized on the summoned creature:
|
||||
*
|
||||
* | Variable Name | Purpose |
|
||||
* |-----------------|-------------------------------------------------------------|
|
||||
* | iMinHD | Minimum HD allowed |
|
||||
* | iMaxHD | Maximum HD allowed |
|
||||
* | Class2Start | Level to begin second class progression |
|
||||
* | Class2 | Class type for second progression |
|
||||
* | Class2Package | Package for second progression |
|
||||
* | Class3Start | Level to begin third class progression |
|
||||
* | Class3 | Class type for third progression |
|
||||
* | Class3Package | Package for third progression |
|
||||
* | Class4Start | Level to begin fourth class progression |
|
||||
* | Class4 | Class type for fourth progression |
|
||||
* | Class4Package | Package for fourth progression |
|
||||
*
|
||||
* Behavior notes:
|
||||
* - Leveling continues until the creature reaches the master<65>s effective
|
||||
* casting level (bounded by iMinHD/iMaxHD).
|
||||
* - If LevelUpHenchman() returns 0, the creature shouts a failure message.
|
||||
* - CLASS_TYPE_INVALID causes the creature to level in its current class.
|
||||
*
|
||||
* @param oCreature The summoned creature being leveled. Defaults to OBJECT_SELF.
|
||||
*
|
||||
* @see LevelUpHenchman
|
||||
* @see GetLocalInt
|
||||
* @see GetHitDice
|
||||
*/
|
||||
void LevelUpSummon(object oSummon, int iTargetLvl)
|
||||
{
|
||||
int nCurrentHD = GetHitDice(oSummon);
|
||||
int iNewHD = nCurrentHD;
|
||||
|
||||
// Read multiclassing info from locals
|
||||
int iClass2Start = GetLocalInt(oSummon, "Class2Start");
|
||||
int iClass2 = GetLocalInt(oSummon, "Class2");
|
||||
int iClass2Package = GetLocalInt(oSummon, "Class2Package");
|
||||
|
||||
int iClass3Start = GetLocalInt(oSummon, "Class3Start");
|
||||
int iClass3 = GetLocalInt(oSummon, "Class3");
|
||||
int iClass3Package = GetLocalInt(oSummon, "Class3Package");
|
||||
|
||||
int iClass4Start = GetLocalInt(oSummon, "Class4Start");
|
||||
int iClass4 = GetLocalInt(oSummon, "Class4");
|
||||
int iClass4Package = GetLocalInt(oSummon, "Class4Package");
|
||||
|
||||
int iClass; // current class to level
|
||||
int iPackage; // package to use
|
||||
|
||||
// Main leveling loop
|
||||
while (nCurrentHD < iTargetLvl && nCurrentHD > 0)
|
||||
{
|
||||
// Determine which class and package to use
|
||||
if (iClass4Start != 0 && nCurrentHD >= iClass4Start)
|
||||
{
|
||||
iClass = iClass4;
|
||||
iPackage = iClass4Package;
|
||||
}
|
||||
else if (iClass3Start != 0 && nCurrentHD >= iClass3Start)
|
||||
{
|
||||
iClass = iClass3;
|
||||
iPackage = iClass3Package;
|
||||
}
|
||||
else if (iClass2Start != 0 && nCurrentHD >= iClass2Start)
|
||||
{
|
||||
iClass = iClass2;
|
||||
iPackage = iClass2Package;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Base class (first class in the sheet)
|
||||
iClass = CLASS_TYPE_INVALID; // keeps current
|
||||
iPackage = PACKAGE_INVALID;
|
||||
}
|
||||
|
||||
// Level up one HD
|
||||
iNewHD = LevelUpHenchman(oSummon, iClass, TRUE, iPackage);
|
||||
|
||||
if (iNewHD == 0)
|
||||
{
|
||||
SpeakString(GetName(oSummon) + " failed to level properly!", TALKVOLUME_SHOUT);
|
||||
break;
|
||||
}
|
||||
|
||||
nCurrentHD = iNewHD;
|
||||
}
|
||||
|
||||
// Force the creature to rest to memorize spells
|
||||
// PRCForceRest(oSummon);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* void LevelUpSummon(object oSummon, int iTargetLvl)
|
||||
{
|
||||
//get the default hit dice of the summon
|
||||
int nDefaultHD = GetHitDice(oSummon);
|
||||
|
||||
if (DEBUG) DoDebug("inc_npc >> LevelUpSummon: nDefaultHD = " +IntToString(nDefaultHD)+".");
|
||||
|
||||
if (DEBUG) DoDebug("inc_npc >> LevelUpSummon: iTargetLvl = " +IntToString(iTargetLvl)+".");
|
||||
|
||||
//get the multiclassing variables to see if we need to change classes from its base class
|
||||
int iClass2Start = GetLocalInt(oSummon, "Class2Start");
|
||||
int iClass2 = GetLocalInt(oSummon, "Class2");
|
||||
int iClass2Package = GetLocalInt(oSummon, "Class2Package");
|
||||
|
||||
int iClass3Start = GetLocalInt(oSummon, "Class3Start");
|
||||
int iClass3 = GetLocalInt(oSummon, "Class3");
|
||||
int iClass3Package = GetLocalInt(oSummon, "Class3Package");
|
||||
|
||||
int iClass4Start = GetLocalInt(oSummon, "Class4Start");
|
||||
int iClass4 = GetLocalInt(oSummon, "Class4");
|
||||
int iClass4Package = GetLocalInt(oSummon, "Class4Package");
|
||||
|
||||
//check for zero cause thats an error
|
||||
//if creatures are not leveling then best bet is they are not legal creatures
|
||||
while( (nDefaultHD < iTargetLvl) && (nDefaultHD > 0) )
|
||||
{
|
||||
//check the multiclassing numbers to change classes
|
||||
if( (iClass4Start != 0) && (nDefaultHD >= iClass4Start) )
|
||||
{
|
||||
//level up using the new class and Packageage
|
||||
nDefaultHD = LevelUpHenchman(oSummon, iClass4 ,TRUE, iClass4Package);
|
||||
|
||||
if(nDefaultHD == 0)
|
||||
SpeakString(GetName(oSummon) + " Failed on fourth class", TALKVOLUME_SHOUT);
|
||||
}
|
||||
else if( (iClass3Start != 0) && (nDefaultHD >= iClass3Start) )
|
||||
{
|
||||
//level up using the new class and Packageage
|
||||
nDefaultHD = LevelUpHenchman(oSummon, iClass3 ,TRUE, iClass3Package);
|
||||
|
||||
if(nDefaultHD == 0)
|
||||
SpeakString(GetName(oSummon) + " Failed on third class", TALKVOLUME_SHOUT);
|
||||
}
|
||||
else if( (iClass2Start != 0) && (nDefaultHD >= iClass2Start) )
|
||||
{
|
||||
//level up using the new class and Packageage
|
||||
nDefaultHD = LevelUpHenchman(oSummon, iClass2 ,TRUE, iClass2Package);
|
||||
|
||||
if(nDefaultHD == 0)
|
||||
SpeakString(GetName(oSummon) + " Failed on second class", TALKVOLUME_SHOUT);
|
||||
}
|
||||
else
|
||||
{
|
||||
//just level up using the class it already has
|
||||
nDefaultHD = LevelUpHenchman(oSummon, CLASS_TYPE_INVALID ,TRUE);
|
||||
|
||||
if(nDefaultHD == 0)
|
||||
SpeakString(GetName(oSummon) + " Failed to level properly", TALKVOLUME_SHOUT);
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
//:: void main() {}
|
||||
@@ -3433,6 +3433,7 @@ int PrimoGetWeaponSize(object oItem)
|
||||
case BASE_ITEM_LIGHTFLAIL:
|
||||
case BASE_ITEM_KATANA:
|
||||
case BASE_ITEM_MAGICSTAFF:
|
||||
case BASE_ITEM_CRAFTED_SCEPTER:
|
||||
case BASE_ITEM_LONGSWORD:
|
||||
case BASE_ITEM_TRIDENT:
|
||||
case BASE_ITEM_MORNINGSTAR:
|
||||
|
||||
@@ -30,6 +30,7 @@ int GetDamageFromConstant(int nIPConst);
|
||||
void DoFrostRend(object oTarget, object oAttacker, object oWeapon);
|
||||
|
||||
#include "moi_inc_moifunc"
|
||||
#include "prc_inc_combat"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Function defintions */
|
||||
|
||||
@@ -17,9 +17,6 @@ Created: May 1, 2008
|
||||
|
||||
//:: Updated for .35 by Jaysyn 2023/03/11
|
||||
|
||||
//:: Test Void
|
||||
//void main (){}
|
||||
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Constants
|
||||
//:://////////////////////////////////////////////
|
||||
@@ -63,6 +60,14 @@ string GetMetaMagicString(int nMetaMagic);
|
||||
int GetMetaMagicFromFeat(int nFeat);
|
||||
int GetMetaMagicOfCaster(object oPC = OBJECT_SELF);
|
||||
|
||||
string GetFileForClass(int nClass);
|
||||
int GetSpellslotLevel(int nClass, object oPC);
|
||||
int GetSpellKnownMaxCount(int nLevel, int nSpellLevel, int nClass, object oPC);
|
||||
int GetSpellbookTypeForClass(int nClass);
|
||||
|
||||
#include "inc_pers_array"
|
||||
#include "inc_2dacache"
|
||||
|
||||
// name of the new spellbook file (cls_spell_*)
|
||||
string GetNSBDefinitionFileName(int nClass)
|
||||
{
|
||||
|
||||
@@ -44,6 +44,7 @@ void CreateSwitchNameArray();
|
||||
|
||||
#include "prc_inc_array" // Needs direct include instead of inc_utility
|
||||
#include "prc_inc_switch"
|
||||
#include "inc_2dacache"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Function definitions */
|
||||
@@ -335,7 +336,7 @@ void SetDefaultFileEnds()
|
||||
SetPRCSwitch("PRC_FILE_END_craft_golem", 40);
|
||||
SetPRCSwitch("PRC_FILE_END_craft_ring", 41);
|
||||
SetPRCSwitch("PRC_FILE_END_craft_weapon", 46);
|
||||
SetPRCSwitch("PRC_FILE_END_craft_wondrous", 115);
|
||||
SetPRCSwitch("PRC_FILE_END_craft_wondrous", 131);
|
||||
SetPRCSwitch("PRC_FILE_END_creaturesize", 5);
|
||||
SetPRCSwitch("PRC_FILE_END_creaturespeed", 8);
|
||||
SetPRCSwitch("PRC_FILE_END_crtemplates", 10);
|
||||
@@ -408,7 +409,7 @@ void SetDefaultFileEnds()
|
||||
SetPRCSwitch("PRC_FILE_END_iprp_ammocost", 15);
|
||||
SetPRCSwitch("PRC_FILE_END_iprp_ammotype", 2);
|
||||
SetPRCSwitch("PRC_FILE_END_iprp_amount", 4);
|
||||
SetPRCSwitch("PRC_FILE_END_iprp_aoe", 7);
|
||||
SetPRCSwitch("PRC_FILE_END_iprp_aoe", 8);
|
||||
SetPRCSwitch("PRC_FILE_END_iprp_arcspell", 19);
|
||||
SetPRCSwitch("PRC_FILE_END_iprp_base1", -1);
|
||||
SetPRCSwitch("PRC_FILE_END_iprp_bladecost", 5);
|
||||
@@ -430,8 +431,8 @@ void SetDefaultFileEnds()
|
||||
SetPRCSwitch("PRC_FILE_END_iprp_incvalue2", 9);
|
||||
SetPRCSwitch("PRC_FILE_END_iprp_kitcost", 50);
|
||||
SetPRCSwitch("PRC_FILE_END_iprp_lightcost", 4);
|
||||
SetPRCSwitch("PRC_FILE_END_iprp_matcost", 77);
|
||||
SetPRCSwitch("PRC_FILE_END_iprp_material", 77);
|
||||
SetPRCSwitch("PRC_FILE_END_iprp_matcost", 145);
|
||||
SetPRCSwitch("PRC_FILE_END_iprp_material", 145);
|
||||
SetPRCSwitch("PRC_FILE_END_iprp_maxpp", 8);
|
||||
SetPRCSwitch("PRC_FILE_END_iprp_meleecost", 20);
|
||||
SetPRCSwitch("PRC_FILE_END_iprp_metamagic", 6);
|
||||
@@ -866,6 +867,31 @@ void CreateSwitchNameArray()
|
||||
//if you add more switches, add them to this list
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DEBUG);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_COMBAT_DEBUG);
|
||||
|
||||
//craft
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DISABLE_CRAFT);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_TIMER_MULTIPLIER);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_TIMER_MAX);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_TIMER_MIN);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BREW_POTION_CASTER_LEVEL);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_SCRIBE_SCROLL_CASTER_LEVEL);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_WAND_CASTER_LEVEL);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_ROD_CASTER_LEVEL);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_STAFF_CASTER_LEVEL);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_BASE_ITEMS);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_BREWPOTION_MAXLEVEL);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_BREWPOTION_COSTMODIFIER);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_SCRIBESCROLL_COSTMODIFIER);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_CRAFTWAND_MAXLEVEL);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_CRAFTWAND_COSTMODIFIER);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_CREATEINFUSION_COSTMODIFIER);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_ARBITRARY);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_COST_SCALE);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_TIME_SCALE);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CREATE_INFUSION_CASTER_LEVEL);
|
||||
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_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);
|
||||
@@ -876,6 +902,8 @@ void CreateSwitchNameArray()
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BIOWARE_HARM);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BIOWARE_NEUTRALIZE_POISON);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BIOWARE_REMOVE_DISEASE);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_ALLOWED_TO_REMOVE_FRIENDLY_SPELLS);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_ALLOWED_TO_SEE_HOSTILE_SPELLS);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BIO_UNLEARN);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_UNLEARN_SPELL_MAXNR);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_TIMESTOP_BIOWARE_DURATION);
|
||||
@@ -994,7 +1022,7 @@ void CreateSwitchNameArray()
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_USES_PER_WEAPON_POISON_COUNT);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_USES_PER_WEAPON_POISON_DIE);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_POISON_ALLOW_CLEAN_IN_EQUIP);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_POISON_USE_INGREDIENST);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_POISON_USE_INGREDIENTS);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PSI_ASTRAL_CONSTRUCT_USE_2DA);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PSI_ASTRAL_CONSTRUCT_DUR_MOD);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_RAPID_METABOLISM);
|
||||
@@ -1058,31 +1086,31 @@ void CreateSwitchNameArray()
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_LETOSCRIPT_UNICORN_SQL);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_LETOSCRIPT_GETNEWESTBIC);
|
||||
|
||||
//craft
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_DISABLE_CRAFT);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_TIMER_MULTIPLIER);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_TIMER_MAX);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_TIMER_MIN);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BREW_POTION_CASTER_LEVEL);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_SCRIBE_SCROLL_CASTER_LEVEL);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_WAND_CASTER_LEVEL);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_ROD_CASTER_LEVEL);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_STAFF_CASTER_LEVEL);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_BASE_ITEMS);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_BREWPOTION_MAXLEVEL);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_BREWPOTION_COSTMODIFIER);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_SCRIBESCROLL_COSTMODIFIER);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_CRAFTWAND_MAXLEVEL);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_CRAFTWAND_COSTMODIFIER);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_CREATEINFUSION_COSTMODIFIER);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_ARBITRARY);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_COST_SCALE);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_TIME_SCALE);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CREATE_INFUSION_CASTER_LEVEL);
|
||||
|
||||
//spells
|
||||
|
||||
//shifter
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_WEREWOLF_HYBRID_USE_SHIFTER_SHAPECHANGE);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_WILDSHAPE_ALLOWS_ARMS_SLOT);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_USECR);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_S_HUGE);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_S_LARGE);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_S_MEDIUM);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_S_SMALL);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_S_TINY);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_OUTSIDER);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_ELEMENTAL);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_CONSTRUCT);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_UNDEAD);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_DRAGON);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_ABERRATION);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_OOZE);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_MAGICALBEAST);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_GIANT);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_VERMIN);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_BEAST);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_ANIMAL);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_MONSTROUSHUMANOID);
|
||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PNP_SHFT_F_HUMANOID);
|
||||
|
||||
//general
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "prc_inc_clsfunc"
|
||||
#include "prc_inc_sp_tch"
|
||||
|
||||
int GetBlastDamageDices(object oInvoker, int nInvokerLevel)
|
||||
{
|
||||
|
||||
@@ -135,6 +135,9 @@ int GetHasInvocation(int nInvocation, object oCreature = OBJECT_SELF);
|
||||
/* Includes */
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
int GetPrimaryInvocationClass(object oCreature = OBJECT_SELF);
|
||||
int GetInvocationPRCLevels(object oCaster);
|
||||
|
||||
#include "inc_item_props"
|
||||
#include "prc_x2_itemprop"
|
||||
#include "inc_lookups"
|
||||
|
||||
@@ -123,7 +123,7 @@ void DeleteLocalInvocation(object oObject, string sName);
|
||||
/* Includes */
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
//#include "inv_inc_invfunc" //Access in parent
|
||||
#include "inv_inc_invfunc" //Access in parent
|
||||
#include "prc_spellf_inc"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
@@ -77,6 +77,15 @@ int PreInvocationCastCode()
|
||||
|
||||
int nContinue = !ExecuteScriptAndReturnInt("prespellcode", oInvoker);
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Block forsakers from using invocations
|
||||
//---------------------------------------------------------------------------
|
||||
if(GetLevelByClass(CLASS_TYPE_FORSAKER, oInvoker) > 0)
|
||||
{
|
||||
SendMessageToPC(oInvoker, "Forsakers cannot use invocations.");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Break any spell require maintaining concentration
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -168,3 +177,4 @@ int PreInvocationCastCode()
|
||||
return nContinue;
|
||||
}
|
||||
|
||||
//:: void main (){}
|
||||
@@ -10,9 +10,586 @@ void ShifterCheck(object oPC);
|
||||
#include "pnp_shft_main"
|
||||
#include "prc_inc_shifting"
|
||||
|
||||
//::////////////////Begin Werewolf//////////////////
|
||||
const string PRC_PNP_SHIFTING = "PRC_Shift";
|
||||
|
||||
////////////////Begin Werewolf//////////////////
|
||||
void LycanthropePoly(object oPC, int nPoly)
|
||||
{
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
|
||||
effect ePoly = SupernaturalEffect(EffectPolymorph(nPoly));
|
||||
|
||||
int bMonkGloves = GetLocalInt(oPC, "WEARING_MONK_GLOVES");
|
||||
int bArmsSlotAllowed = GetPRCSwitch(PRC_WILDSHAPE_ALLOWS_ARMS_SLOT);
|
||||
|
||||
int bWeapon = StringToInt(Get2DACache("polymorph","MergeW",nPoly)) == 1;
|
||||
int bArmor = StringToInt(Get2DACache("polymorph","MergeA",nPoly)) == 1;
|
||||
int bItems = StringToInt(Get2DACache("polymorph","MergeI",nPoly)) == 1;
|
||||
|
||||
object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
|
||||
object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,oPC);
|
||||
object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,oPC);
|
||||
object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,oPC);
|
||||
object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,oPC);
|
||||
object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,oPC);
|
||||
object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,oPC);
|
||||
object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,oPC);
|
||||
object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,oPC);
|
||||
object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC);
|
||||
object oGlovesOld = GetItemInSlot(INVENTORY_SLOT_ARMS,oPC);
|
||||
|
||||
if (GetIsObjectValid(oShield))
|
||||
{
|
||||
int nShieldType = GetBaseItemType(oShield);
|
||||
if (nShieldType != BASE_ITEM_LARGESHIELD &&
|
||||
nShieldType != BASE_ITEM_SMALLSHIELD &&
|
||||
nShieldType != BASE_ITEM_TOWERSHIELD)
|
||||
{
|
||||
oShield = OBJECT_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
ShifterCheck(oPC);
|
||||
ClearAllActions();
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, oPC);
|
||||
|
||||
object oWeaponNewRight = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R,oPC);
|
||||
object oWeaponNewLeft = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L,oPC);
|
||||
object oWeaponNewBite = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B,oPC);
|
||||
object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPC);
|
||||
|
||||
//:: Weapon & Armor merge block
|
||||
object oMergeWeaponSource = OBJECT_INVALID;
|
||||
object oMergeArmorSource = OBJECT_INVALID;
|
||||
|
||||
//:: Determine Weapon Merge Source
|
||||
if (bWeapon)
|
||||
{
|
||||
if (bMonkGloves)
|
||||
{
|
||||
if (GetIsObjectValid(oGlovesOld))
|
||||
oMergeWeaponSource = oGlovesOld;
|
||||
}
|
||||
else
|
||||
{
|
||||
//:: Always attempt to merge melee weapon to creature weapon
|
||||
oMergeWeaponSource = oWeaponOld; // even if empty, ensures proper state
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//:: Weapon not requested, but arms-slot allowed monk gloves can merge via armor branch
|
||||
if (bMonkGloves && bArmsSlotAllowed && GetIsObjectValid(oGlovesOld))
|
||||
oMergeWeaponSource = oGlovesOld;
|
||||
}
|
||||
|
||||
//:: Determine Armor Merge Source
|
||||
if (bArmor && GetIsObjectValid(oArmorNew))
|
||||
{
|
||||
if (!bMonkGloves)
|
||||
{
|
||||
if (bArmsSlotAllowed && GetIsObjectValid(oGlovesOld))
|
||||
oMergeArmorSource = oGlovesOld;
|
||||
|
||||
if (GetIsObjectValid(oShield)) IPWildShapeCopyItemProperties(oShield, oArmorNew);
|
||||
if (GetIsObjectValid(oHelmetOld)) IPWildShapeCopyItemProperties(oHelmetOld, oArmorNew);
|
||||
if (GetIsObjectValid(oArmorOld)) IPWildShapeCopyItemProperties(oArmorOld, oArmorNew);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GetIsObjectValid(oShield)) IPWildShapeCopyItemProperties(oShield, oArmorNew);
|
||||
if (GetIsObjectValid(oHelmetOld)) IPWildShapeCopyItemProperties(oHelmetOld, oArmorNew);
|
||||
if (GetIsObjectValid(oArmorOld)) IPWildShapeCopyItemProperties(oArmorOld, oArmorNew);
|
||||
}
|
||||
}
|
||||
else if (bArmor && !GetIsObjectValid(oArmorNew) && DEBUG)
|
||||
{
|
||||
DoDebug("LycanthropePoly: MergeA set, but oArmorNew invalid.");
|
||||
}
|
||||
|
||||
//:: Apply Weapon Merge
|
||||
if (GetIsObjectValid(oMergeWeaponSource) || bWeapon)
|
||||
{
|
||||
//:: Always attempt to merge weapon properties even if source is OBJECT_INVALID
|
||||
if (GetIsObjectValid(oWeaponNewLeft)) IPWildShapeCopyItemProperties(oMergeWeaponSource, oWeaponNewLeft, TRUE);
|
||||
if (GetIsObjectValid(oWeaponNewRight)) IPWildShapeCopyItemProperties(oMergeWeaponSource, oWeaponNewRight, TRUE);
|
||||
if (GetIsObjectValid(oWeaponNewBite)) IPWildShapeCopyItemProperties(oMergeWeaponSource, oWeaponNewBite, TRUE);
|
||||
}
|
||||
|
||||
//:: Apply Armor Merge
|
||||
if (GetIsObjectValid(oMergeArmorSource))
|
||||
{
|
||||
if (GetIsObjectValid(oArmorNew)) IPWildShapeCopyItemProperties(oMergeArmorSource, oArmorNew);
|
||||
}
|
||||
|
||||
//:: General item merge block
|
||||
if (bItems && GetIsObjectValid(oArmorNew))
|
||||
{
|
||||
if (GetIsObjectValid(oRing1Old)) IPWildShapeCopyItemProperties(oRing1Old, oArmorNew);
|
||||
if (GetIsObjectValid(oRing2Old)) IPWildShapeCopyItemProperties(oRing2Old, oArmorNew);
|
||||
if (GetIsObjectValid(oAmuletOld)) IPWildShapeCopyItemProperties(oAmuletOld, oArmorNew);
|
||||
if (GetIsObjectValid(oCloakOld)) IPWildShapeCopyItemProperties(oCloakOld, oArmorNew);
|
||||
if (GetIsObjectValid(oBootsOld)) IPWildShapeCopyItemProperties(oBootsOld, oArmorNew);
|
||||
if (GetIsObjectValid(oBeltOld)) IPWildShapeCopyItemProperties(oBeltOld, oArmorNew);
|
||||
}
|
||||
}
|
||||
//::////////////////End Werewolf//////////////////
|
||||
|
||||
|
||||
/* //::////////////////Begin Werewolf//////////////////
|
||||
const string PRC_PNP_SHIFTING = "PRC_Shift";
|
||||
|
||||
void LycanthropePoly(object oPC, int nPoly)
|
||||
{
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
|
||||
effect ePoly = SupernaturalEffect(EffectPolymorph(nPoly));
|
||||
|
||||
int bMonkGloves = GetLocalInt(oPC, "WEARING_MONK_GLOVES");
|
||||
int bArmsSlotAllowed = GetPRCSwitch(PRC_WILDSHAPE_ALLOWS_ARMS_SLOT);
|
||||
|
||||
int bWeapon = StringToInt(Get2DACache("polymorph","MergeW",nPoly)) == 1;
|
||||
int bArmor = StringToInt(Get2DACache("polymorph","MergeA",nPoly)) == 1;
|
||||
int bItems = StringToInt(Get2DACache("polymorph","MergeI",nPoly)) == 1;
|
||||
|
||||
object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
|
||||
object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,oPC);
|
||||
object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,oPC);
|
||||
object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,oPC);
|
||||
object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,oPC);
|
||||
object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,oPC);
|
||||
object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,oPC);
|
||||
object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,oPC);
|
||||
object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,oPC);
|
||||
object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC);
|
||||
object oGlovesOld = GetItemInSlot(INVENTORY_SLOT_ARMS,oPC);
|
||||
|
||||
if (GetIsObjectValid(oShield))
|
||||
{
|
||||
int nShieldType = GetBaseItemType(oShield);
|
||||
if (nShieldType != BASE_ITEM_LARGESHIELD &&
|
||||
nShieldType != BASE_ITEM_SMALLSHIELD &&
|
||||
nShieldType != BASE_ITEM_TOWERSHIELD)
|
||||
{
|
||||
oShield = OBJECT_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
ShifterCheck(oPC);
|
||||
ClearAllActions();
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, oPC);
|
||||
|
||||
object oWeaponNewRight = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R,oPC);
|
||||
object oWeaponNewLeft = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L,oPC);
|
||||
object oWeaponNewBite = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B,oPC);
|
||||
object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPC);
|
||||
|
||||
//:: Weapon & Armor merge block
|
||||
object oMergeWeaponSource = OBJECT_INVALID;
|
||||
object oMergeArmorSource = OBJECT_INVALID;
|
||||
|
||||
// ---- Determine Weapon Merge Source ----
|
||||
if (bWeapon)
|
||||
{
|
||||
if (bMonkGloves)
|
||||
{
|
||||
if (GetIsObjectValid(oGlovesOld))
|
||||
oMergeWeaponSource = oGlovesOld;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GetIsObjectValid(oWeaponOld))
|
||||
oMergeWeaponSource = oWeaponOld;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bMonkGloves && bArmsSlotAllowed && GetIsObjectValid(oGlovesOld))
|
||||
oMergeWeaponSource = oGlovesOld;
|
||||
}
|
||||
|
||||
// ---- Determine Armor Merge Source ----
|
||||
if (bArmor && GetIsObjectValid(oArmorNew))
|
||||
{
|
||||
if (!bMonkGloves)
|
||||
{
|
||||
if (bArmsSlotAllowed && GetIsObjectValid(oGlovesOld))
|
||||
oMergeArmorSource = oGlovesOld;
|
||||
|
||||
if (GetIsObjectValid(oShield)) IPWildShapeCopyItemProperties(oShield, oArmorNew);
|
||||
if (GetIsObjectValid(oHelmetOld)) IPWildShapeCopyItemProperties(oHelmetOld, oArmorNew);
|
||||
if (GetIsObjectValid(oArmorOld)) IPWildShapeCopyItemProperties(oArmorOld, oArmorNew);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GetIsObjectValid(oShield)) IPWildShapeCopyItemProperties(oShield, oArmorNew);
|
||||
if (GetIsObjectValid(oHelmetOld)) IPWildShapeCopyItemProperties(oHelmetOld, oArmorNew);
|
||||
if (GetIsObjectValid(oArmorOld)) IPWildShapeCopyItemProperties(oArmorOld, oArmorNew);
|
||||
}
|
||||
}
|
||||
else if (bArmor && !GetIsObjectValid(oArmorNew) && DEBUG)
|
||||
{
|
||||
DoDebug("LycanthropePoly: MergeA set, but oArmorNew invalid.");
|
||||
}
|
||||
|
||||
// ---- Apply Weapon Merge ----
|
||||
if (GetIsObjectValid(oMergeWeaponSource))
|
||||
{
|
||||
if (GetIsObjectValid(oWeaponNewLeft)) IPWildShapeCopyItemProperties(oMergeWeaponSource, oWeaponNewLeft, TRUE);
|
||||
if (GetIsObjectValid(oWeaponNewRight)) IPWildShapeCopyItemProperties(oMergeWeaponSource, oWeaponNewRight, TRUE);
|
||||
if (GetIsObjectValid(oWeaponNewBite)) IPWildShapeCopyItemProperties(oMergeWeaponSource, oWeaponNewBite, TRUE);
|
||||
}
|
||||
|
||||
// ---- Apply Armor Merge ----
|
||||
if (GetIsObjectValid(oMergeArmorSource))
|
||||
{
|
||||
if (GetIsObjectValid(oArmorNew)) IPWildShapeCopyItemProperties(oMergeArmorSource, oArmorNew);
|
||||
}
|
||||
|
||||
//:: General item merge block
|
||||
if (bItems && GetIsObjectValid(oArmorNew))
|
||||
{
|
||||
if (GetIsObjectValid(oRing1Old)) IPWildShapeCopyItemProperties(oRing1Old, oArmorNew);
|
||||
if (GetIsObjectValid(oRing2Old)) IPWildShapeCopyItemProperties(oRing2Old, oArmorNew);
|
||||
if (GetIsObjectValid(oAmuletOld)) IPWildShapeCopyItemProperties(oAmuletOld, oArmorNew);
|
||||
if (GetIsObjectValid(oCloakOld)) IPWildShapeCopyItemProperties(oCloakOld, oArmorNew);
|
||||
if (GetIsObjectValid(oBootsOld)) IPWildShapeCopyItemProperties(oBootsOld, oArmorNew);
|
||||
if (GetIsObjectValid(oBeltOld)) IPWildShapeCopyItemProperties(oBeltOld, oArmorNew);
|
||||
}
|
||||
}
|
||||
//::////////////////End Werewolf////////////////// */
|
||||
|
||||
|
||||
/* //::////////////////Begin Werewolf//////////////////
|
||||
const string PRC_PNP_SHIFTING = "PRC_Shift";
|
||||
|
||||
void LycanthropePoly(object oPC, int nPoly)
|
||||
{
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
|
||||
effect ePoly = SupernaturalEffect(EffectPolymorph(nPoly));
|
||||
|
||||
int bMonkGloves = GetLocalInt(oPC, "WEARING_MONK_GLOVES");
|
||||
int bArmsSlotAllowed = GetPRCSwitch(PRC_WILDSHAPE_ALLOWS_ARMS_SLOT);
|
||||
|
||||
int bWeapon = StringToInt(Get2DACache("polymorph","MergeW",nPoly)) == 1;
|
||||
int bArmor = StringToInt(Get2DACache("polymorph","MergeA",nPoly)) == 1;
|
||||
int bItems = StringToInt(Get2DACache("polymorph","MergeI",nPoly)) == 1;
|
||||
|
||||
object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
|
||||
object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,oPC);
|
||||
object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,oPC);
|
||||
object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,oPC);
|
||||
object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,oPC);
|
||||
object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,oPC);
|
||||
object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,oPC);
|
||||
object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,oPC);
|
||||
object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,oPC);
|
||||
object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC);
|
||||
object oGlovesOld = GetItemInSlot(INVENTORY_SLOT_ARMS,oPC);
|
||||
|
||||
if (GetIsObjectValid(oShield))
|
||||
{
|
||||
int nShieldType = GetBaseItemType(oShield);
|
||||
if (nShieldType != BASE_ITEM_LARGESHIELD &&
|
||||
nShieldType != BASE_ITEM_SMALLSHIELD &&
|
||||
nShieldType != BASE_ITEM_TOWERSHIELD)
|
||||
{
|
||||
oShield = OBJECT_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
ShifterCheck(oPC);
|
||||
ClearAllActions();
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, oPC);
|
||||
|
||||
object oWeaponNewRight = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R,oPC);
|
||||
object oWeaponNewLeft = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L,oPC);
|
||||
object oWeaponNewBite = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B,oPC);
|
||||
object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPC);
|
||||
|
||||
//:: Weapon merge block
|
||||
if (bWeapon)
|
||||
{
|
||||
object oMergeSource = OBJECT_INVALID;
|
||||
|
||||
// Priority: monk gloves override if worn and arms-slot not allowed
|
||||
if (bMonkGloves && !bArmsSlotAllowed)
|
||||
{
|
||||
if (GetIsObjectValid(oGlovesOld))
|
||||
oMergeSource = oGlovesOld;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Otherwise use main-hand weapon if it exists
|
||||
if (GetIsObjectValid(oWeaponOld))
|
||||
oMergeSource = oWeaponOld;
|
||||
}
|
||||
|
||||
// Apply merge to creature weapons if we have a source
|
||||
if (GetIsObjectValid(oMergeSource))
|
||||
{
|
||||
if (GetIsObjectValid(oWeaponNewLeft)) IPWildShapeCopyItemProperties(oMergeSource, oWeaponNewLeft, TRUE);
|
||||
if (GetIsObjectValid(oWeaponNewRight)) IPWildShapeCopyItemProperties(oMergeSource, oWeaponNewRight, TRUE);
|
||||
if (GetIsObjectValid(oWeaponNewBite)) IPWildShapeCopyItemProperties(oMergeSource, oWeaponNewBite, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
//:: Armor merge block
|
||||
if (bArmor && GetIsObjectValid(oArmorNew))
|
||||
{
|
||||
if (GetIsObjectValid(oShield)) IPWildShapeCopyItemProperties(oShield, oArmorNew);
|
||||
if (GetIsObjectValid(oHelmetOld)) IPWildShapeCopyItemProperties(oHelmetOld, oArmorNew);
|
||||
if (GetIsObjectValid(oArmorOld)) IPWildShapeCopyItemProperties(oArmorOld, oArmorNew);
|
||||
|
||||
// Arms-slot allowed -> apply gloves & bracers to creature weapons
|
||||
if (bArmsSlotAllowed && GetIsObjectValid(oGlovesOld))
|
||||
{
|
||||
if (DEBUG) DoDebug("LycanthropePoly: Arms-slot allowed -> applying gloves/bracers to creature weapons from armor branch.");
|
||||
if (GetIsObjectValid(oWeaponNewLeft)) IPWildShapeCopyItemProperties(oGlovesOld, oWeaponNewLeft, TRUE);
|
||||
if (GetIsObjectValid(oWeaponNewRight)) IPWildShapeCopyItemProperties(oGlovesOld, oWeaponNewRight, TRUE);
|
||||
if (GetIsObjectValid(oWeaponNewBite)) IPWildShapeCopyItemProperties(oGlovesOld, oWeaponNewBite, TRUE);
|
||||
}
|
||||
}
|
||||
else if (bArmor && !GetIsObjectValid(oArmorNew) && DEBUG)
|
||||
{
|
||||
DoDebug("LycanthropePoly: MergeA set, but oArmorNew invalid.");
|
||||
}
|
||||
|
||||
//:: General item merge block
|
||||
if (bItems && GetIsObjectValid(oArmorNew))
|
||||
{
|
||||
if (GetIsObjectValid(oRing1Old)) IPWildShapeCopyItemProperties(oRing1Old, oArmorNew);
|
||||
if (GetIsObjectValid(oRing2Old)) IPWildShapeCopyItemProperties(oRing2Old, oArmorNew);
|
||||
if (GetIsObjectValid(oAmuletOld)) IPWildShapeCopyItemProperties(oAmuletOld, oArmorNew);
|
||||
if (GetIsObjectValid(oCloakOld)) IPWildShapeCopyItemProperties(oCloakOld, oArmorNew);
|
||||
if (GetIsObjectValid(oBootsOld)) IPWildShapeCopyItemProperties(oBootsOld, oArmorNew);
|
||||
if (GetIsObjectValid(oBeltOld)) IPWildShapeCopyItemProperties(oBeltOld, oArmorNew);
|
||||
}
|
||||
}
|
||||
//::////////////////End Werewolf//////////////////
|
||||
*/
|
||||
|
||||
/* //::////////////////Begin Werewolf//////////////////
|
||||
const string PRC_PNP_SHIFTING = "PRC_Shift";
|
||||
|
||||
void LycanthropePoly(object oPC, int nPoly)
|
||||
{
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
|
||||
effect ePoly = SupernaturalEffect(EffectPolymorph(nPoly));
|
||||
|
||||
int bMonkGloves = GetLocalInt(oPC, "WEARING_MONK_GLOVES");
|
||||
int bArmsSlotAllowed = GetPRCSwitch(PRC_WILDSHAPE_ALLOWS_ARMS_SLOT);
|
||||
|
||||
int bWeapon = StringToInt(Get2DACache("polymorph","MergeW",nPoly)) == 1;
|
||||
int bArmor = StringToInt(Get2DACache("polymorph","MergeA",nPoly)) == 1;
|
||||
int bItems = StringToInt(Get2DACache("polymorph","MergeI",nPoly)) == 1;
|
||||
|
||||
object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
|
||||
object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,oPC);
|
||||
object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,oPC);
|
||||
object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,oPC);
|
||||
object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,oPC);
|
||||
object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,oPC);
|
||||
object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,oPC);
|
||||
object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,oPC);
|
||||
object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,oPC);
|
||||
object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC);
|
||||
object oGlovesOld = GetItemInSlot(INVENTORY_SLOT_ARMS,oPC);
|
||||
|
||||
if (GetIsObjectValid(oShield))
|
||||
{
|
||||
int nShieldType = GetBaseItemType(oShield);
|
||||
if (nShieldType != BASE_ITEM_LARGESHIELD &&
|
||||
nShieldType != BASE_ITEM_SMALLSHIELD &&
|
||||
nShieldType != BASE_ITEM_TOWERSHIELD)
|
||||
{
|
||||
oShield = OBJECT_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
ShifterCheck(oPC);
|
||||
ClearAllActions();
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, oPC);
|
||||
|
||||
object oWeaponNewRight = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R,oPC);
|
||||
object oWeaponNewLeft = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L,oPC);
|
||||
object oWeaponNewBite = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B,oPC);
|
||||
object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPC);
|
||||
|
||||
//:: Weapon merge block
|
||||
//:: Only blocked if monk gloves are equipped AND arms-slot merge is NOT allowed
|
||||
if (bWeapon && !bMonkGloves)
|
||||
{
|
||||
if (GetIsObjectValid(oWeaponOld))
|
||||
{
|
||||
if (GetIsObjectValid(oWeaponNewLeft)) IPWildShapeCopyItemProperties(oWeaponOld, oWeaponNewLeft, TRUE);
|
||||
if (GetIsObjectValid(oWeaponNewRight)) IPWildShapeCopyItemProperties(oWeaponOld, oWeaponNewRight, TRUE);
|
||||
if (GetIsObjectValid(oWeaponNewBite)) IPWildShapeCopyItemProperties(oWeaponOld, oWeaponNewBite, TRUE);
|
||||
}
|
||||
}
|
||||
else if (bWeapon && bMonkGloves && !bArmsSlotAllowed)
|
||||
{
|
||||
if (DEBUG) DoDebug("LycanthropePoly: Monk gloves overriding weapon merge (arms slot NOT allowed).");
|
||||
if (GetIsObjectValid(oGlovesOld))
|
||||
{
|
||||
if (GetIsObjectValid(oWeaponNewLeft)) IPWildShapeCopyItemProperties(oGlovesOld, oWeaponNewLeft, TRUE);
|
||||
if (GetIsObjectValid(oWeaponNewRight)) IPWildShapeCopyItemProperties(oGlovesOld, oWeaponNewRight, TRUE);
|
||||
if (GetIsObjectValid(oWeaponNewBite)) IPWildShapeCopyItemProperties(oGlovesOld, oWeaponNewBite, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//:: Armor merge block
|
||||
//:: Apply armor and gloves (if arms-slot allowed)
|
||||
|
||||
if (bArmor && GetIsObjectValid(oArmorNew))
|
||||
{
|
||||
if (GetIsObjectValid(oShield)) IPWildShapeCopyItemProperties(oShield, oArmorNew);
|
||||
if (GetIsObjectValid(oHelmetOld)) IPWildShapeCopyItemProperties(oHelmetOld, oArmorNew);
|
||||
if (GetIsObjectValid(oArmorOld)) IPWildShapeCopyItemProperties(oArmorOld, oArmorNew);
|
||||
|
||||
if (bArmsSlotAllowed && bMonkGloves && GetIsObjectValid(oGlovesOld))
|
||||
{
|
||||
if (DEBUG) DoDebug("LycanthropePoly: Arms-slot allowed -> applying gloves to creature weapons from armor branch.");
|
||||
if (GetIsObjectValid(oWeaponNewLeft)) IPWildShapeCopyItemProperties(oGlovesOld, oWeaponNewLeft, TRUE);
|
||||
if (GetIsObjectValid(oWeaponNewRight)) IPWildShapeCopyItemProperties(oGlovesOld, oWeaponNewRight, TRUE);
|
||||
if (GetIsObjectValid(oWeaponNewBite)) IPWildShapeCopyItemProperties(oGlovesOld, oWeaponNewBite, TRUE);
|
||||
}
|
||||
}
|
||||
else if (bArmor && !GetIsObjectValid(oArmorNew) && DEBUG)
|
||||
{
|
||||
DoDebug("LycanthropePoly: MergeA set, but oArmorNew invalid.");
|
||||
}
|
||||
|
||||
//:: General item merge block
|
||||
if (bItems && GetIsObjectValid(oArmorNew))
|
||||
{
|
||||
if (GetIsObjectValid(oRing1Old)) IPWildShapeCopyItemProperties(oRing1Old, oArmorNew);
|
||||
if (GetIsObjectValid(oRing2Old)) IPWildShapeCopyItemProperties(oRing2Old, oArmorNew);
|
||||
if (GetIsObjectValid(oAmuletOld)) IPWildShapeCopyItemProperties(oAmuletOld, oArmorNew);
|
||||
if (GetIsObjectValid(oCloakOld)) IPWildShapeCopyItemProperties(oCloakOld, oArmorNew);
|
||||
if (GetIsObjectValid(oBootsOld)) IPWildShapeCopyItemProperties(oBootsOld, oArmorNew);
|
||||
if (GetIsObjectValid(oBeltOld)) IPWildShapeCopyItemProperties(oBeltOld, oArmorNew);
|
||||
}
|
||||
}
|
||||
//::////////////////End Werewolf////////////////// */
|
||||
|
||||
|
||||
/* //::////////////////Begin Werewolf//////////////////
|
||||
const string PRC_PNP_SHIFTING = "PRC_Shift";
|
||||
|
||||
void LycanthropePoly(object oPC, int nPoly)
|
||||
{
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
|
||||
effect ePoly = SupernaturalEffect(EffectPolymorph(nPoly));
|
||||
|
||||
int bMonkGloves = GetLocalInt(oPC, "WEARING_MONK_GLOVES");
|
||||
int bArmsSlotAllowed = GetPRCSwitch(PRC_WILDSHAPE_ALLOWS_ARMS_SLOT);
|
||||
|
||||
int bWeapon = StringToInt(Get2DACache("polymorph","MergeW",nPoly)) == 1;
|
||||
int bArmor = StringToInt(Get2DACache("polymorph","MergeA",nPoly)) == 1;
|
||||
int bItems = StringToInt(Get2DACache("polymorph","MergeI",nPoly)) == 1;
|
||||
|
||||
object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
|
||||
object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,oPC);
|
||||
object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,oPC);
|
||||
object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,oPC);
|
||||
object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,oPC);
|
||||
object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,oPC);
|
||||
object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,oPC);
|
||||
object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,oPC);
|
||||
object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,oPC);
|
||||
object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC);
|
||||
object oGlovesOld = GetItemInSlot(INVENTORY_SLOT_ARMS,oPC);
|
||||
|
||||
if (GetIsObjectValid(oShield))
|
||||
{
|
||||
int nShieldType = GetBaseItemType(oShield);
|
||||
if (nShieldType != BASE_ITEM_LARGESHIELD &&
|
||||
nShieldType != BASE_ITEM_SMALLSHIELD &&
|
||||
nShieldType != BASE_ITEM_TOWERSHIELD)
|
||||
{
|
||||
oShield = OBJECT_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
ShifterCheck(oPC);
|
||||
ClearAllActions();
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, oPC);
|
||||
|
||||
object oWeaponNewRight = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R,oPC);
|
||||
object oWeaponNewLeft = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L,oPC);
|
||||
object oWeaponNewBite = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B,oPC);
|
||||
object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPC);
|
||||
|
||||
//:: Weapon merge block
|
||||
//:: Only blocked if monk gloves are equipped AND arms-slot merge is NOT allowed
|
||||
if (bWeapon && !bMonkGloves)
|
||||
{
|
||||
if (GetIsObjectValid(oWeaponOld))
|
||||
{
|
||||
if (GetIsObjectValid(oWeaponNewLeft)) IPWildShapeCopyItemProperties(oWeaponOld, oWeaponNewLeft, TRUE);
|
||||
if (GetIsObjectValid(oWeaponNewRight)) IPWildShapeCopyItemProperties(oWeaponOld, oWeaponNewRight, TRUE);
|
||||
if (GetIsObjectValid(oWeaponNewBite)) IPWildShapeCopyItemProperties(oWeaponOld, oWeaponNewBite, TRUE);
|
||||
}
|
||||
}
|
||||
else if (bWeapon && bMonkGloves && !bArmsSlotAllowed)
|
||||
{
|
||||
if (DEBUG) DoDebug("LycanthropePoly: Monk gloves overriding weapon merge (arms slot NOT allowed).");
|
||||
if (GetIsObjectValid(oGlovesOld))
|
||||
{
|
||||
if (GetIsObjectValid(oWeaponNewLeft)) IPWildShapeCopyItemProperties(oGlovesOld, oWeaponNewLeft, TRUE);
|
||||
if (GetIsObjectValid(oWeaponNewRight)) IPWildShapeCopyItemProperties(oGlovesOld, oWeaponNewRight, TRUE);
|
||||
if (GetIsObjectValid(oWeaponNewBite)) IPWildShapeCopyItemProperties(oGlovesOld, oWeaponNewBite, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//:: Armor merge block
|
||||
//:: Apply armor and gloves (if arms-slot allowed)
|
||||
|
||||
if (bArmor && GetIsObjectValid(oArmorNew))
|
||||
{
|
||||
if (GetIsObjectValid(oShield)) IPWildShapeCopyItemProperties(oShield, oArmorNew);
|
||||
if (GetIsObjectValid(oHelmetOld)) IPWildShapeCopyItemProperties(oHelmetOld, oArmorNew);
|
||||
if (GetIsObjectValid(oArmorOld)) IPWildShapeCopyItemProperties(oArmorOld, oArmorNew);
|
||||
|
||||
if (bArmsSlotAllowed && bMonkGloves && GetIsObjectValid(oGlovesOld))
|
||||
{
|
||||
if (DEBUG) DoDebug("LycanthropePoly: Arms-slot allowed -> applying gloves to creature weapons from armor branch.");
|
||||
if (GetIsObjectValid(oWeaponNewLeft)) IPWildShapeCopyItemProperties(oGlovesOld, oWeaponNewLeft, TRUE);
|
||||
if (GetIsObjectValid(oWeaponNewRight)) IPWildShapeCopyItemProperties(oGlovesOld, oWeaponNewRight, TRUE);
|
||||
if (GetIsObjectValid(oWeaponNewBite)) IPWildShapeCopyItemProperties(oGlovesOld, oWeaponNewBite, TRUE);
|
||||
}
|
||||
}
|
||||
else if (bArmor && !GetIsObjectValid(oArmorNew) && DEBUG)
|
||||
{
|
||||
DoDebug("LycanthropePoly: MergeA set, but oArmorNew invalid.");
|
||||
}
|
||||
|
||||
//:: General item merge block
|
||||
if (bItems && GetIsObjectValid(oArmorNew))
|
||||
{
|
||||
if (GetIsObjectValid(oRing1Old)) IPWildShapeCopyItemProperties(oRing1Old, oArmorNew);
|
||||
if (GetIsObjectValid(oRing2Old)) IPWildShapeCopyItemProperties(oRing2Old, oArmorNew);
|
||||
if (GetIsObjectValid(oAmuletOld)) IPWildShapeCopyItemProperties(oAmuletOld, oArmorNew);
|
||||
if (GetIsObjectValid(oCloakOld)) IPWildShapeCopyItemProperties(oCloakOld, oArmorNew);
|
||||
if (GetIsObjectValid(oBootsOld)) IPWildShapeCopyItemProperties(oBootsOld, oArmorNew);
|
||||
if (GetIsObjectValid(oBeltOld)) IPWildShapeCopyItemProperties(oBeltOld, oArmorNew);
|
||||
}
|
||||
}
|
||||
//::////////////////End Werewolf////////////////// */
|
||||
|
||||
|
||||
/* ////////////////Begin Werewolf//////////////////
|
||||
|
||||
void LycanthropePoly(object oPC, int nPoly)
|
||||
{
|
||||
@@ -84,7 +661,7 @@ void LycanthropePoly(object oPC, int nPoly)
|
||||
|
||||
}
|
||||
|
||||
////////////////End Werewolf//////////////////
|
||||
////////////////End Werewolf////////////////// */
|
||||
|
||||
void ShifterCheck(object oPC)
|
||||
{
|
||||
@@ -246,4 +823,6 @@ void DoTail(object oPC, int nTailType)
|
||||
SetCreatureTailType(nTailType, oPC);
|
||||
//override any stored default appearance
|
||||
SetPersistantLocalInt(oPC, "AppearanceStoredTail", nTailType);
|
||||
}
|
||||
}
|
||||
|
||||
//::void main (){}
|
||||
@@ -54,11 +54,11 @@ int SPGetPenetrAOE(object oCaster = OBJECT_SELF, int nCasterLvl = 0);
|
||||
/* Includes */
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
//#include "prc_inc_spells"
|
||||
#include "prc_inc_spells"
|
||||
//#include "prc_alterations"
|
||||
//#include "prcsp_archmaginc"
|
||||
//#include "prc_inc_racial"
|
||||
|
||||
#include "inc_2dacache"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Function definitions */
|
||||
|
||||
@@ -444,6 +444,7 @@ int Get2DALineFromItemprop(string sFile, itemproperty ip, object oItem)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ITEM_PROPERTY_ECHOBLADE: return 46; break;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
@@ -1529,7 +1530,12 @@ void ApplyItemProps(object oItem, string sFile, int nLine)
|
||||
break; //no more itemprops, no gaps, assuming no errors
|
||||
}
|
||||
if(sFile != "craft_weapon" && sFile != "craft_armour")
|
||||
SetName(oItem, GetStringByStrRef(StringToInt(Get2DACache(sFile, "Name", nLine))));
|
||||
{
|
||||
SetName(oItem, GetStringByStrRef(StringToInt(Get2DACache(sFile, "Name", nLine))));
|
||||
string sDescRef = Get2DACache(sFile, "CraftedDescription", nLine);
|
||||
if(sDescRef != "")
|
||||
SetDescription(oItem, GetStringByStrRef(StringToInt(sDescRef)));
|
||||
}
|
||||
}
|
||||
|
||||
//Partly ripped off the lexicon :P
|
||||
@@ -1620,7 +1626,8 @@ string GetCrafting2DA(object oItem)
|
||||
(nBase == BASE_ITEM_BOOTS) ||
|
||||
(nBase == BASE_ITEM_GLOVES) ||
|
||||
(nBase == BASE_ITEM_BRACER) ||
|
||||
(nBase == BASE_ITEM_CLOAK))
|
||||
(nBase == BASE_ITEM_CLOAK) ||
|
||||
(nBase == BASE_ITEM_CRAFTED_VIAL))
|
||||
)
|
||||
return "craft_wondrous";
|
||||
|
||||
@@ -1657,19 +1664,28 @@ int GetCraftingFeat(object oItem)
|
||||
if(nBase == BASE_ITEM_RING) return FEAT_FORGE_RING;
|
||||
|
||||
//routing bioware feats through this convo
|
||||
if((nBase == BASE_ITEM_CRAFTED_SCEPTER) ||
|
||||
(nBase == BASE_ITEM_CRAFTED_SCEPTER)
|
||||
)
|
||||
return FEAT_CRAFT_SCEPTER;
|
||||
|
||||
if((nBase == BASE_ITEM_MAGICROD) ||
|
||||
(nBase == BASE_ITEM_CRAFTED_ROD)
|
||||
)
|
||||
return FEAT_CRAFT_ROD;
|
||||
|
||||
if((nBase == BASE_ITEM_MAGICSTAFF) ||
|
||||
(nBase == BASE_ITEM_CRAFTED_STAFF)
|
||||
)
|
||||
return FEAT_CRAFT_STAFF;
|
||||
|
||||
if((nBase == BASE_ITEM_MAGICWAND) ||
|
||||
(nBase == BASE_ITEM_BLANK_WAND)
|
||||
)
|
||||
return FEAT_CRAFT_WAND;
|
||||
|
||||
if(nBase == BASE_ITEM_BLANK_POTION) return FEAT_BREW_POTION;
|
||||
|
||||
if(nBase == BASE_ITEM_BLANK_SCROLL) return FEAT_SCRIBE_SCROLL;
|
||||
|
||||
if(((nBase == BASE_ITEM_HELMET) ||
|
||||
@@ -1678,7 +1694,8 @@ int GetCraftingFeat(object oItem)
|
||||
(nBase == BASE_ITEM_BOOTS) ||
|
||||
(nBase == BASE_ITEM_GLOVES) ||
|
||||
(nBase == BASE_ITEM_BRACER) ||
|
||||
(nBase == BASE_ITEM_CLOAK))
|
||||
(nBase == BASE_ITEM_CLOAK) ||
|
||||
(nBase == BASE_ITEM_CRAFTED_VIAL))
|
||||
)
|
||||
return FEAT_CRAFT_WONDROUS;
|
||||
|
||||
|
||||
@@ -75,6 +75,7 @@ void DeathlessFrenzyCheck(object oTarget);
|
||||
// * PRC Version of a Bioware function to disable include loops
|
||||
void PRCRemoveSpellEffects(int nSpell_ID, object oCaster, object oTarget);
|
||||
|
||||
|
||||
/**
|
||||
* Target is immune to gaze attacks
|
||||
*
|
||||
@@ -89,6 +90,9 @@ effect EffectGazeImmune();
|
||||
*/
|
||||
effect EffectDazzle();
|
||||
|
||||
//ebonfowl: adding this function to check if a target is already shaken
|
||||
int GetIsShaken(object oTarget);
|
||||
|
||||
/**
|
||||
* Shaken effect: -2 to attack, all skills and saving throws
|
||||
*
|
||||
@@ -177,13 +181,9 @@ effect EffectAbilityBasedSkillIncrease(int iAbility, int iIncrease = 1);
|
||||
*/
|
||||
effect EffectAbilityBasedSkillDecrease(int iAbility, int iDecrease = 1);
|
||||
|
||||
//ebonfowl: adding this function to check if a target is already shaken
|
||||
int GetIsShaken(object oTarget);
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Include section */
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
#include "prc_inc_castlvl" // get prc_racial_const, prc_inc_nwscript, prc_inc_newip
|
||||
#include "inc_epicspelldef"
|
||||
|
||||
@@ -269,6 +269,8 @@ object GetObjectToApplyNewEffect(string sTag, object oPC, int nStripEffects = TR
|
||||
SetCreatureAppearanceType(oWP, APPEARANCE_TYPE_INVISIBLE_HUMAN_MALE);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY), oWP);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectCutsceneGhost(), oWP);
|
||||
AssignCommand(oWP, ActionUseSkill(SKILL_HIDE, oWP));
|
||||
|
||||
}
|
||||
//remove previous effects
|
||||
if(nStripEffects)
|
||||
@@ -802,5 +804,11 @@ int GetIsShaken(object oTarget)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Forward declarations for size change effects
|
||||
// Implementations are in prc_inc_size
|
||||
effect EffectSizeChange(object oTarget, int nObjectType, int bEnlarge, int nChanges);
|
||||
void DelayedSetVisualTransform(int nExpectedGeneration, object oTarget, int nTransform, float fValue);
|
||||
void DelaySetVisualTransform(float fDelay, object oTarget, string sGenerationName, int nTransform, float fValue);
|
||||
|
||||
//:: Test void
|
||||
//:: void main() {}
|
||||
//::void main() {}
|
||||
@@ -4,6 +4,11 @@
|
||||
//:: PRC Options Conversation
|
||||
const int FEAT_OPTIONS_CONVERSATION = 2285;
|
||||
|
||||
//;; Builder Feats
|
||||
const int FEAT_ARCHETYPAL_FORM = 2918;
|
||||
const int FEAT_INTRINSIC_ARMOR = 25990;
|
||||
const int FEAT_INTRINSIC_WEAPON = 25991;
|
||||
|
||||
//:: Missing Bioware Feats
|
||||
const int FEAT_EPIC_PLANAR_TURNING = 854;
|
||||
|
||||
@@ -219,6 +224,9 @@ const int FEAT_MAGICAL_ARTISAN_CREATE_INFUSION = 25961;
|
||||
const int FEAT_PLANT_DEFIANCE = 25992;
|
||||
const int FEAT_PLANT_CONTROL = 25993;
|
||||
|
||||
//:: Lost Empires of Faerun feats
|
||||
const int FEAT_CRAFT_SCEPTER = 25962;
|
||||
const int FEAT_MAGICAL_ARTISAN_CRAFT_SCEPTER = 25963;
|
||||
|
||||
//:: Racial Feats
|
||||
const int FEAT_WEMIC_JUMP_8 = 4518;
|
||||
@@ -1314,6 +1322,7 @@ const int FEAT_SOMATIC_WEAPONRY = 5186;
|
||||
|
||||
// Forgotten Realms Campaign Setting
|
||||
const int FEAT_INSCRIBE_RUNE = 2462;
|
||||
const int EPIC_FEAT_INSCRIBE_EPIC_RUNES = 2549;
|
||||
|
||||
// Miniature Handbook
|
||||
const int FEAT_SHIELDMATE = 3258;
|
||||
@@ -3726,6 +3735,9 @@ const int FEAT_EPIC_ARTIFICER = 4072;
|
||||
//////////////// END INFUSIONS /////////////////
|
||||
//////////////////////////////////////////////////*/
|
||||
|
||||
//:: Monk
|
||||
const int FEAT_MONK_ABUNDANT_STEP = 2351;
|
||||
|
||||
//Justice of Weald and Woe
|
||||
const int FEAT_LUCKY_SHOT = 24021;
|
||||
|
||||
@@ -6275,6 +6287,7 @@ const int FEAT_DSONG_SPELLCASTING_NONE = 19592;
|
||||
const int FEAT_OLLAM_SPELLCASTING_NONE = 19593;
|
||||
|
||||
//:: PRC8 Hidden Talent Feats
|
||||
const int FEAT_HIDDEN_TALENT = 25900;
|
||||
const int FEAT_HIDDEN_TALENT_BIOFEEDBACK = 25901;
|
||||
const int FEAT_HIDDEN_TALENT_BITE_WOLF = 25902;
|
||||
const int FEAT_HIDDEN_TALENT_BOLT = 25903;
|
||||
|
||||
@@ -124,6 +124,8 @@ void ApplyBreath(struct breath BreathUsed, location lTargetArea, int bLinger = F
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
#include "prc_alterations"
|
||||
#include "prcsp_archmaginc"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Internal functions */
|
||||
|
||||
@@ -16,6 +16,7 @@ Command summary:
|
||||
*/
|
||||
|
||||
#include "prc_inc_chat"
|
||||
#include "inc_persist_loca"
|
||||
|
||||
const string CMD_POWER_ATTACK = "pow-erattack";
|
||||
|
||||
|
||||
@@ -380,6 +380,7 @@ int Vile_Feat(int iTypeWeap)
|
||||
case BASE_ITEM_BASTARDSWORD: return GetHasFeat(FEAT_VILE_MARTIAL_BASTARDSWORD);
|
||||
case BASE_ITEM_BATTLEAXE: return GetHasFeat(FEAT_VILE_MARTIAL_BATTLEAXE);
|
||||
case BASE_ITEM_CLUB: return GetHasFeat(FEAT_VILE_MARTIAL_CLUB);
|
||||
case BASE_ITEM_CRAFTED_SCEPTER: return GetHasFeat(FEAT_VILE_MARTIAL_CLUB);
|
||||
case BASE_ITEM_DAGGER: return GetHasFeat(FEAT_VILE_MARTIAL_DAGGER);
|
||||
case BASE_ITEM_DART: return GetHasFeat(FEAT_VILE_MARTIAL_DART);
|
||||
case BASE_ITEM_DIREMACE: return GetHasFeat(FEAT_VILE_MARTIAL_DIREMACE);
|
||||
@@ -426,7 +427,7 @@ int Vile_Feat(int iTypeWeap)
|
||||
GetHasFeat(FEAT_VILE_MARTIAL_RAPIER) ||
|
||||
GetHasFeat(FEAT_VILE_MARTIAL_ELVEN_THINBLADE));
|
||||
|
||||
case BASE_ITEM_ELVEN_COURTBLADE: return GetHasFeat(FEAT_VILE_MARTIAL_GREATSWORD ||
|
||||
case BASE_ITEM_ELVEN_COURTBLADE: return (GetHasFeat(FEAT_VILE_MARTIAL_GREATSWORD) ||
|
||||
GetHasFeat(FEAT_VILE_MARTIAL_ELVEN_COURTBLADE));
|
||||
|
||||
case BASE_ITEM_DOUBLE_SCIMITAR: return GetHasFeat(FEAT_VILE_MARTIAL_DBL_SCIMITAR);
|
||||
@@ -461,6 +462,7 @@ int GetSanctifedMartialFeat(int iTypeWeap)
|
||||
case BASE_ITEM_BASTARDSWORD: return FEAT_SANCTIFY_MARTIAL_BASTARDSWORD;
|
||||
case BASE_ITEM_BATTLEAXE: return FEAT_SANCTIFY_MARTIAL_BATTLEAXE;
|
||||
case BASE_ITEM_CLUB: return FEAT_SANCTIFY_MARTIAL_CLUB;
|
||||
case BASE_ITEM_CRAFTED_SCEPTER: return FEAT_SANCTIFY_MARTIAL_CLUB;
|
||||
case BASE_ITEM_DAGGER: return FEAT_SANCTIFY_MARTIAL_DAGGER;
|
||||
case BASE_ITEM_DART: return FEAT_SANCTIFY_MARTIAL_DART;
|
||||
case BASE_ITEM_DIREMACE: return FEAT_SANCTIFY_MARTIAL_DIREMACE;
|
||||
@@ -535,6 +537,7 @@ int Sanctify_Feat(int iTypeWeap)
|
||||
case BASE_ITEM_BASTARDSWORD: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_BASTARDSWORD);
|
||||
case BASE_ITEM_BATTLEAXE: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_BATTLEAXE);
|
||||
case BASE_ITEM_CLUB: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_CLUB);
|
||||
case BASE_ITEM_CRAFTED_SCEPTER: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_CLUB);
|
||||
case BASE_ITEM_DAGGER: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_DAGGER);
|
||||
case BASE_ITEM_DART: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_DART);
|
||||
case BASE_ITEM_DIREMACE: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_DIREMACE);
|
||||
|
||||
@@ -1082,7 +1082,7 @@ int GetIsTwoHandedMeleeWeaponType(int iWeaponType)
|
||||
case BASE_ITEM_HEAVYFLAIL: return TRUE;
|
||||
case BASE_ITEM_SCYTHE: return TRUE;
|
||||
case BASE_ITEM_QUARTERSTAFF: return TRUE;
|
||||
case BASE_ITEM_MAGICSTAFF: return TRUE;
|
||||
//case BASE_ITEM_MAGICSTAFF: return TRUE;
|
||||
case BASE_ITEM_ELVEN_COURTBLADE: return TRUE;
|
||||
case BASE_ITEM_MAUL: return TRUE;
|
||||
case BASE_ITEM_FALCHION: return TRUE;
|
||||
@@ -1141,8 +1141,8 @@ int GetIsSimpleWeaponType(int iWeaponType)
|
||||
case BASE_ITEM_CSLSHPRCWEAP: return 1;
|
||||
case BASE_ITEM_GLOVES: return 1;
|
||||
case BASE_ITEM_BRACER: return 1;
|
||||
|
||||
case BASE_ITEM_CLUB: return 2;
|
||||
case BASE_ITEM_CRAFTED_SCEPTER: return 1;
|
||||
|
||||
case BASE_ITEM_DAGGER: return 2;
|
||||
case BASE_ITEM_LIGHTMACE: return 2;
|
||||
case BASE_ITEM_SICKLE: return 2;
|
||||
@@ -1279,6 +1279,19 @@ struct WeaponFeat GetAllFeatsOfWeaponType(int iWeaponType)
|
||||
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_CLUB;
|
||||
break;
|
||||
}
|
||||
case BASE_ITEM_CRAFTED_SCEPTER: {
|
||||
sFeat.Focus = FEAT_WEAPON_FOCUS_CLUB;
|
||||
sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_CLUB;
|
||||
sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_CLUB;
|
||||
sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_CLUB;
|
||||
sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_CLUB;
|
||||
sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_CLUB;
|
||||
sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_CLUB;
|
||||
sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_CLUB;
|
||||
sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_CLUB;
|
||||
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_CLUB;
|
||||
break;
|
||||
}
|
||||
case BASE_ITEM_DAGGER: {
|
||||
sFeat.Focus = FEAT_WEAPON_FOCUS_DAGGER;
|
||||
sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_DAGGER;
|
||||
@@ -8090,7 +8103,12 @@ void AttackLoopLogic(object oDefender, object oAttacker,
|
||||
if (DEBUG) DoDebug("entered AttackLoopLogic: bFirstAttack = " + IntToString(bFirstAttack) + ", cleave = " + IntToString(bIsCleaveAttack) + ", current action = " + GetActionName(iAction));
|
||||
if (DEBUG) DoDebug("AttackLoopLogic: iMainAttacks = " + IntToString(iMainAttacks) + ", iOffHandAttacks = " + IntToString(iOffHandAttacks) + ", iBonusAttacks = " + IntToString(iBonusAttacks));
|
||||
|
||||
int bIsRangedAttack = sAttackVars.bIsRangedWeapon || sAttackVars.iTouchAttackType == TOUCH_ATTACK_RANGED_SPELL || sAttackVars.iTouchAttackType == TOUCH_ATTACK_RANGED;
|
||||
//int bIsRangedAttack = sAttackVars.bIsRangedWeapon || sAttackVars.iTouchAttackType == TOUCH_ATTACK_RANGED_SPELL || sAttackVars.iTouchAttackType == TOUCH_ATTACK_RANGED;
|
||||
|
||||
int bIsRangedAttack = sAttackVars.bIsRangedWeapon ||
|
||||
sAttackVars.iTouchAttackType == TOUCH_ATTACK_RANGED_SPELL ||
|
||||
sAttackVars.iTouchAttackType == TOUCH_ATTACK_RANGED ||
|
||||
GetLocalInt(oAttacker, "WhirlingBlade");
|
||||
|
||||
// check for valid target etc., but only if it is not a cleave or circle kick (in this case we checked all of this before)
|
||||
if (!bIsCleaveAttack)
|
||||
|
||||
@@ -273,6 +273,7 @@ void TigerBlooded(object oInitiator, object oTarget);
|
||||
|
||||
#include "prc_inc_combat"
|
||||
#include "prc_inc_sp_tch"
|
||||
#include "prc_feat_const"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Internal functions */
|
||||
@@ -1321,7 +1322,29 @@ int DoTrip(object oPC, object oTarget, int nExtraBonus, int nGenerateAoO = TRUE,
|
||||
DelayCommand(0.0, PerformAttack(oTarget, oPC, eNone, 0.0, 0, 0, 0, "Improved Trip Free Attack Hit", "Improved Trip Free Attack Miss"));
|
||||
}
|
||||
}
|
||||
else // If you fail, enemy gets a counter trip attempt, using Strength
|
||||
else // If you fail, enemy gets a counter trip attempt, using Strength
|
||||
{
|
||||
if(!nCounterTrip)
|
||||
{
|
||||
nTargetStat = GetAbilityModifier(ABILITY_STRENGTH, oTarget) + GetCombatMoveCheckBonus(oTarget, COMBAT_MOVE_TRIP, FALSE, TRUE);
|
||||
FloatingTextStringOnCreature("You have failed on your Trip attempt",oPC, FALSE);
|
||||
// Roll counter trip attempt
|
||||
nTargetCheck = nTargetStat + nTargetBonus + d20();
|
||||
nPCCheck = nPCStat + nPCBonus + d20();
|
||||
// If counters aren't allowed, don't knock em down
|
||||
// Its down here to allow the text message to go through
|
||||
SendMessageToPC(oPC, "Enemy Counter Trip Check: "+IntToString(nPCCheck)+" vs "+IntToString(nTargetCheck));
|
||||
|
||||
SetLocalInt(oPC, "TripDifference", nTargetCheck - nPCCheck);
|
||||
DelayCommand(2.0, DeleteLocalInt(oPC, "TripDifference"));
|
||||
}
|
||||
if (nTargetCheck >= nPCCheck && nCounterTrip)
|
||||
{
|
||||
// Knock em down
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oPC, 6.0);
|
||||
}
|
||||
}
|
||||
/* else // If you fail, enemy gets a counter trip attempt, using Strength
|
||||
{
|
||||
nTargetStat = GetAbilityModifier(ABILITY_STRENGTH, oTarget) + GetCombatMoveCheckBonus(oTarget, COMBAT_MOVE_TRIP, FALSE, TRUE);
|
||||
FloatingTextStringOnCreature("You have failed on your Trip attempt",oPC, FALSE);
|
||||
@@ -1338,7 +1361,7 @@ int DoTrip(object oPC, object oTarget, int nExtraBonus, int nGenerateAoO = TRUE,
|
||||
}
|
||||
SetLocalInt(oPC, "TripDifference", nTargetCheck - nPCCheck);
|
||||
DelayCommand(2.0, DeleteLocalInt(oPC, "TripDifference"));
|
||||
}
|
||||
} */
|
||||
}
|
||||
else
|
||||
FloatingTextStringOnCreature("You have failed on your Trip attempt",oPC, FALSE);
|
||||
@@ -1941,10 +1964,21 @@ void TigerBlooded(object oInitiator, object oTarget)
|
||||
int DoDisarm(object oPC, object oTarget, int nExtraBonus = 0, int nGenerateAoO = TRUE, int nCounter = TRUE)
|
||||
{
|
||||
object oTargetWep = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
|
||||
|
||||
int bNoDisarm = GetHasFeat(FEAT_INTRINSIC_WEAPON, oTarget);
|
||||
|
||||
string sName = GetName(oTarget);
|
||||
|
||||
if(bNoDisarm)
|
||||
{
|
||||
FloatingTextStringOnCreature(sName+" is wielding an intrinsic weapon", oPC, FALSE);
|
||||
AssignCommand(oPC, ActionAttack(oTarget));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!GetIsObjectValid(oTargetWep) || GetPlotFlag(oTargetWep) || (!GetIsCreatureDisarmable(oTarget) && !GetPRCSwitch(PRC_PNP_DISARM)) || GetLocalInt(oTarget, "TigerFangDisarm"))
|
||||
{
|
||||
FloatingTextStringOnCreature("Target is not a legal target", oPC, FALSE);
|
||||
FloatingTextStringOnCreature(sName+" is not a legal target", oPC, FALSE);
|
||||
AssignCommand(oPC, ActionAttack(oTarget));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -133,6 +133,7 @@ const int METAMAGIC_QUICKEN_LEVEL = 4;
|
||||
#include "prc_inc_damage"
|
||||
#include "prc_inc_sb_const" // Spell Book Constants
|
||||
#include "x0_i0_position"
|
||||
#include "inc_newspellbook"
|
||||
|
||||
/*
|
||||
access to prc_inc_nwscript via prc_inc_damage
|
||||
|
||||
@@ -169,8 +169,8 @@ int GetSubschoolFlags(int nSpellID);
|
||||
/* Includes */
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
#include "inc_2dacache" // already has access via inc_utility
|
||||
//#include "inc_utility"
|
||||
#include "inc_2dacache"
|
||||
#include "inc_utility"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Function definitions */
|
||||
|
||||
@@ -49,6 +49,8 @@ const int BRILLIANCE_SLOT_3 = 3919;
|
||||
//////////////////////////////////////////////////
|
||||
/* Function definitions */
|
||||
//////////////////////////////////////////////////
|
||||
void TriggerInspiration(object oPC, int nCombat);
|
||||
|
||||
|
||||
void PrepareArcDilSpell(object oPC, int nSpell)
|
||||
{
|
||||
@@ -188,7 +190,8 @@ void SetInspiration(object oPC)
|
||||
for(i = FEAT_FONT_INSPIRATION_1; i <= FEAT_FONT_INSPIRATION_10; i++)
|
||||
if(GetHasFeat(i, oPC)) nFont++;
|
||||
|
||||
nInspiration += nFont * (1 + nFont + 1) / 2;
|
||||
//nInspiration += nFont * (1 + nFont + 1) / 2;
|
||||
nInspiration += nFont * (nFont + 1) / 2;
|
||||
SetLocalInt(oPC, "InspirationPool", nInspiration);
|
||||
FloatingTextStringOnCreature("Encounter begins with "+IntToString(nInspiration)+" inspiration", oPC, FALSE);
|
||||
}
|
||||
@@ -201,6 +204,8 @@ void ClearInspiration(object oPC)
|
||||
|
||||
int ExpendInspiration(object oPC, int nCost)
|
||||
{
|
||||
if (nCost <= 0) return FALSE;
|
||||
|
||||
int nInspiration = GetLocalInt(oPC, "InspirationPool");
|
||||
if (nInspiration >= nCost)
|
||||
{
|
||||
@@ -261,6 +266,21 @@ void FactotumTriggerAbil(object oPC, int nAbil)
|
||||
IPSafeAddItemProperty(oSkin, ipIP, 60.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
||||
}
|
||||
|
||||
void TriggerInspiration(object oPC, int nCombat)
|
||||
{
|
||||
SetLocalInt(oPC, "InspirationHBRunning", TRUE);
|
||||
DelayCommand(0.249, DeleteLocalInt(oPC, "InspirationHBRunning"));
|
||||
int nCurrent = GetIsInCombat(oPC);
|
||||
// We just entered combat
|
||||
if (nCurrent == TRUE && nCombat == FALSE)
|
||||
SetInspiration(oPC);
|
||||
else if (nCurrent == FALSE && nCombat == TRUE) // Just left combat
|
||||
ClearInspiration(oPC);
|
||||
|
||||
DelayCommand(0.25, TriggerInspiration(oPC, nCurrent));
|
||||
}
|
||||
|
||||
|
||||
/*void AddCunningBrillianceAbility(object oPC, int nAbil)
|
||||
{
|
||||
if (DEBUG) DoDebug("AddCunningBrillianceAbility "+IntToString(nAbil));
|
||||
|
||||
@@ -23,11 +23,14 @@ const int FEAT_TYPE_IMPROVED_CRITICAL = 5;
|
||||
const int FEAT_TYPE_OVERWHELMING_CRITICAL = 6;
|
||||
const int FEAT_TYPE_DEVASTATING_CRITICAL = 7;
|
||||
const int FEAT_TYPE_WEAPON_OF_CHOICE = 8;
|
||||
const int FEAT_TYPE_WEAPON_PROFICIENCY = 9;
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Function prototypes */
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
int GetProficiencyFeatOfWeaponType(int iWeaponType);
|
||||
|
||||
/**
|
||||
* Returns the appropriate weapon feat given a weapon type.
|
||||
*
|
||||
@@ -210,10 +213,86 @@ int GetFeatOfWeaponType(int iWeaponType, int iFeatType)
|
||||
case FEAT_TYPE_OVERWHELMING_CRITICAL: return GetOverwhelmingCriticalFeatOfWeaponType(iWeaponType);
|
||||
case FEAT_TYPE_DEVASTATING_CRITICAL: return GetDevastatingCriticalFeatOfWeaponType(iWeaponType);
|
||||
case FEAT_TYPE_WEAPON_OF_CHOICE: return GetWeaponOfChoiceFeatOfWeaponType(iWeaponType);
|
||||
case FEAT_TYPE_WEAPON_PROFICIENCY: return GetProficiencyFeatOfWeaponType(iWeaponType);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int GetProficiencyFeatOfWeaponType(int iWeaponType)
|
||||
{
|
||||
switch(iWeaponType)
|
||||
{
|
||||
case BASE_ITEM_CBLUDGWEAPON:
|
||||
case BASE_ITEM_CPIERCWEAPON:
|
||||
case BASE_ITEM_CSLASHWEAPON:
|
||||
case BASE_ITEM_CSLSHPRCWEAP: return FEAT_WEAPON_PROFICIENCY_CREATURE;
|
||||
case BASE_ITEM_INVALID: return FEAT_IMPROVED_UNARMED_STRIKE;
|
||||
|
||||
case BASE_ITEM_BASTARDSWORD: return FEAT_WEAPON_PROFICIENCY_BASTARD_SWORD;
|
||||
case BASE_ITEM_BATTLEAXE: return FEAT_WEAPON_PROFICIENCY_BATTLEAXE;
|
||||
case BASE_ITEM_CLUB: return FEAT_WEAPON_PROFICIENCY_CLUB;
|
||||
case BASE_ITEM_CRAFTED_SCEPTER: return FEAT_WEAPON_PROFICIENCY_CLUB;
|
||||
case BASE_ITEM_DAGGER: return FEAT_WEAPON_PROFICIENCY_DAGGER;
|
||||
case BASE_ITEM_DART: return FEAT_WEAPON_PROFICIENCY_DART;
|
||||
case BASE_ITEM_DIREMACE: return FEAT_WEAPON_PROFICIENCY_DIRE_MACE;
|
||||
case BASE_ITEM_DOUBLEAXE: return FEAT_WEAPON_PROFICIENCY_DOUBLE_AXE;
|
||||
case BASE_ITEM_DWARVENWARAXE: return FEAT_WEAPON_PROFICIENCY_DWARVEN_WARAXE;
|
||||
case BASE_ITEM_GREATAXE: return FEAT_WEAPON_PROFICIENCY_GREATAXE;
|
||||
case BASE_ITEM_GREATSWORD: return FEAT_WEAPON_PROFICIENCY_GREATSWORD;
|
||||
case BASE_ITEM_HALBERD: return FEAT_WEAPON_PROFICIENCY_HALBERD;
|
||||
case BASE_ITEM_HANDAXE: return FEAT_WEAPON_PROFICIENCY_HANDAXE;
|
||||
case BASE_ITEM_HEAVYCROSSBOW: return FEAT_WEAPON_PROFICIENCY_HEAVY_XBOW;
|
||||
case BASE_ITEM_HEAVYFLAIL: return FEAT_WEAPON_PROFICIENCY_HEAVY_FLAIL;
|
||||
case BASE_ITEM_KAMA: return FEAT_WEAPON_PROFICIENCY_KAMA;
|
||||
case BASE_ITEM_KATANA: return FEAT_WEAPON_PROFICIENCY_KATANA;
|
||||
case BASE_ITEM_KUKRI: return FEAT_WEAPON_PROFICIENCY_KUKRI;
|
||||
case BASE_ITEM_LIGHTCROSSBOW: return FEAT_WEAPON_PROFICIENCY_LIGHT_XBOW;
|
||||
case BASE_ITEM_LIGHTFLAIL: return FEAT_WEAPON_PROFICIENCY_LIGHT_FLAIL;
|
||||
case BASE_ITEM_LIGHTHAMMER: return FEAT_WEAPON_PROFICIENCY_LIGHT_HAMMER;
|
||||
case BASE_ITEM_LIGHTMACE: return FEAT_WEAPON_PROFICIENCY_LIGHT_MACE;
|
||||
case BASE_ITEM_LONGBOW: return FEAT_WEAPON_PROFICIENCY_LONGBOW;
|
||||
case BASE_ITEM_LONGSWORD: return FEAT_WEAPON_PROFICIENCY_LONGSWORD;
|
||||
case BASE_ITEM_MORNINGSTAR: return FEAT_WEAPON_PROFICIENCY_MORNINGSTAR;
|
||||
case BASE_ITEM_QUARTERSTAFF: return FEAT_WEAPON_PROFICIENCY_QUARTERSTAFF;
|
||||
case BASE_ITEM_MAGICSTAFF: return FEAT_WEAPON_PROFICIENCY_QUARTERSTAFF;
|
||||
case BASE_ITEM_RAPIER: return FEAT_WEAPON_PROFICIENCY_RAPIER;
|
||||
case BASE_ITEM_SCIMITAR: return FEAT_WEAPON_PROFICIENCY_SCIMITAR;
|
||||
case BASE_ITEM_SCYTHE: return FEAT_WEAPON_PROFICIENCY_SCYTHE;
|
||||
case BASE_ITEM_SHORTBOW: return FEAT_WEAPON_PROFICIENCY_SHORTBOW;
|
||||
case BASE_ITEM_SHORTSPEAR: return FEAT_WEAPON_PROFICIENCY_SHORTSPEAR;
|
||||
case BASE_ITEM_SHORTSWORD: return FEAT_WEAPON_PROFICIENCY_SHORTSWORD;
|
||||
case BASE_ITEM_SHURIKEN: return FEAT_WEAPON_PROFICIENCY_SHURIKEN;
|
||||
case BASE_ITEM_SICKLE: return FEAT_WEAPON_PROFICIENCY_SICKLE;
|
||||
case BASE_ITEM_SLING: return FEAT_WEAPON_PROFICIENCY_SLING;
|
||||
case BASE_ITEM_THROWINGAXE: return FEAT_WEAPON_PROFICIENCY_THROWING_AXE;
|
||||
case BASE_ITEM_TRIDENT: return FEAT_WEAPON_PROFICIENCY_TRIDENT;
|
||||
case BASE_ITEM_TWOBLADEDSWORD: return FEAT_WEAPON_PROFICIENCY_TWO_BLADED_SWORD;
|
||||
case BASE_ITEM_WARHAMMER: return FEAT_WEAPON_PROFICIENCY_WARHAMMER;
|
||||
case BASE_ITEM_WHIP: return FEAT_WEAPON_PROFICIENCY_WHIP;
|
||||
|
||||
//:: new item types
|
||||
case BASE_ITEM_DOUBLE_SCIMITAR: return FEAT_WEAPON_PROFICIENCY_DOUBLE_SCIMITAR;
|
||||
case BASE_ITEM_EAGLE_CLAW: return FEAT_WEAPON_PROFICIENCY_EAGLE_CLAW;
|
||||
case BASE_ITEM_ELVEN_COURTBLADE: return FEAT_WEAPON_PROFICIENCY_ELVEN_COURTBLADE;
|
||||
case BASE_ITEM_ELVEN_LIGHTBLADE: return FEAT_WEAPON_PROFICIENCY_ELVEN_LIGHTBLADE;
|
||||
case BASE_ITEM_ELVEN_THINBLADE: return FEAT_WEAPON_PROFICIENCY_ELVEN_THINBLADE;
|
||||
case BASE_ITEM_FALCHION: return FEAT_WEAPON_PROFICIENCY_FALCHION;
|
||||
case BASE_ITEM_GOAD: return FEAT_WEAPON_PROFICIENCY_GOAD;
|
||||
case BASE_ITEM_HEAVY_MACE: return FEAT_WEAPON_PROFICIENCY_HEAVY_MACE;
|
||||
case BASE_ITEM_HEAVY_PICK: return FEAT_WEAPON_PROFICIENCY_HEAVY_PICK;
|
||||
case BASE_ITEM_KATAR: return FEAT_WEAPON_PROFICIENCY_KATAR;
|
||||
case BASE_ITEM_LIGHT_LANCE: return FEAT_WEAPON_PROFICIENCY_LIGHT_LANCE;
|
||||
case BASE_ITEM_LIGHT_PICK: return FEAT_WEAPON_PROFICIENCY_LIGHT_PICK;
|
||||
case BASE_ITEM_MAUL: return FEAT_WEAPON_PROFICIENCY_MAUL;
|
||||
case BASE_ITEM_NUNCHAKU: return FEAT_WEAPON_PROFICIENCY_NUNCHAKU;
|
||||
case BASE_ITEM_SAI: return FEAT_WEAPON_PROFICIENCY_SAI;
|
||||
case BASE_ITEM_SAP: return FEAT_WEAPON_PROFICIENCY_SAP;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int GetFocusFeatOfWeaponType(int iWeaponType)
|
||||
{
|
||||
switch(iWeaponType)
|
||||
@@ -226,6 +305,7 @@ int GetFocusFeatOfWeaponType(int iWeaponType)
|
||||
case BASE_ITEM_BASTARDSWORD: return FEAT_WEAPON_FOCUS_BASTARD_SWORD;
|
||||
case BASE_ITEM_BATTLEAXE: return FEAT_WEAPON_FOCUS_BATTLE_AXE;
|
||||
case BASE_ITEM_CLUB: return FEAT_WEAPON_FOCUS_CLUB;
|
||||
case BASE_ITEM_CRAFTED_SCEPTER: return FEAT_WEAPON_FOCUS_CLUB;
|
||||
case BASE_ITEM_DAGGER: return FEAT_WEAPON_FOCUS_DAGGER;
|
||||
case BASE_ITEM_DART: return FEAT_WEAPON_FOCUS_DART;
|
||||
case BASE_ITEM_DIREMACE: return FEAT_WEAPON_FOCUS_DIRE_MACE;
|
||||
@@ -297,6 +377,7 @@ int GetSpecializationFeatOfWeaponType(int iWeaponType)
|
||||
case BASE_ITEM_BASTARDSWORD: return FEAT_WEAPON_SPECIALIZATION_BASTARD_SWORD;
|
||||
case BASE_ITEM_BATTLEAXE: return FEAT_WEAPON_SPECIALIZATION_BATTLE_AXE;
|
||||
case BASE_ITEM_CLUB: return FEAT_WEAPON_SPECIALIZATION_CLUB;
|
||||
case BASE_ITEM_CRAFTED_SCEPTER: return FEAT_WEAPON_SPECIALIZATION_CLUB;
|
||||
case BASE_ITEM_DAGGER: return FEAT_WEAPON_SPECIALIZATION_DAGGER;
|
||||
case BASE_ITEM_DART: return FEAT_WEAPON_SPECIALIZATION_DART;
|
||||
case BASE_ITEM_DIREMACE: return FEAT_WEAPON_SPECIALIZATION_DIRE_MACE;
|
||||
@@ -368,6 +449,7 @@ int GetEpicFocusFeatOfWeaponType(int iWeaponType)
|
||||
case BASE_ITEM_BASTARDSWORD: return FEAT_EPIC_WEAPON_FOCUS_BASTARDSWORD;
|
||||
case BASE_ITEM_BATTLEAXE: return FEAT_EPIC_WEAPON_FOCUS_BATTLEAXE;
|
||||
case BASE_ITEM_CLUB: return FEAT_EPIC_WEAPON_FOCUS_CLUB;
|
||||
case BASE_ITEM_CRAFTED_SCEPTER: return FEAT_EPIC_WEAPON_FOCUS_CLUB;
|
||||
case BASE_ITEM_DAGGER: return FEAT_EPIC_WEAPON_FOCUS_DAGGER;
|
||||
case BASE_ITEM_DART: return FEAT_EPIC_WEAPON_FOCUS_DART;
|
||||
case BASE_ITEM_DIREMACE: return FEAT_EPIC_WEAPON_FOCUS_DIREMACE;
|
||||
@@ -439,6 +521,7 @@ int GetEpicSpecializationFeatOfWeaponType(int iWeaponType)
|
||||
case BASE_ITEM_BASTARDSWORD: return FEAT_EPIC_WEAPON_SPECIALIZATION_BASTARDSWORD;
|
||||
case BASE_ITEM_BATTLEAXE: return FEAT_EPIC_WEAPON_SPECIALIZATION_BATTLEAXE;
|
||||
case BASE_ITEM_CLUB: return FEAT_EPIC_WEAPON_SPECIALIZATION_CLUB;
|
||||
case BASE_ITEM_CRAFTED_SCEPTER: return FEAT_EPIC_WEAPON_SPECIALIZATION_CLUB;
|
||||
case BASE_ITEM_DAGGER: return FEAT_EPIC_WEAPON_SPECIALIZATION_DAGGER;
|
||||
case BASE_ITEM_DART: return FEAT_EPIC_WEAPON_SPECIALIZATION_DART;
|
||||
case BASE_ITEM_DIREMACE: return FEAT_EPIC_WEAPON_SPECIALIZATION_DIREMACE;
|
||||
@@ -510,6 +593,7 @@ int GetImprovedCriticalFeatOfWeaponType(int iWeaponType)
|
||||
case BASE_ITEM_BASTARDSWORD: return FEAT_IMPROVED_CRITICAL_BASTARD_SWORD;
|
||||
case BASE_ITEM_BATTLEAXE: return FEAT_IMPROVED_CRITICAL_BATTLE_AXE;
|
||||
case BASE_ITEM_CLUB: return FEAT_IMPROVED_CRITICAL_CLUB;
|
||||
case BASE_ITEM_CRAFTED_SCEPTER: return FEAT_IMPROVED_CRITICAL_CLUB;
|
||||
case BASE_ITEM_DAGGER: return FEAT_IMPROVED_CRITICAL_DAGGER;
|
||||
case BASE_ITEM_DART: return FEAT_IMPROVED_CRITICAL_DART;
|
||||
case BASE_ITEM_DIREMACE: return FEAT_IMPROVED_CRITICAL_DIRE_MACE;
|
||||
@@ -581,6 +665,7 @@ int GetOverwhelmingCriticalFeatOfWeaponType(int iWeaponType)
|
||||
case BASE_ITEM_BASTARDSWORD: return FEAT_EPIC_OVERWHELMING_CRITICAL_BASTARDSWORD;
|
||||
case BASE_ITEM_BATTLEAXE: return FEAT_EPIC_OVERWHELMING_CRITICAL_BATTLEAXE;
|
||||
case BASE_ITEM_CLUB: return FEAT_EPIC_OVERWHELMING_CRITICAL_CLUB;
|
||||
case BASE_ITEM_CRAFTED_SCEPTER: return FEAT_EPIC_OVERWHELMING_CRITICAL_CLUB;
|
||||
case BASE_ITEM_DAGGER: return FEAT_EPIC_OVERWHELMING_CRITICAL_DAGGER;
|
||||
case BASE_ITEM_DART: return FEAT_EPIC_OVERWHELMING_CRITICAL_DART;
|
||||
case BASE_ITEM_DIREMACE: return FEAT_EPIC_OVERWHELMING_CRITICAL_DIREMACE;
|
||||
@@ -652,6 +737,7 @@ int GetDevastatingCriticalFeatOfWeaponType(int iWeaponType)
|
||||
case BASE_ITEM_BASTARDSWORD: return FEAT_EPIC_DEVASTATING_CRITICAL_BASTARDSWORD;
|
||||
case BASE_ITEM_BATTLEAXE: return FEAT_EPIC_DEVASTATING_CRITICAL_BATTLEAXE;
|
||||
case BASE_ITEM_CLUB: return FEAT_EPIC_DEVASTATING_CRITICAL_CLUB;
|
||||
case BASE_ITEM_CRAFTED_SCEPTER: return FEAT_EPIC_DEVASTATING_CRITICAL_CLUB;
|
||||
case BASE_ITEM_DAGGER: return FEAT_EPIC_DEVASTATING_CRITICAL_DAGGER;
|
||||
case BASE_ITEM_DART: return FEAT_EPIC_DEVASTATING_CRITICAL_DART;
|
||||
case BASE_ITEM_DIREMACE: return FEAT_EPIC_DEVASTATING_CRITICAL_DIREMACE;
|
||||
@@ -718,6 +804,7 @@ int GetWeaponOfChoiceFeatOfWeaponType(int iWeaponType)
|
||||
case BASE_ITEM_BASTARDSWORD: return FEAT_WEAPON_OF_CHOICE_BASTARDSWORD;
|
||||
case BASE_ITEM_BATTLEAXE: return FEAT_WEAPON_OF_CHOICE_BATTLEAXE;
|
||||
case BASE_ITEM_CLUB: return FEAT_WEAPON_OF_CHOICE_CLUB;
|
||||
case BASE_ITEM_CRAFTED_SCEPTER: return FEAT_WEAPON_OF_CHOICE_CLUB;
|
||||
case BASE_ITEM_DAGGER: return FEAT_WEAPON_OF_CHOICE_DAGGER;
|
||||
case BASE_ITEM_DIREMACE: return FEAT_WEAPON_OF_CHOICE_DIREMACE;
|
||||
case BASE_ITEM_DOUBLEAXE: return FEAT_WEAPON_OF_CHOICE_DOUBLEAXE;
|
||||
@@ -844,4 +931,6 @@ int PRCLargeWeaponCheck(int iBaseType, int nSize)
|
||||
}
|
||||
}
|
||||
return sTest != "" && sTest != IntToString(nSize);
|
||||
}
|
||||
}
|
||||
|
||||
//::void main(){}
|
||||
@@ -431,7 +431,7 @@ void EvalPRCFeats(object oPC)
|
||||
ExecuteScript("moi_events", oPC);
|
||||
|
||||
if (GetIsBinder(oPC))
|
||||
ExecuteScript("bnd_events", oPC);
|
||||
ExecuteScript("bnd_events", oPC);
|
||||
|
||||
// check if character with crafting feat has appropriate base item in her inventory
|
||||
// x - moved from prc_onhb_indiv.nss
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
#include "prc_feat_const"
|
||||
#include "inc_item_props"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
const string BRUTAL_STRIKE_MODE_VAR = "PRC_BRUTAL_STRIKE_MODE";
|
||||
|
||||
|
||||
@@ -36,6 +36,8 @@ void CheckForPnPHolyAvenger(object oItem);
|
||||
|
||||
#include "inc_utility"
|
||||
#include "prc_inc_newip"
|
||||
#include "prc_inc_castlvl"
|
||||
#include "inc_newspellbook"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,68 @@
|
||||
//:: prc_inc_nat_hb
|
||||
//::
|
||||
//:: void main(){}
|
||||
|
||||
|
||||
void DoNaturalWeaponHB(object oPC = OBJECT_SELF);
|
||||
|
||||
#include "prc_inc_combat"
|
||||
#include "prc_inc_template"
|
||||
|
||||
object GetProperTarget(object oPC, object oTarget)
|
||||
/**
|
||||
* Finds a valid enemy target in melee range when the original target is invalid.
|
||||
* Now includes input validation, LOS checks, configurable radius, and target priority.
|
||||
*
|
||||
* @param oPC The creature seeking a new target
|
||||
* @param oTarget The original (invalid) target
|
||||
* @param fRadius Search radius in meters (optional, defaults to melee range)
|
||||
* @return A valid enemy target or OBJECT_INVALID if none found
|
||||
*/
|
||||
object GetProperTarget(object oPC, object oTarget, float fRadius = MELEE_RANGE_METERS)
|
||||
{
|
||||
// Input validation
|
||||
if(!GetIsObjectValid(oPC))
|
||||
{
|
||||
DoDebug("GetProperTarget(): Invalid oPC parameter");
|
||||
return OBJECT_INVALID;
|
||||
}
|
||||
|
||||
// Use target list system for better target selection
|
||||
PurgeTargetList(oPC);
|
||||
|
||||
location lPC = GetLocation(oPC);
|
||||
object oTest = MyFirstObjectInShape(SHAPE_SPHERE, fRadius, lPC, TRUE, OBJECT_TYPE_CREATURE);
|
||||
|
||||
while(GetIsObjectValid(oTest))
|
||||
{
|
||||
// Basic validation checks
|
||||
if(oTest != oPC && // Not self
|
||||
GetIsEnemy(oPC, oTest) && // Is enemy
|
||||
GetIsInMeleeRange(oPC, oTest) && // In melee range
|
||||
!GetIsDead(oTest) && // Is alive
|
||||
LineOfSightObject(oPC, oTest)) // Has line of sight
|
||||
{
|
||||
// Add to target list with priority based on distance (nearest first)
|
||||
AddToTargetList(oTest, oPC, INSERTION_BIAS_DISTANCE, FALSE);
|
||||
}
|
||||
|
||||
oTest = MyNextObjectInShape(SHAPE_SPHERE, fRadius, lPC, TRUE, OBJECT_TYPE_CREATURE);
|
||||
}
|
||||
|
||||
// Get the highest priority target (nearest enemy)
|
||||
object oBestTarget = GetTargetListHead(oPC);
|
||||
PurgeTargetList(oPC);
|
||||
|
||||
if(GetIsObjectValid(oBestTarget))
|
||||
{
|
||||
DoDebug("GetProperTarget(): Selected target " + GetName(oBestTarget) +
|
||||
" for " + GetName(oPC));
|
||||
return oBestTarget;
|
||||
}
|
||||
|
||||
// No valid target found
|
||||
DoDebug("GetProperTarget(): No valid target found for " + GetName(oPC));
|
||||
return OBJECT_INVALID;
|
||||
}
|
||||
/* object GetProperTarget(object oPC, object oTarget)
|
||||
{
|
||||
location lTarget = GetLocation(oPC);
|
||||
// Use the function to get the closest creature as a target
|
||||
@@ -21,7 +80,7 @@ object GetProperTarget(object oPC, object oTarget)
|
||||
}
|
||||
|
||||
return oTarget;
|
||||
}
|
||||
} */
|
||||
|
||||
void DoNaturalAttack(object oWeapon)
|
||||
{
|
||||
@@ -289,59 +348,72 @@ void DoOverflowOnhandAttack(int nAttackMod)
|
||||
);
|
||||
}
|
||||
|
||||
void DoNaturalWeaponHB(object oPC = OBJECT_SELF)
|
||||
/* void DoNaturalWeaponHB(object oPC = OBJECT_SELF)
|
||||
{
|
||||
//not in combat, abort
|
||||
if(!GetIsInCombat(oPC))
|
||||
return;
|
||||
|
||||
// if(DEBUG) DoDebug("entered DoNaturalWeaponHB");
|
||||
if(DEBUG) DoDebug("prc_inc_nat_hb: entered DoNaturalWeaponHB");
|
||||
|
||||
float fDelay = 0.1 + IntToFloat(Random(10))/100.0;
|
||||
|
||||
//no natural weapons, abort
|
||||
//in a different form, abort for now fix it later
|
||||
if(array_exists(oPC, ARRAY_NAT_SEC_WEAP_RESREF)
|
||||
&& !GetIsPolyMorphedOrShifted(oPC))
|
||||
if(array_exists(oPC, ARRAY_NAT_SEC_WEAP_RESREF)
|
||||
&& !GetIsPolyMorphedOrShifted(oPC))
|
||||
{
|
||||
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))
|
||||
{
|
||||
// DoDebug("DoNaturalWeaponHB: creature has natural secondary weapons");
|
||||
UpdateSecondaryWeaponSizes(oPC);
|
||||
int i;
|
||||
while(i < array_get_size(oPC, ARRAY_NAT_SEC_WEAP_RESREF))
|
||||
string sResRef = array_get_string(oPC, ARRAY_NAT_SEC_WEAP_RESREF, i);
|
||||
if(sResRef != "")
|
||||
{
|
||||
//get the resref to use
|
||||
string sResRef = array_get_string(oPC, ARRAY_NAT_SEC_WEAP_RESREF, i);
|
||||
//if null, move to next
|
||||
if(sResRef != "")
|
||||
// Get stored weapon object, or create if doesn't exist
|
||||
object oWeapon = GetLocalObject(oPC, "NAT_SEC_WEAP_" + sResRef);
|
||||
|
||||
if(!GetIsObjectValid(oWeapon))
|
||||
{
|
||||
//get the created item
|
||||
object oWeapon = GetObjectByTag(sResRef);
|
||||
DoDebug("prc_inc_nat_hb >> DoNaturalWeaponHB: creating and storing creature weapon " + sResRef);
|
||||
oWeapon = CreateItemOnObject(sResRef, oPC);
|
||||
|
||||
if(!GetIsObjectValid(oWeapon))
|
||||
{
|
||||
object oLimbo = GetObjectByTag("HEARTOFCHAOS");
|
||||
location lLimbo = GetLocation(oLimbo);
|
||||
if(!GetIsObjectValid(oLimbo))
|
||||
lLimbo = GetStartingLocation();
|
||||
oWeapon = CreateObject(OBJECT_TYPE_ITEM, sResRef, lLimbo);
|
||||
DoDebug("prc_inc_nat_hb >> DoNaturalWeaponHB: ERROR - CreateItemOnObject FAILED for " + sResRef);
|
||||
}
|
||||
else
|
||||
{
|
||||
DoDebug("prc_inc_nat_hb >> DoNaturalWeaponHB: SUCCESS - weapon created, tag=" + GetTag(oWeapon) + ", name=" + GetName(oWeapon));
|
||||
SetIdentified(oWeapon, TRUE);
|
||||
SetLocalObject(oPC, "NAT_SEC_WEAP_" + sResRef, oWeapon);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DoDebug("prc_inc_nat_hb >> DoNaturalWeaponHB: using stored creature weapon object");
|
||||
}
|
||||
|
||||
// DoDebug(COLOR_WHITE + "DoNaturalWeaponHB: scheduling a secondary natural attack with "+GetName(oWeapon)+" at delay "+FloatToString(fDelay));
|
||||
//do the attack within a delay
|
||||
/*
|
||||
// motu99: commented this out; AssignCommand ist not needed, because OBJECT_SELF is oPC - using AssignCommand will only degrade performance
|
||||
AssignCommand(oPC, DelayCommand(fDelay, DoNaturalAttack(oWeapon)));
|
||||
*/
|
||||
|
||||
// Double-check validity before scheduling
|
||||
if(GetIsObjectValid(oWeapon))
|
||||
{
|
||||
DoDebug("prc_inc_nat_hb >> DoNaturalWeaponHB: scheduling a secondary natural attack with "+GetName(oWeapon)+" at delay "+FloatToString(fDelay));
|
||||
DelayCommand(fDelay, DoNaturalAttack(oWeapon));
|
||||
|
||||
//calculate the delay to use next time
|
||||
fDelay += 2.05;
|
||||
if(fDelay > 6.0)
|
||||
fDelay -= 6.0;
|
||||
fDelay -= 6.0;
|
||||
}
|
||||
else
|
||||
{
|
||||
DoDebug("prc_inc_nat_hb >> DoNaturalWeaponHB: ERROR - weapon object is INVALID, cannot schedule attack");
|
||||
}
|
||||
i++;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int iMod = 5; // motu99: added check for monk weapon
|
||||
if(GetHasMonkWeaponEquipped(oPC)) iMod = 3;
|
||||
@@ -357,10 +429,10 @@ void DoNaturalWeaponHB(object oPC = OBJECT_SELF)
|
||||
for(i = 0; i < nOverflowAttackCount; i++)
|
||||
{
|
||||
// DoDebug(COLOR_WHITE + "DoNaturalWeaponHB(): scheduling a scripted overflow attack with attack mod "+IntToString(nAttackPenalty)+" at delay "+FloatToString(fDelay));
|
||||
/*
|
||||
|
||||
// motu99: see comment above why this is commented out
|
||||
AssignCommand(oPC, DelayCommand(fDelay, DoOverflowOnhandAttack(nAttackPenalty)));
|
||||
*/
|
||||
//AssignCommand(oPC, DelayCommand(fDelay, DoOverflowOnhandAttack(nAttackPenalty)));
|
||||
|
||||
DelayCommand(fDelay, DoOverflowOnhandAttack(nAttackPenalty));
|
||||
|
||||
//calculate the delay to use
|
||||
@@ -399,6 +471,128 @@ void DoNaturalWeaponHB(object oPC = OBJECT_SELF)
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
void DoNaturalWeaponHB(object oPC = OBJECT_SELF)
|
||||
{
|
||||
//not in combat, abort
|
||||
if(!GetIsInCombat(oPC))
|
||||
return;
|
||||
|
||||
if(DEBUG) DoDebug("prc_inc_nat_hb: entered DoNaturalWeaponHB");
|
||||
|
||||
float fDelay = 0.1 + IntToFloat(Random(10))/100.0;
|
||||
|
||||
//no natural weapons, abort
|
||||
//in a different form, abort for now fix it later
|
||||
if(array_exists(oPC, ARRAY_NAT_SEC_WEAP_RESREF)
|
||||
&& !GetIsPolyMorphedOrShifted(oPC))
|
||||
{
|
||||
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))
|
||||
{
|
||||
//get the resref to use
|
||||
string sResRef = array_get_string(oPC, ARRAY_NAT_SEC_WEAP_RESREF, i);
|
||||
//if null, move to next
|
||||
if(sResRef != "")
|
||||
{
|
||||
//get the created item
|
||||
object oWeapon = GetObjectByTag(sResRef);
|
||||
if(!GetIsObjectValid(oWeapon))
|
||||
{
|
||||
object oLimbo = GetObjectByTag("HEARTOFCHAOS");
|
||||
location lLimbo = GetLocation(oLimbo);
|
||||
if(!GetIsObjectValid(oLimbo))
|
||||
lLimbo = GetStartingLocation();
|
||||
oWeapon = CreateObject(OBJECT_TYPE_ITEM, sResRef, lLimbo);
|
||||
DoDebug(PRC_TEXT_WHITE + "prc_inc_nat_hb >> DoNaturalWeaponHB: creature weapon object found!!!");
|
||||
}
|
||||
|
||||
// Check for enhancements after creating the weapon object
|
||||
int nEnhance = GetLocalInt(oPC, "PRC_NAT_WEAPON_ENHANCE");
|
||||
if(nEnhance > 0)
|
||||
{
|
||||
|
||||
DoDebug(PRC_TEXT_WHITE + "prc_inc_nat_hb >> DoNaturalWeaponHB: Applying enhancement.");
|
||||
float fDuration = GetLocalFloat(oPC, "PRC_NAT_WEAPON_ENH_DUR");
|
||||
IPSafeAddItemProperty(oWeapon, ItemPropertyEnhancementBonus(nEnhance), fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE);
|
||||
}
|
||||
|
||||
if(DEBUG) DoDebug("prc_inc_nat_hb >> DoNaturalWeaponHB: scheduling a secondary natural attack with "+GetName(oWeapon)+" at delay "+FloatToString(fDelay));
|
||||
//do the attack within a delay
|
||||
// motu99: commented this out; AssignCommand ist not needed, because OBJECT_SELF is oPC - using AssignCommand will only degrade performance
|
||||
//AssignCommand(oPC, DelayCommand(fDelay, DoNaturalAttack(oWeapon)));
|
||||
|
||||
DelayCommand(fDelay, DoNaturalAttack(oWeapon));
|
||||
|
||||
//calculate the delay to use next time
|
||||
fDelay += 2.05;
|
||||
if(fDelay > 6.0)
|
||||
fDelay -= 6.0;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
int iMod = 5; // motu99: added check for monk weapon
|
||||
if(GetHasMonkWeaponEquipped(oPC)) iMod = 3;
|
||||
|
||||
// check for overflow (main hand) attacks
|
||||
int nOverflowAttackCount = GetLocalInt(oPC, "OverflowBaseAttackCount");
|
||||
if(nOverflowAttackCount)
|
||||
{
|
||||
int i;
|
||||
// the first overflow attack would be the seventh main hand attack, at an AB of -30
|
||||
int nAttackPenalty = -6 * iMod; // -30 for normal bab, -18 for monks
|
||||
// DoDebug("DoNaturalWeaponHB(): number of scripted overflow attacks: "+IntToString(nOverflowAttackCount));
|
||||
for(i = 0; i < nOverflowAttackCount; i++)
|
||||
{
|
||||
// DoDebug(COLOR_WHITE + "DoNaturalWeaponHB(): scheduling a scripted overflow attack with attack mod "+IntToString(nAttackPenalty)+" at delay "+FloatToString(fDelay));
|
||||
|
||||
// motu99: see comment above why this is commented out
|
||||
// AssignCommand(oPC, DelayCommand(fDelay, DoOverflowOnhandAttack(nAttackPenalty)));
|
||||
|
||||
DelayCommand(fDelay, DoOverflowOnhandAttack(nAttackPenalty));
|
||||
|
||||
//calculate the delay to use
|
||||
fDelay += 2.05;
|
||||
if(fDelay > 6.0)
|
||||
fDelay -= 6.0;
|
||||
//calculate new attack penalty
|
||||
nAttackPenalty -= iMod; // motu99: usually -5, for monks -3 (unarmed or kama)
|
||||
}
|
||||
}
|
||||
|
||||
// motu99: this is only here for debugging in order to test PerformAttackRound()
|
||||
// must be deleted after debugging!!!
|
||||
//if (GetPRCSwitch(PRC_PNP_TRUESEEING)) DelayCommand(0.01, DoOffhandAttackRound());
|
||||
|
||||
|
||||
// check for overflow offhand attacks
|
||||
int nOffhandAttackCount = GetLocalInt(oPC, "OffhandOverflowAttackCount");
|
||||
// if (DEBUG) DoDebug("DoNaturalWeaponHB: number of scripted offhand attacks = "+IntToString(nOffhandAttackCount));
|
||||
if(nOffhandAttackCount)
|
||||
{
|
||||
int i;
|
||||
int nAttackPenalty = -2 * iMod; // offhand attacks always come at -5 per additional attack (but for monks we assume -3)
|
||||
for(i = 0; i < nOffhandAttackCount; i++)
|
||||
{
|
||||
// DoDebug(COLOR_WHITE + "DoNaturalWeaponHB(): scheduling a scripted offhand attack with attack mod "+IntToString(nAttackPenalty)+" at delay "+FloatToString(fDelay));
|
||||
|
||||
DelayCommand(fDelay, DoOffhandAttack(nAttackPenalty));
|
||||
|
||||
//calculate the delay to use
|
||||
fDelay += 2.05;
|
||||
if(fDelay > 6.0)
|
||||
fDelay -= 6.0;
|
||||
//calculate new attack penalty
|
||||
nAttackPenalty -= iMod;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* motu99's test functions. Not actually used by PRC scripts
|
||||
|
||||
@@ -277,6 +277,32 @@ void ClearNaturalWeapons(object oPC)
|
||||
array_delete(oPC, ARRAY_NAT_PRI_WEAP_ATTACKS);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Adds a natural primary weapon to a creature (PC/NPC).
|
||||
*
|
||||
* This function manages a creature's natural primary weapons by storing their
|
||||
* resource references and attack counts in persistent arrays. If the weapon
|
||||
* being added is the first natural weapon, it may automatically become the
|
||||
* creature's active primary natural weapon, unless the creature is a Monk or
|
||||
* Brawler. Optionally, the weapon can be forced to become the active primary
|
||||
* weapon regardless of class.
|
||||
*
|
||||
* @param oPC The creature object to which the natural weapon will be added.
|
||||
* @param sResRef The resource reference string of the natural weapon.
|
||||
* @param nCount (Optional) The number of attacks this natural weapon provides.
|
||||
* Default is 1.
|
||||
* @param nForceUse (Optional) If TRUE, forces this weapon to become the active
|
||||
* primary natural weapon regardless of the creature's class.
|
||||
* Default is FALSE.
|
||||
*
|
||||
* @details
|
||||
* - Creates persistent arrays for weapon references and attack counts if they
|
||||
* do not already exist.
|
||||
* - Checks if the weapon is already present to avoid duplicates.
|
||||
* - Adds the weapon and attack count to the arrays.
|
||||
* - Sets the primary natural weapon index to this weapon if it is the first
|
||||
* natural weapon added, unless the creature is a Monk or Brawler.
|
||||
*/
|
||||
void AddNaturalPrimaryWeapon(object oPC, string sResRef, int nCount = 1, int nForceUse = FALSE)
|
||||
{
|
||||
int nFirstNaturalWeapon = FALSE;
|
||||
|
||||
@@ -1370,7 +1370,9 @@ void _prc_inc_shifting_ShiftIntoTemplateAux(object oShifter, int nShifterType, o
|
||||
if(GetIsObjectValid(oShifterCWpR)) MyDestroyObject(oShifterCWpR);
|
||||
if(GetIsObjectValid(oShifterCWpL)) MyDestroyObject(oShifterCWpL);
|
||||
if(GetIsObjectValid(oShifterCWpB)) MyDestroyObject(oShifterCWpB);
|
||||
oShifterCWpR = oShifterCWpL = oShifterCWpR = OBJECT_INVALID;
|
||||
oShifterCWpR = OBJECT_INVALID;
|
||||
oShifterCWpL = OBJECT_INVALID;
|
||||
oShifterCWpB = OBJECT_INVALID;
|
||||
|
||||
// Copy the template's weapons and assign equipping
|
||||
|
||||
|
||||
154
src/include/prc_inc_size.nss
Normal file
154
src/include/prc_inc_size.nss
Normal file
@@ -0,0 +1,154 @@
|
||||
#include "prc_inc_util"
|
||||
#include "prc_inc_spells"
|
||||
#include "prc_inc_function"
|
||||
|
||||
// Wrapper function for delayed visual transform with generation tracking
|
||||
void DelayedSetVisualTransform(int nExpectedGeneration, object oTarget, int nTransform, float fValue)
|
||||
{
|
||||
// Read current generation at execution time, not when scheduled
|
||||
if (nExpectedGeneration != GetLocalInt(oTarget, "PRC_SIZE_GENERATION"))
|
||||
{
|
||||
// Generation has changed, don't apply the transform
|
||||
return;
|
||||
}
|
||||
SetObjectVisualTransform(oTarget, nTransform, fValue);
|
||||
}
|
||||
|
||||
// Main wrapper function that handles generation tracking
|
||||
void DelaySetVisualTransform(float fDelay, object oTarget, string sGenerationName, int nTransform, float fValue)
|
||||
{
|
||||
int nExpectedGeneration = GetLocalInt(oTarget, sGenerationName);
|
||||
DelayCommand(fDelay, DelayedSetVisualTransform(nExpectedGeneration, oTarget, nTransform, fValue));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a size change effect that can enlarge or reduce a creature
|
||||
*
|
||||
* @param oTarget Object to affect
|
||||
* @param nObjectType Object type filter (OBJECT_TYPE_CREATURE, etc.)
|
||||
* @param bEnlarge TRUE to enlarge, FALSE to reduce
|
||||
* @param nChanges Number of size categories to change (0 = reset to original)
|
||||
* @return The size change effect
|
||||
*/
|
||||
|
||||
effect EffectSizeChange(object oTarget, int nObjectType, int bEnlarge, int nChanges)
|
||||
{
|
||||
effect eBlank;
|
||||
|
||||
// Increment generation for any size change
|
||||
int nGeneration = PRC_NextGeneration(GetLocalInt(oTarget, "PRC_SIZE_GENERATION"));
|
||||
SetLocalInt(oTarget, "PRC_SIZE_GENERATION", nGeneration);
|
||||
|
||||
// Store original size if not already stored - READ ACTUAL CURRENT SCALE
|
||||
if(GetLocalFloat(oTarget, "PRC_ORIGINAL_SIZE") == 0.0f)
|
||||
{
|
||||
float fCurrentScale = GetObjectVisualTransform(oTarget, OBJECT_VISUAL_TRANSFORM_SCALE);
|
||||
SetLocalFloat(oTarget, "PRC_ORIGINAL_SIZE", fCurrentScale);
|
||||
}
|
||||
|
||||
// Reset to original size
|
||||
if(nChanges == 0)
|
||||
{
|
||||
float fOriginalSize = GetLocalFloat(oTarget, "PRC_ORIGINAL_SIZE");
|
||||
DelaySetVisualTransform(0.0f, oTarget, "PRC_SIZE_GENERATION", OBJECT_VISUAL_TRANSFORM_SCALE, fOriginalSize);
|
||||
// DON'T delete PRC_ORIGINAL_SIZE here - keep it for future casts
|
||||
return eBlank;
|
||||
}
|
||||
|
||||
// Get the original scale
|
||||
float fOriginalScale = GetLocalFloat(oTarget, "PRC_ORIGINAL_SIZE");
|
||||
|
||||
// Calculate scale factor relative to original size
|
||||
float fScale = fOriginalScale;
|
||||
if(bEnlarge)
|
||||
fScale = fOriginalScale * pow(1.5f, IntToFloat(nChanges));
|
||||
else
|
||||
fScale = fOriginalScale * pow(0.5f, IntToFloat(nChanges));
|
||||
|
||||
// Create the effect link with sanctuary VFX
|
||||
effect eReturn = EffectLinkEffects(EffectVisualEffect(VFX_DUR_SANCTUARY),
|
||||
EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE));
|
||||
|
||||
if(bEnlarge)
|
||||
{
|
||||
eReturn = EffectLinkEffects(eReturn, EffectAttackDecrease(nChanges));
|
||||
eReturn = EffectLinkEffects(eReturn, EffectAbilityDecrease(ABILITY_DEXTERITY, 2 * nChanges));
|
||||
eReturn = EffectLinkEffects(eReturn, EffectAbilityIncrease(ABILITY_STRENGTH, 2 * nChanges));
|
||||
eReturn = EffectLinkEffects(eReturn, EffectACDecrease(nChanges));
|
||||
eReturn = TagEffect(eReturn, "PRC_SIZE_INCREASE");
|
||||
}
|
||||
else
|
||||
{
|
||||
eReturn = EffectLinkEffects(eReturn, EffectAttackIncrease(nChanges));
|
||||
eReturn = EffectLinkEffects(eReturn, EffectAbilityIncrease(ABILITY_DEXTERITY, 2 * nChanges));
|
||||
eReturn = EffectLinkEffects(eReturn, EffectAbilityDecrease(ABILITY_STRENGTH, 2 * nChanges));
|
||||
eReturn = EffectLinkEffects(eReturn, EffectACIncrease(nChanges));
|
||||
eReturn = TagEffect(eReturn, "PRC_SIZE_DECREASE");
|
||||
}
|
||||
|
||||
// Apply visual transform using wrapper
|
||||
DelaySetVisualTransform(0.0f, oTarget, "PRC_SIZE_GENERATION", OBJECT_VISUAL_TRANSFORM_SCALE, fScale);
|
||||
|
||||
return eReturn;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* effect EffectSizeChange(object oTarget, int nObjectType, int bEnlarge, int nChanges)
|
||||
{
|
||||
effect eBlank;
|
||||
|
||||
// Increment generation for any size change
|
||||
int nGeneration = PRC_NextGeneration(GetLocalInt(oTarget, "PRC_SIZE_GENERATION"));
|
||||
SetLocalInt(oTarget, "PRC_SIZE_GENERATION", nGeneration);
|
||||
|
||||
// Store original size if not already stored (fixed check)
|
||||
if(GetLocalFloat(oTarget, "PRC_ORIGINAL_SIZE") == 0.0f)
|
||||
{
|
||||
SetLocalFloat(oTarget, "PRC_ORIGINAL_SIZE", 1.0f);
|
||||
}
|
||||
|
||||
// Reset to original size
|
||||
if(nChanges == 0)
|
||||
{
|
||||
float fOriginalSize = GetLocalFloat(oTarget, "PRC_ORIGINAL_SIZE");
|
||||
DelaySetVisualTransform(0.0f, oTarget, "PRC_SIZE_GENERATION", OBJECT_VISUAL_TRANSFORM_SCALE, fOriginalSize);
|
||||
DeleteLocalFloat(oTarget, "PRC_ORIGINAL_SIZE");
|
||||
return eBlank;
|
||||
}
|
||||
|
||||
// Calculate scale factor using pow() for multi-step changes
|
||||
float fScale = 1.0f;
|
||||
if(bEnlarge)
|
||||
fScale = pow(1.5f, IntToFloat(nChanges)); // 1.5, 2.25, 3.375...
|
||||
else
|
||||
fScale = pow(0.5f, IntToFloat(nChanges)); // 0.5, 0.25, 0.125...
|
||||
|
||||
// Create the effect link based on enlarge/reduce
|
||||
effect eReturn;
|
||||
if(bEnlarge)
|
||||
{
|
||||
eReturn = EffectLinkEffects(EffectAttackDecrease(nChanges),
|
||||
EffectAbilityDecrease(ABILITY_DEXTERITY, 2 * nChanges));
|
||||
eReturn = EffectLinkEffects(eReturn, EffectAbilityIncrease(ABILITY_STRENGTH, 2 * nChanges));
|
||||
eReturn = EffectLinkEffects(eReturn, EffectACDecrease(nChanges));
|
||||
eReturn = TagEffect(eReturn, "PRC_SIZE_INCREASE");
|
||||
}
|
||||
else
|
||||
{
|
||||
eReturn = EffectLinkEffects(EffectAttackIncrease(nChanges),
|
||||
EffectAbilityIncrease(ABILITY_DEXTERITY, 2 * nChanges));
|
||||
eReturn = EffectLinkEffects(eReturn, EffectAbilityDecrease(ABILITY_STRENGTH, 2 * nChanges));
|
||||
eReturn = EffectLinkEffects(eReturn, EffectACIncrease(nChanges));
|
||||
eReturn = TagEffect(eReturn, "PRC_SIZE_DECREASE");
|
||||
}
|
||||
|
||||
// Apply visual transform using wrapper
|
||||
DelaySetVisualTransform(0.0f, oTarget, "PRC_SIZE_GENERATION", OBJECT_VISUAL_TRANSFORM_SCALE, fScale);
|
||||
|
||||
return eReturn;
|
||||
}
|
||||
*/
|
||||
|
||||
//:: void main(){}
|
||||
@@ -363,8 +363,11 @@ int PRCIsFlying(object oCreature)
|
||||
bFlying = TRUE;
|
||||
}
|
||||
if(!bFlying
|
||||
&& ((nWings > 0 && nWings < 79) || nWings == 90))//CEP and Project Q wing models
|
||||
bFlying = TRUE;
|
||||
&& ((nWings > 0 && nWings < 79)
|
||||
|| (nWings > 1959 && nWings < 1962)
|
||||
|| (nWings > 1962 && nWings < 1966)
|
||||
|| nWings == 90))//CEP and Project Q wing models
|
||||
bFlying = TRUE;
|
||||
|
||||
if (GetHasSpellEffect(MOVE_SH_BALANCE_SKY, oCreature))
|
||||
bFlying = TRUE;
|
||||
|
||||
@@ -1011,11 +1011,16 @@ int PRCMySavingThrow(int nSavingThrow, object oTarget, int nDC, int nSaveType =
|
||||
// Plague Resistant gives a +4 bonus on disease saves
|
||||
if(GetHasFeat(FEAT_PLAGUE_RESISTANT, oTarget))
|
||||
nDC -= 4;
|
||||
// Racial +2 vs disease saves
|
||||
if(GetHasFeat(FEAT_RACE_HARDINESS_VS_DISEASE, oTarget))
|
||||
nDC -= 2;
|
||||
// +4/+2 bonus on saves against disease, done here
|
||||
if(GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oTarget) > 13)
|
||||
nDC -= 4;
|
||||
else if(GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oTarget) > 3)
|
||||
nDC -= 2;
|
||||
|
||||
|
||||
}
|
||||
else if(nSaveType == SAVING_THROW_TYPE_POISON)
|
||||
{
|
||||
|
||||
@@ -70,13 +70,13 @@
|
||||
43 PRC_CRAFTING_BASE_ITEMS int 1
|
||||
44 PRC_XP_USE_SIMPLE_LA int 1
|
||||
45 PRC_XP_USE_SIMPLE_RACIAL_HD int 1
|
||||
46 PRC_CREATE_INFUSION_CASTER_LEVEL int 1
|
||||
47 PRC_CREATE_INFUSION_OPTIONAL_HERBS int 0
|
||||
46 PRC_CREATE_INFUSION_CASTER_LEVEL int 1
|
||||
47 PRC_CREATE_INFUSION_OPTIONAL_HERBS int 0
|
||||
*/
|
||||
|
||||
/* This variable MUST be updated with every new version of the PRC!!! */
|
||||
|
||||
const string PRC_VERSION = "PRC 3.9.0";
|
||||
const string PRC_VERSION = "PRC8 4.76";
|
||||
|
||||
/* This variable MUST be updated every time 'assemble_spellbooks.bat' is run!!! */
|
||||
|
||||
@@ -91,11 +91,11 @@
|
||||
* This allows material components in NWN through the materialcomp.2da
|
||||
* Just put the SpellID and UTC resref in, MINUS the .utc on the end.
|
||||
* This also requires the names of the items, formatted like so ("" included): "Object Name"
|
||||
*
|
||||
*
|
||||
* Set switch to 2 to activate this
|
||||
* Deducts gold instead of requiring material components
|
||||
* Put the gold value in the Cost column
|
||||
|
||||
|
||||
* Set switch to 3 to activate both at the same time
|
||||
* WARNING: This will slow spellcasting down due to 2da reads and inventory loops
|
||||
*/
|
||||
@@ -129,7 +129,7 @@ const string PRC_BIOWARE_NEUTRALIZE_POISON = "PRC_BIOWARE_NEUTRALIZE_P
|
||||
/** Remove the cap PRC added to this spell */
|
||||
const string PRC_BIOWARE_REMOVE_DISEASE = "PRC_BIOWARE_REMOVE_DISEASE";
|
||||
|
||||
/**
|
||||
/**
|
||||
* This replaces the 3.0 Spell Focus bonuses with the 3.5 edition ones
|
||||
*/
|
||||
const string PRC_35_SPELL_FOCUS = "PRC_35_SPELL_FOCUS";
|
||||
@@ -263,8 +263,8 @@ const string PRC_165_DEATH_IMMUNITY = "PRC_165_DEATH_IMMUNITY";
|
||||
|
||||
/*
|
||||
* PRC_ACTIVATE_MAX_SPELL_DC_CAP: activate a max cap on DC casted by creature/player
|
||||
* PRC_SET_MAX_SPELL_DC_CAP: the max value ex: 99
|
||||
*
|
||||
* PRC_SET_MAX_SPELL_DC_CAP: the max value ex: 99
|
||||
*
|
||||
*/
|
||||
const string PRC_ACTIVATE_MAX_SPELL_DC_CAP = "PRC_ACTIVATE_MAX_SPELL_DC_CAP";
|
||||
const string PRC_SET_MAX_SPELL_DC_CAP = "PRC_SET_MAX_SPELL_DC_CAP";
|
||||
@@ -291,8 +291,8 @@ const string PRC_DC_BASE_OVERRIDE = "PRC_DC_BASE_OVERRIDE";
|
||||
const string PRC_DC_ADJUSTMENT = "PRC_DC_ADJUSTMENT";
|
||||
|
||||
/*
|
||||
* By default when calculating caster level for characters with PrCs, the highest class rule will
|
||||
* be used (ie. Bard 2/Wizard 4/Elemental Savant 6 - Wizard is the highest arcane class so levels
|
||||
* By default when calculating caster level for characters with PrCs, the highest class rule will
|
||||
* be used (ie. Bard 2/Wizard 4/Elemental Savant 6 - Wizard is the highest arcane class so levels
|
||||
* form PrC will be added to that class, and the caster level will be 2 for Bard and 10 for Wizard).
|
||||
* When this is set, the first class rule will be used (with the same character caster level would
|
||||
* be 8 for Bard and 4 for Wizard).
|
||||
@@ -572,12 +572,12 @@ const string PRC_SOUL_EATER_MAX_SLAVES = "PRC_SOUL_EATER_MAX_SLAVES";
|
||||
* For the Psionic Slayer prestige class, this switch limits the Favored Enemy selection
|
||||
* to the Aberration racial type.
|
||||
*
|
||||
* This switch is provided to allow builders to more closely represent the Pen and Paper
|
||||
* This switch is provided to allow builders to more closely represent the Pen and Paper
|
||||
* Illithid Slayer class, instead of the broader Open Game License "Slayer" class.
|
||||
*
|
||||
* Type: Int
|
||||
* Type: Int
|
||||
* Values: 0 [Default] (Favored Enemy racial type is not limited)
|
||||
* 1 (Favored Enemy race is limited to Aberration only)
|
||||
* 1 (Favored Enemy race is limited to Aberration only)
|
||||
*/
|
||||
const string PRC_PSIONIC_SLAYER_FAV_ENEMY_ABERRATION_ONLY = "PRC_PSIONIC_SLAYER_FAV_ENEMY_ABERRATION_ONLY";
|
||||
|
||||
@@ -585,20 +585,20 @@ const string PRC_PSIONIC_SLAYER_FAV_ENEMY_ABERRATION_ONLY = "PRC_PSIONIC_S
|
||||
* For the Psionic Slayer prestige class, this switch requires a character to make a "kill"
|
||||
* of a specific type of creature before the class becomes available.
|
||||
*
|
||||
* Use of this switch requires that the module builder add a "Psionic Slayer Kill Token"
|
||||
* (included in the PRC Items) to the designated creature.
|
||||
* Use of this switch requires that the module builder add a "Psionic Slayer Kill Token"
|
||||
* (included in the PRC Items) to the designated creature.
|
||||
*
|
||||
* Alternately, a script or item can be made that will run the script "prc_psysly_killt"
|
||||
* Alternately, a script or item can be made that will run the script "prc_psysly_killt"
|
||||
* on the PC. This script will set the flag that allows the target PC to take the Psionic Slayer Class.
|
||||
* Example code:
|
||||
* ExecuteScript("prc_psysly_killt", oPC); // Where oPC is an player charcter object
|
||||
* Example code:
|
||||
* ExecuteScript("prc_psysly_killt", oPC); // Where oPC is an player charcter object
|
||||
*
|
||||
* This switch is provided to allow builders to more closely represent the Pen and Paper
|
||||
* This switch is provided to allow builders to more closely represent the Pen and Paper
|
||||
* Illithid Slayer class, instead of the broader Open Game License "Slayer" class.
|
||||
*
|
||||
* Type: Int
|
||||
* Type: Int
|
||||
* Values: 0 [Default] (Kill Token / Script NOT required for taking the Psionic Slayer Class)
|
||||
* 1 (Kill Token / Script REQUIRED before the Psionic Slayer Class is available to take)
|
||||
* 1 (Kill Token / Script REQUIRED before the Psionic Slayer Class is available to take)
|
||||
*/
|
||||
const string PRC_PSIONIC_SLAYER_REQUIRE_KILL_TOKEN = "PRC_PSIONIC_SLAYER_REQUIRE_KILL_TOKEN";
|
||||
|
||||
@@ -607,19 +607,19 @@ const string PRC_PSIONIC_SLAYER_REQUIRE_KILL_TOKEN = "PRC_PSIONIC_SLAYER_R
|
||||
* By default the Werewolf class uses the Bioware Polymorph effect to perfrom its
|
||||
* Hybrid Form Shapchange.
|
||||
*
|
||||
* This switch allows the Werewolf class to be toggled to use the PRC Shifter
|
||||
* Shapchange code instead.
|
||||
* This switch allows the Werewolf class to be toggled to use the PRC Shifter
|
||||
* Shapchange code instead.
|
||||
*
|
||||
* Type: Int
|
||||
* Type: Int
|
||||
* Values: 0 [Default] (Werewolf Hybrid Shapchange uses Bioware Polymorph)
|
||||
* 1 (Werewolf Hybrid Shapchange uses PRC Shifter shape change code)
|
||||
* 1 (Werewolf Hybrid Shapchange uses PRC Shifter shape change code)
|
||||
*/
|
||||
const string PRC_WEREWOLF_HYBRID_USE_SHIFTER_SHAPCHANGE = "PRC_WEREWOLF_HYBRID_USE_SHIFTER_SHAPCHANGE";
|
||||
const string PRC_WEREWOLF_HYBRID_USE_SHIFTER_SHAPECHANGE = "PRC_WEREWOLF_HYBRID_USE_SHIFTER_SHAPECHANGE";
|
||||
|
||||
/**
|
||||
* Sets the max bonus for the PnP Shifter shifting systems
|
||||
*
|
||||
* Type: Int
|
||||
* Type: Int
|
||||
* Values: any greater than 0
|
||||
*/
|
||||
const string PRC_PNP_SHIFTER_BONUS = "PRC_PNP_SHIFTER_BONUS";
|
||||
@@ -783,7 +783,7 @@ const string PRC_STAFF_CASTER_LEVEL = "PRC_STAFF_CASTER_LEVEL";
|
||||
/**
|
||||
* [DEFUNCT]
|
||||
* A wand must be equipped before it can cast a spell
|
||||
*
|
||||
*
|
||||
* Any value above 0 turns off the requirement to have a wand equipped to use it
|
||||
*
|
||||
* This switch is defunct, wands must *always* be equipped to use them.
|
||||
@@ -931,7 +931,7 @@ const string PRC_PNP_FAMILIAR_FEEDING = "PRC_PNP_FAMILIAR_FEEDING
|
||||
|
||||
/**
|
||||
* Use PRC henchmen-familiars instead of BioWare's - this will allow
|
||||
* new classes to have familiars, but summoned creatures will no longer
|
||||
* new classes to have familiars, but summoned creatures will no longer
|
||||
* be 'true' familiars (ie. can't possess PRC familiar)
|
||||
*/
|
||||
const string PRC_FAMILIARS = "PRC_FAMILIARS";
|
||||
@@ -1114,7 +1114,7 @@ const string PRC_SPELL_ALIGNMENT_RESTRICT = "PRC_SPELL_ALIGNMENT_REST
|
||||
* Disable registration of custom cohorts
|
||||
*/
|
||||
const string PRC_DISABLE_REGISTER_COHORTS = "PRC_DISABLE_REGISTER_COHORTS";
|
||||
|
||||
|
||||
/*
|
||||
* Disable cohorts starting with gear
|
||||
*/
|
||||
@@ -1144,19 +1144,19 @@ const string PRC_SPELL_ALIGNMENT_RESTRICT = "PRC_SPELL_ALIGNMENT_REST
|
||||
* Medium armor is a 25% speed reduction, Heavy is a 33% reduction
|
||||
*/
|
||||
const string PRC_PNP_ARMOR_SPEED = "PRC_PNP_ARMOR_SPEED";
|
||||
|
||||
|
||||
/*
|
||||
* Applies a 99% speed boost when out of combat
|
||||
* Warning that it will likely cause PCs to be overly speedy when combat starts
|
||||
* Potential problem causer
|
||||
*/
|
||||
const string PRC_FAST_TRAVEL_SPEED = "PRC_FAST_TRAVEL_SPEED";
|
||||
|
||||
|
||||
/*
|
||||
* Applys a Discipline bonus equal to BAB to all characters if turned on
|
||||
* Bonus only applies to characters with 0 ranks in Discipline
|
||||
*/
|
||||
const string PRC_PNP_KNOCKDOWN = "PRC_PNP_KNOCKDOWN";
|
||||
const string PRC_PNP_KNOCKDOWN = "PRC_PNP_KNOCKDOWN";
|
||||
|
||||
/*
|
||||
* by Bioware rules, PCs have approximatly a 7th faster movement than NPCs
|
||||
@@ -1204,8 +1204,11 @@ const string PRC_SPELL_ALIGNMENT_RESTRICT = "PRC_SPELL_ALIGNMENT_REST
|
||||
*/
|
||||
const string PRC_APPEARNCE_CHANGE_DISABLE = "PRC_APPEARNCE_CHANGE_DISABLE";
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Allow "Monk" gloves to merge with a creature weapons when Wildshaped.
|
||||
* Will also merge bracers with creature hides when Wildshaped.
|
||||
*/
|
||||
const string PRC_WILDSHAPE_ALLOWS_ARMS_SLOT = "PRC_WILDSHAPE_ALLOWS_ARMS_SLOT";
|
||||
|
||||
/******************************************************************************\
|
||||
* Death/Bleeding system *
|
||||
@@ -1223,7 +1226,7 @@ const string PRC_PNP_DEATH_ENABLE = "PRC_PNP_DEATH_ENA
|
||||
* if FALSE, dont bleed just die
|
||||
* By PnP this would be 1 round, or 6 seconds
|
||||
*/
|
||||
const string PRC_DEATH_OR_BLEED = "PRC_DEATH_OR_BLEED";
|
||||
const string PRC_DEATH_OR_BLEED = "PRC_DEATH_OR_BLEED";
|
||||
|
||||
/*
|
||||
* Damage when bleeding
|
||||
@@ -1316,7 +1319,7 @@ const string PRC_ACP_DELAY = "PRC_ACP_DELAY";
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* File End switches
|
||||
* File End switches
|
||||
******************************************************************************/
|
||||
|
||||
/**
|
||||
@@ -1490,10 +1493,10 @@ const string PRC_POISON_IS_FOOD_SCRIPT_NAME = "PRC_POISON_IS_FOOD_SCRIP
|
||||
const string PRC_POISON_ALLOW_CLEAN_IN_EQUIP = "PRC_POISON_ALLOW_CLEAN_IN_EQUIP";
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* Default: crafting requires only gold and xp
|
||||
*/
|
||||
const string PRC_CRAFT_POISON_USE_INGREDIENST = "PRC_CRAFT_POISON_USE_INGREDIENST";
|
||||
const string PRC_CRAFT_POISON_USE_INGREDIENTS = "PRC_CRAFT_POISON_USE_INGREDIENTS";
|
||||
|
||||
/******************************************************************************\
|
||||
* PRGT system switches *
|
||||
@@ -1542,10 +1545,10 @@ const string PRC_PSI_ASTRAL_CONSTRUCT_DUR_MOD = "PRC_PSI_ASTRAL_CONSTRUCT
|
||||
|
||||
/**
|
||||
* If this is set, The Astral Seed power will attempt to use the provided string as
|
||||
* the ResRef to create the Astral Seed object instead of the of the phylactery
|
||||
* the ResRef to create the Astral Seed object instead of the of the phylactery
|
||||
* ResRef("x2_plc_phylact").
|
||||
* May be used by builders to create an object that CAN be destroyed, or has other traits,
|
||||
* as desired.
|
||||
* as desired.
|
||||
* Type: String
|
||||
* Values: "" [Default] (Blank, or not set: Use default phylactery ResRef for Astral Seed)
|
||||
* STRING (Entered String will be used as the ResRef of created Astral Seed object)
|
||||
@@ -1553,14 +1556,14 @@ const string PRC_PSI_ASTRAL_CONSTRUCT_DUR_MOD = "PRC_PSI_ASTRAL_CONSTRUCT
|
||||
const string PRC_PSI_ASTRAL_SEED_RESREF = "PRC_PSI_ASTRAL_SEED_RESREF";
|
||||
|
||||
/**
|
||||
* By default the Astral Seed power respawns the player, and then makes them immobile for
|
||||
* By default the Astral Seed power respawns the player, and then makes them immobile for
|
||||
* 24-game-hours.
|
||||
* If this switch is set, it will adjust the imobility time period; shortening it, lengthing it, or
|
||||
* If this switch is set, it will adjust the imobility time period; shortening it, lengthing it, or
|
||||
* effectively eliminating it.
|
||||
* Type: Int
|
||||
* Values: 0 [Default] (Not set: Use default 24 hour duration)
|
||||
* -1 (Any negative value will result in a fixed duratoion of 2 seconds, which effectively eliminates the wait period)
|
||||
* 1 (Any potitive value: multiply duration by the value provided and then divide result by 1000.
|
||||
* 1 (Any potitive value: multiply duration by the value provided and then divide result by 1000.
|
||||
* Values less than 1000 will shorten the duration, values higher than 1000 will lengthen it.)
|
||||
*/
|
||||
const string PRC_PSI_ASTRAL_SEED_RESPAWN_DELAY_X1000 = "PRC_PSI_ASTRAL_SEED_RESPAWN_DELAY_X1000";
|
||||
@@ -1571,7 +1574,7 @@ const string PRC_PSI_ASTRAL_SEED_RESPAWN_DELAY_X1000 = "PRC_PSI_ASTRAL_SE
|
||||
* If this flag is set, the XP loss is completely eliminated. The standard PRC event hook script
|
||||
* of "prc_pw_astralseed" may be used to script any additional effects to occure upon Astral Seed
|
||||
* respawning, including scripting specific XP loss amount.
|
||||
* Type: Int
|
||||
* Type: Int
|
||||
* Values: 0 [Default] (Not set: lose 1 level worth of XP upon Astral Seed respawn)
|
||||
* 1 (Any potitive value: Remove all XP loss from Astral Seed respawn)
|
||||
*/
|
||||
@@ -1908,7 +1911,7 @@ const string PRC_CRAFT_TIMER_MAX = "PRC_CRAFT_TIMER_MAX";
|
||||
*/
|
||||
const string PRC_CRAFT_TIMER_MIN = "PRC_CRAFT_TIMER_MIN";
|
||||
|
||||
/**
|
||||
/*
|
||||
* These three switches modify Bioware crafting so that the items produced have the
|
||||
* casterlevel of the spellcaster who created them. Normally under Bioware, it is possible
|
||||
* for a level 3 caster to produce level 9 items and for a level 40 caster to only produce
|
||||
@@ -1955,16 +1958,21 @@ const string PRC_CRAFT_ROD_CASTER_LEVEL = "PRC_CRAFT_ROD_CASTER_LEVE
|
||||
const string PRC_CRAFT_STAFF_CASTER_LEVEL = "PRC_CRAFT_STAFF_CASTER_LEVEL";
|
||||
|
||||
/*
|
||||
* As above, except it applies to herbal infusions
|
||||
* As above, except it applies to scepters
|
||||
*/
|
||||
const string PRC_CREATE_INFUSION_CASTER_LEVEL = "PRC_CREATE_INFUSION_CASTER_LEVEL";
|
||||
const string PRC_CRAFT_SCEPTER_CASTER_LEVEL = "PRC_CRAFT_SCEPTER_CASTER_LEVEL";
|
||||
|
||||
/*
|
||||
* Builder's Option: Enables the optional PnP herbs for creating infusions.
|
||||
* As above, except it applies to herbal infusions
|
||||
*/
|
||||
const string PRC_CREATE_INFUSION_CASTER_LEVEL = "PRC_CREATE_INFUSION_CASTER_LEVEL";
|
||||
|
||||
/*
|
||||
* Builder's Option: Enables the optional PnP herbs for creating infusions.
|
||||
* Each herb is keyed to a spell circle level & spell school as shown on pg. 33
|
||||
* of the Master's of the Wild sourcebook.
|
||||
*/
|
||||
const string PRC_CREATE_INFUSION_OPTIONAL_HERBS = "PRC_CREATE_INFUSION_OPTIONAL_HERBS";
|
||||
const string PRC_CREATE_INFUSION_OPTIONAL_HERBS = "PRC_CREATE_INFUSION_OPTIONAL_HERBS";
|
||||
|
||||
/*
|
||||
* Characters with a crafting feat always have the appropriate base item in their inventory
|
||||
@@ -2015,6 +2023,13 @@ const string PRC_X2_CRAFTWAND_COSTMODIFIER = "PRC_X2_CRAFTWAND_COSTMO
|
||||
*/
|
||||
const string PRC_X2_CRAFTROD_COSTMODIFIER = "PRC_X2_CRAFTROD_COSTMODIFIER";
|
||||
|
||||
/*
|
||||
* cost modifier of spells crafted into scepters
|
||||
* note that adding a second spell costs 75%
|
||||
* defaults to 750
|
||||
*/
|
||||
const string PRC_X2_CRAFTSCEPTER_COSTMODIFIER = "PRC_X2_CRAFTSCEPTER_COSTMODIFIER";
|
||||
|
||||
/*
|
||||
* cost modifier of spells crafted into staffs
|
||||
* note that adding a second spell costs 75% and 3 or more costs 50%
|
||||
@@ -2342,7 +2357,7 @@ const string PRC_XP_GIVE_XP_TO_NPCS = "PRC_XP_GIVE_XP_TO_NPCS";
|
||||
/**
|
||||
* Setting this switch will turn off the messages about being too far awy to gain XP
|
||||
*/
|
||||
const string PRC_XP_DISABLE_SPAM = "PRC_XP_DISABLE_SPAM";
|
||||
const string PRC_XP_DISABLE_SPAM = "PRC_XP_DISABLE_SPAM";
|
||||
|
||||
/**
|
||||
* PCs must be in the same area as the CR to gain XP.
|
||||
@@ -2901,13 +2916,13 @@ const string PRC_PERFECTED_MAP_MULTIPLIER = "PRC_PERFECTED_MAP_MULTIP
|
||||
\******************************************************************************/
|
||||
|
||||
/**
|
||||
* Sets how many seconds it takes to contact a vestige.
|
||||
* Sets how many seconds it takes to contact a vestige.
|
||||
* Any number less than 6 is ignored
|
||||
*/
|
||||
const string PRC_CONTACT_VESTIGE_TIMER = "PRC_CONTACT_VESTIGE_TIMER";
|
||||
|
||||
/**
|
||||
* Sets how many seconds it takes to bind a vestige.
|
||||
* Sets how many seconds it takes to bind a vestige.
|
||||
* Any number less than 12 is ignored
|
||||
*/
|
||||
const string PRC_BIND_VESTIGE_TIMER = "PRC_BIND_VESTIGE_TIMER";
|
||||
@@ -2941,6 +2956,20 @@ const string PRC_PW_SECURITY_CD_CHECK = "PRC_PW_SECURITY_CD_CHECK";
|
||||
*/
|
||||
const string PRC_DEBUG = "PRC_DEBUG";
|
||||
|
||||
/******************************************************************************\
|
||||
* Duration NUI Switches *
|
||||
\******************************************************************************/
|
||||
|
||||
/**
|
||||
* Toggles allowing player to remove friendly PC spells on player through Duration NUI
|
||||
* instead of just their own spells.
|
||||
*/
|
||||
const string PRC_ALLOWED_TO_REMOVE_FRIENDLY_SPELLS = "PRC_ALLOWED_TO_REMOVE_FRIENDLY_SPELLS";
|
||||
/**
|
||||
* Toggles allowing players to see the duration of hostile spells on them.
|
||||
*/
|
||||
const string PRC_ALLOWED_TO_SEE_HOSTILE_SPELLS = "PRC_ALLOWED_TO_SEE_HOSTILE_SPELLS";
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user