generated from Jaysyn/ModuleTemplate
2025/12/27
Hooked up new GUI module event. Hooked up NUI module event. Updated merge 2DAs. Updated PRC8 includes. Updated merge TLK.
This commit is contained in:
21
nasher.cfg
21
nasher.cfg
@@ -231,8 +231,16 @@ description = "PRC8 version of U1-3 - The Sinister Secret of Saltmarsh."
|
|||||||
filter = "prc_nui_sc_inc.nss"
|
filter = "prc_nui_sc_inc.nss"
|
||||||
filter = "prc_nui_scd_inc.nss"
|
filter = "prc_nui_scd_inc.nss"
|
||||||
filter = "prc_nui_consts.nss"
|
filter = "prc_nui_consts.nss"
|
||||||
filter = "nw_inc_nui"
|
filter = "nw_inc_nui.nss"
|
||||||
filter = "xchst_inc.nss"
|
filter = "xchst_inc.nss"
|
||||||
|
filter = "prc_nui_sbd_inc.nss"
|
||||||
|
filter = "prc_nui_sb_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 = "prc_inc_gff.nss"
|
||||||
|
filter = "inc_infusion.nss"
|
||||||
|
|
||||||
[target]
|
[target]
|
||||||
name = "tlk"
|
name = "tlk"
|
||||||
@@ -252,6 +260,7 @@ description = "Merge hakpak for the PRC8 version of U1-3 - The Sinister Secret o
|
|||||||
include = "src/hakpak/salt_prc8_top/**/*"
|
include = "src/hakpak/salt_prc8_top/**/*"
|
||||||
include = "src/include/**/*"
|
include = "src/include/**/*"
|
||||||
filter = "bnd_inc_bndfunc.nss"
|
filter = "bnd_inc_bndfunc.nss"
|
||||||
|
filter = "bnd_inc_bndfunc.nss"
|
||||||
filter = "bnd_vestig_const.nss"
|
filter = "bnd_vestig_const.nss"
|
||||||
filter = "inc_2dacache.nss"
|
filter = "inc_2dacache.nss"
|
||||||
filter = "inc_abil_damage.nss"
|
filter = "inc_abil_damage.nss"
|
||||||
@@ -462,8 +471,16 @@ description = "Merge hakpak for the PRC8 version of U1-3 - The Sinister Secret o
|
|||||||
filter = "prc_nui_sc_inc.nss"
|
filter = "prc_nui_sc_inc.nss"
|
||||||
filter = "prc_nui_scd_inc.nss"
|
filter = "prc_nui_scd_inc.nss"
|
||||||
filter = "prc_nui_consts.nss"
|
filter = "prc_nui_consts.nss"
|
||||||
filter = "nw_inc_nui"
|
filter = "nw_inc_nui.nss"
|
||||||
filter = "xchst_inc.nss"
|
filter = "xchst_inc.nss"
|
||||||
|
filter = "prc_nui_sbd_inc.nss"
|
||||||
|
filter = "prc_nui_sb_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 = "prc_inc_gff.nss"
|
||||||
|
filter = "inc_infusion.nss"
|
||||||
|
|
||||||
[target.rules]
|
[target.rules]
|
||||||
"*" = "src/hakpak/salt_prc8_top/$ext"
|
"*" = "src/hakpak/salt_prc8_top/$ext"
|
||||||
@@ -1 +1 @@
|
|||||||
nasher pack default --verbose
|
nasher pack default --verbose -d
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
12 172 twobladedsword 2 5 0x1C010 1 2 WDbSw 0 1 1 1 it_bag iwdbsw 0 8 3 4 **** 1.5 10 255 1 8 2 2 1 100 1 2 1702 10 8 0 0 1 **** **** **** **** **** 4 0 0 5431 0 1 150 11 **** **** **** 50 50 50 99 1 127 655 165 693 89 745 531 943 **** ****
|
12 172 twobladedsword 2 5 0x1C010 1 2 WDbSw 0 1 1 1 it_bag iwdbsw 0 8 3 4 **** 1.5 10 255 1 8 2 2 1 100 1 2 1702 10 8 0 0 1 **** **** **** **** **** 4 0 0 5431 0 1 150 11 **** **** **** 50 50 50 99 1 127 655 165 693 89 745 531 943 **** ****
|
||||||
13 167 greatsword 2 5 0x1C030 1 2 WSwGs 0 1 1 1 it_bag iwswgs 0 **** 3 3 **** 1.8 10 255 2 6 2 2 1 50 1 2 1693 9 8 0 0 1 **** **** **** **** **** 4 0 0 5427 0 1 150 11 **** **** **** 65 65 35 99 1 107 637 145 675 69 727 513 929 **** ****
|
13 167 greatsword 2 5 0x1C030 1 2 WSwGs 0 1 1 1 it_bag iwswgs 0 **** 3 3 **** 1.8 10 255 2 6 2 2 1 50 1 2 1693 9 8 0 0 1 **** **** **** **** **** 4 0 0 5427 0 1 150 11 **** **** **** 65 65 35 99 1 107 637 145 675 69 727 513 929 **** ****
|
||||||
14 179 smallshield 2 2 0x00020 0 0 AShSw 0 1 1 1 it_bag iashsw 0 7 0 **** **** **** 10 255 **** **** **** **** 3 9 1 1 2287 16 8 0 6 0 32 4565 **** **** **** 3 1 -1 5443 0 1 60 **** **** **** 5 **** **** **** 7 1 **** **** **** **** **** **** **** **** **** ****
|
14 179 smallshield 2 2 0x00020 0 0 AShSw 0 1 1 1 it_bag iashsw 0 7 0 **** **** **** 10 255 **** **** **** **** 3 9 1 1 2287 16 8 0 6 0 32 4565 **** **** **** 3 1 -1 5443 0 1 60 **** **** **** 5 **** **** **** 7 1 **** **** **** **** **** **** **** **** **** ****
|
||||||
15 180 torch 1 3 0x00020 1 0 it_torch 0 **** **** **** it_bag iit_torch_000 0 1 0 2 **** **** 0 255 **** **** **** **** 20 1 1 0.02 1725 17 8 0 20 4 **** **** **** **** **** **** 0 0 5444 0 1 1 **** **** **** **** **** **** **** 0 1 **** **** **** **** **** **** **** **** **** ****
|
15 180 torch 1 3 0x00020 1 0 it_torch 0 **** **** **** it_bag iit_torch_000 0 1 0 2 **** **** 0 255 **** **** **** **** 20 1 1 0.02 1725 17 8 0 20 4 **** **** **** **** **** **** 0 0 5444 0 1 1 **** **** **** **** **** **** **** 0 1 **** **** **** **** **** **** **** **** 1 ****
|
||||||
16 335 armor 2 3 0x00002 0 3 AArCl 1 1 **** **** gifp iit_chest 0 **** 0 **** **** **** 0 255 **** **** **** **** 4 **** 1 1 **** 30 8 0 6 0 **** **** **** **** **** 2 0 0 **** 0 0 100 **** **** **** **** **** **** **** 10 1 **** **** **** **** **** **** **** **** **** ****
|
16 335 armor 2 3 0x00002 0 3 AArCl 1 1 **** **** gifp iit_chest 0 **** 0 **** **** **** 0 255 **** **** **** **** 4 **** 1 1 **** 30 8 0 6 0 **** **** **** **** **** 2 0 0 **** 0 0 100 **** **** **** **** **** **** **** 10 1 **** **** **** **** **** **** **** **** **** ****
|
||||||
17 182 helmet 2 2 0x00001 0 1 helm 0 1 **** **** it_bag ihelm 0 **** 0 **** **** **** 0 255 **** **** **** **** 5 3 1 1 1710 0 8 0 7 0 **** **** **** **** **** 4 0 0 5445 0 0 20 **** **** **** **** **** **** **** 5 1 **** **** **** **** **** **** **** **** **** ****
|
17 182 helmet 2 2 0x00001 0 1 helm 0 1 **** **** it_bag ihelm 0 **** 0 **** **** **** 0 255 **** **** **** **** 5 3 1 1 1710 0 8 0 7 0 **** **** **** **** **** 4 0 0 5445 0 0 20 **** **** **** **** **** **** **** 5 1 **** **** **** **** **** **** **** **** **** ****
|
||||||
18 515 greataxe 2 4 0x1C030 1 2 WAxGr 0 1 1 1 it_bag iwaxgr 0 **** 3 3 **** 1.4 10 255 1 12 1 3 1 20 1 2 1692 9 8 0 0 1 **** **** **** **** **** 4 0 0 5426 0 1 200 17 **** **** **** 100 100 0 73 1 111 641 149 679 73 731 517 932 **** ****
|
18 515 greataxe 2 4 0x1C030 1 2 WAxGr 0 1 1 1 it_bag iwaxgr 0 **** 3 3 **** 1.4 10 255 1 12 1 3 1 20 1 2 1692 9 8 0 0 1 **** **** **** **** **** 4 0 0 5426 0 1 200 17 **** **** **** 100 100 0 73 1 111 641 149 679 73 731 517 932 **** ****
|
||||||
@@ -46,10 +46,10 @@
|
|||||||
42 1536 kukri 1 2 0x1C030 1 2 WSpKu 0 1 1 1 it_bag iwspku 0 **** 3 1 **** 1.2 10 255 1 4 3 2 1 8 1 2 2284 8 8 0 0 1 **** **** **** **** **** 4 0 0 5442 0 1 30 18 **** **** **** 65 65 35 18 1 118 648 156 686 80 738 524 881 **** 1
|
42 1536 kukri 1 2 0x1C030 1 2 WSpKu 0 1 1 1 it_bag iwspku 0 **** 3 1 **** 1.2 10 255 1 4 3 2 1 8 1 2 2284 8 8 0 0 1 **** **** **** **** **** 4 0 0 5442 0 1 30 18 **** **** **** 65 65 35 18 1 118 648 156 686 80 738 524 881 **** 1
|
||||||
43 **** DELETED **** **** 0x00000 **** **** **** **** **** **** **** it_bag **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
43 **** DELETED **** **** 0x00000 **** **** **** **** **** **** **** it_bag **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
44 1538 magicrod 1 3 0x00000 1 2 WMgRd 0 1 1 1 it_bag iwmgrd 0 **** **** **** **** **** 10 255 **** **** **** **** 8 1 1 1 1708 16 8 0 4 3 **** **** **** **** **** **** 0 0 66197 50 1 20 **** **** 1 **** **** **** **** 10 1 **** **** **** **** **** **** **** **** **** ****
|
44 1538 magicrod 1 3 0x00000 1 2 WMgRd 0 1 1 1 it_bag iwmgrd 0 **** **** **** **** **** 10 255 **** **** **** **** 8 1 1 1 1708 16 8 0 4 3 **** **** **** **** **** **** 0 0 66197 50 1 20 **** **** 1 **** **** **** **** 10 1 **** **** **** **** **** **** **** **** **** ****
|
||||||
45 1539 magicstaff 1 5 0x1C010 1 2 WMgSt 0 1 1 1 it_bag iwmgst 0 4 2 3 **** 1.6 10 255 1 6 1 2 8 1 1 1 1709 15 8 3 3 3 **** **** **** **** **** 4 0 0 76436 50 1 40 4 **** **** **** 50 50 50 10 1 **** **** **** **** **** **** **** **** **** ****
|
45 1539 magicstaff 1 5 0x1C010 1 2 WMgSt 0 1 1 1 it_bag iwmgst 0 4 2 3 **** 1.6 10 255 1 6 1 2 8 1 1 1 1709 15 8 3 3 3 **** **** **** **** **** 4 0 0 76436 50 1 40 4 **** **** **** 50 50 50 10 1 96 626 134 664 58 716 502 923 1 ****
|
||||||
46 1540 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 **** **** **** **** **** **** **** **** **** ****
|
46 1540 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 **** **** **** **** **** **** **** **** **** ****
|
||||||
47 1541 morningstar 1 3 0x1C030 1 2 WBlMs 0 1 1 1 it_bag iwblms 0 **** 5 3 **** 1.4 10 255 1 8 1 2 1 8 1 2 1671 11 8 0 0 1 **** **** **** **** **** 4 0 0 5412 0 1 80 3 **** **** **** 100 100 0 20 1 95 625 133 663 57 715 501 922 **** ****
|
47 1541 morningstar 1 3 0x1C030 1 2 WBlMs 0 1 1 1 it_bag iwblms 0 **** 5 3 **** 1.4 10 255 1 8 1 2 1 8 1 2 1671 11 8 0 0 1 **** **** **** **** **** 4 0 0 5412 0 1 80 3 **** **** **** 100 100 0 20 1 95 625 133 663 57 715 501 922 **** ****
|
||||||
48 0 DELETED 2 2 0x1C030 0 2 WSpNn 0 1 1 1 it_bag **** 0 **** 0 2 **** **** 10 255 1 6 1 2 1 2 1 2 1700 30 8 0 0 **** **** **** **** **** **** 4 0 0 5397 0 1 20 **** **** **** **** **** **** **** 0 1 **** **** **** **** **** **** **** **** **** ****
|
48 0 DELETED 2 2 0x1C030 0 2 WSpNn 0 1 1 1 it_bag **** 0 **** 0 2 **** **** 10 255 1 6 1 2 **** 2 1 2 1700 30 8 0 0 **** **** **** **** **** **** 4 0 0 5397 0 1 20 **** **** **** **** **** **** **** 0 1 **** **** **** **** **** **** **** **** **** ****
|
||||||
49 1543 potions 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 **** **** **** **** **** **** **** **** **** ****
|
49 1543 potions 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 **** **** **** **** **** **** **** **** **** ****
|
||||||
50 1544 quarterstaff 1 4 0x1C010 1 2 WDbQs 0 1 1 1 it_bag iwdbqs 0 4 2 3 **** 1.6 10 255 1 6 1 2 1 1 1 2 1673 15 8 0 0 1 **** **** **** **** **** 4 0 0 5413 0 1 40 4 **** **** **** 50 50 50 99 1 96 626 134 664 58 716 502 923 1 ****
|
50 1544 quarterstaff 1 4 0x1C010 1 2 WDbQs 0 1 1 1 it_bag iwdbqs 0 4 2 3 **** 1.6 10 255 1 6 1 2 1 1 1 2 1673 15 8 0 0 1 **** **** **** **** **** 4 0 0 5413 0 1 40 4 **** **** **** 50 50 50 99 1 96 626 134 664 58 716 502 923 1 ****
|
||||||
51 1545 rapier 1 3 0x1C030 1 2 WSwRp 0 1 1 1 it_bag iwswrp 0 **** 1 3 **** 1.4 10 255 1 6 3 2 1 20 1 2 1688 7 8 0 0 1 **** **** **** **** **** 4 0 0 5418 0 1 30 18 **** **** **** 35 35 65 28 1 104 634 142 672 66 724 510 926 **** 3
|
51 1545 rapier 1 3 0x1C030 1 2 WSwRp 0 1 1 1 it_bag iwswrp 0 **** 1 3 **** 1.4 10 255 1 6 3 2 1 20 1 2 1688 7 8 0 0 1 **** **** **** **** **** 4 0 0 5418 0 1 30 18 **** **** **** 35 35 65 28 1 104 634 142 672 66 724 510 926 **** 3
|
||||||
@@ -104,7 +104,7 @@
|
|||||||
100 **** RESERVED_poisons **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
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 **** **** **** **** **** **** **** **** **** ****
|
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 **** **** **** **** **** **** **** **** **** ****
|
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 **** **** **** **** **** **** **** **** **** ****
|
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 **** **** **** **** **** **** **** **** **** ****
|
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 **** **** **** **** **** **** **** **** **** ****
|
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 **** **** **** **** **** **** **** **** **** ****
|
||||||
@@ -126,7 +126,7 @@
|
|||||||
122 16807269 heavy_mace 1 3 0x1C030 1 2 wxblmh 0 1 1 1 it_bag iwxblmh 0 **** 2 3 **** 1.2 10 255 1 8 1 2 1 6 1 2 16807270 14 8 0 0 1 **** **** **** **** **** 4 0 0 16807271 0 1 80 2 **** **** **** 100 100 0 99 1 24609 24621 24633 24645 24657 24669 24681 24693 **** ****
|
122 16807269 heavy_mace 1 3 0x1C030 1 2 wxblmh 0 1 1 1 it_bag iwxblmh 0 **** 2 3 **** 1.2 10 255 1 8 1 2 1 6 1 2 16807270 14 8 0 0 1 **** **** **** **** **** 4 0 0 16807271 0 1 80 2 **** **** **** 100 100 0 99 1 24609 24621 24633 24645 24657 24669 24681 24693 **** ****
|
||||||
123 16807272 maul 2 4 0x1C030 1 2 wxblma 0 1 1 1 it_bag iwxblma 0 **** 2 3 **** 1.2 10 255 1 10 1 3 1 8 1 2 16807273 14 8 0 0 1 **** **** **** **** **** 4 0 0 16807274 0 1 200 12 **** **** **** 100 100 0 99 1 24610 24622 24634 24646 24658 24670 24682 24694 **** ****
|
123 16807272 maul 2 4 0x1C030 1 2 wxblma 0 1 1 1 it_bag iwxblma 0 **** 2 3 **** 1.2 10 255 1 10 1 3 1 8 1 2 16807273 14 8 0 0 1 **** **** **** **** **** 4 0 0 16807274 0 1 200 12 **** **** **** 100 100 0 99 1 24610 24622 24634 24646 24658 24670 24682 24694 **** ****
|
||||||
124 16807275 scimitar_double 2 5 0x1c010 1 2 wxdbsc 0 1 1 1 it_bag iwxdbsc 0 8 3 4 **** 1.5 10 255 1 6 3 2 1 63 1 2 16807276 10 8 0 0 1 **** **** **** **** **** 4 0 0 16807277 0 1 150 11 **** **** **** 50 50 50 99 1 24611 24623 24635 24647 24659 24671 24683 24695 **** ****
|
124 16807275 scimitar_double 2 5 0x1c010 1 2 wxdbsc 0 1 1 1 it_bag iwxdbsc 0 8 3 4 **** 1.5 10 255 1 6 3 2 1 63 1 2 16807276 10 8 0 0 1 **** **** **** **** **** 4 0 0 16807277 0 1 150 11 **** **** **** 50 50 50 99 1 24611 24623 24635 24647 24659 24671 24683 24695 **** ****
|
||||||
125 16807284 goad 1 2 0x1C030 0 2 wspgd 0 1 1 1 it_bag iwspgd 0 **** 1 2 **** 1.1 10 255 1 6 1 2 1 6 1 2 16807285 8 8 0 0 1 **** **** **** **** **** 4 0 0 16807286 0 1 30 18 **** **** **** 35 35 65 22 1 24612 24624 24636 24348 24660 24672 24684 24596 **** 2
|
125 16807284 goad 2 2 0x1C030 0 2 wspgd 0 1 1 1 it_bag iwspgd 0 **** 1 2 **** 1.1 10 255 1 6 1 2 1 6 1 2 16807285 8 8 0 0 1 **** **** **** **** **** 4 0 0 16807286 0 1 30 18 **** **** **** 35 35 65 22 1 24612 24624 24636 24348 24660 24672 24684 24596 **** 2
|
||||||
126 16793718 eagleclaw 1 2 0x1C030 1 2 wswec 0 1 1 1 it_bag iwswec 0 **** 4 2 **** 1.2 10 255 1 6 3 2 1 20 1 2 16793719 8 8 0 0 1 **** **** **** **** **** 4 0 0 16793720 0 1 20 1 **** **** **** 35 35 65 19 1 24721 24722 24723 24724 24725 24726 24727 24728 **** 2
|
126 16793718 eagleclaw 1 2 0x1C030 1 2 wswec 0 1 1 1 it_bag iwswec 0 **** 4 2 **** 1.2 10 255 1 6 3 2 1 20 1 2 16793719 8 8 0 0 1 **** **** **** **** **** 4 0 0 16793720 0 1 20 1 **** **** **** 35 35 65 19 1 24721 24722 24723 24724 24725 24726 24727 24728 **** 2
|
||||||
127 **** padding **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
127 **** padding **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
128 **** padding **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
128 **** padding **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@@ -250,11 +250,11 @@
|
|||||||
246 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
246 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
247 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
247 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
248 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
248 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
249 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
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 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
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 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
251 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
252 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
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 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
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 **** **** **** **** **** **** **** **** **** ****
|
||||||
254 **** ***WIKI_LAST_ROW*** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
254 **** ***WIKI_LAST_ROW*** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
255 **** USER **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
255 **** USER **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
256 **** USER **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
256 **** USER **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
|||||||
@@ -12,26 +12,26 @@
|
|||||||
8 Rogue 112195 16 17 4898 248 IR_ROGUE 6 CLS_ATK_2 CLS_FEAT_ROG CLS_SAVTHR_ROG CLS_SKILL_ROG CLS_BFEAT_ROG 8 **** **** 1 0 12 16 14 8 14 12 DEX 0X00 0X0 0 CLASS_TYPE_ROGUE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ROG 0 1 0 0 -1 8 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
8 Rogue 112195 16 17 4898 248 IR_ROGUE 6 CLS_ATK_2 CLS_FEAT_ROG CLS_SAVTHR_ROG CLS_SKILL_ROG CLS_BFEAT_ROG 8 **** **** 1 0 12 16 14 8 14 12 DEX 0X00 0X0 0 CLASS_TYPE_ROGUE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ROG 0 1 0 0 -1 8 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
9 Sorcerer 112196 18 19 4899 249 IR_SORCERER 4 CLS_ATK_3 CLS_FEAT_SORC CLS_SAVTHR_SORC CLS_SKILL_SORC CLS_BFEAT_SORC 2 CLS_SPGN_SORC CLS_SPKN_SORC 1 1 10 14 14 10 12 16 CHA 0X00 0X0 0 CLASS_TYPE_SORCERER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SORC 0 1 0 0 -1 9 131 **** 0 1 0 0 0 1 1 CHA Wiz_Sorc 1 1 1 0 0
|
9 Sorcerer 112196 18 19 4899 249 IR_SORCERER 4 CLS_ATK_3 CLS_FEAT_SORC CLS_SAVTHR_SORC CLS_SKILL_SORC CLS_BFEAT_SORC 2 CLS_SPGN_SORC CLS_SPKN_SORC 1 1 10 14 14 10 12 16 CHA 0X00 0X0 0 CLASS_TYPE_SORCERER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SORC 0 1 0 0 -1 9 131 **** 0 1 0 0 0 1 1 CHA Wiz_Sorc 1 1 1 0 0
|
||||||
10 Wizard 112197 20 21 4900 250 IR_WIZARD 4 CLS_ATK_3 CLS_FEAT_WIZ CLS_SAVTHR_WIZ CLS_SKILL_WIZ CLS_BFEAT_WIZ 2 CLS_SPGN_WIZ **** 1 1 10 14 14 12 16 10 INT 0X00 0X0 0 CLASS_TYPE_WIZARD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WIZ 0 1 0 0 -1 10 209 **** 1 1 0 1 1 1 1 INT Wiz_Sorc 1 1 1 0 0
|
10 Wizard 112197 20 21 4900 250 IR_WIZARD 4 CLS_ATK_3 CLS_FEAT_WIZ CLS_SAVTHR_WIZ CLS_SKILL_WIZ CLS_BFEAT_WIZ 2 CLS_SPGN_WIZ **** 1 1 10 14 14 12 16 10 INT 0X00 0X0 0 CLASS_TYPE_WIZARD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WIZ 0 1 0 0 -1 10 209 **** 1 1 0 1 1 1 1 INT Wiz_Sorc 1 1 1 0 0
|
||||||
11 Aberration 112198 525 525 4901 8154 IR_WIZARD 8 CLS_ATK_2 CLS_FEAT_ABER CLS_SAVTHR_WIZ CLS_SKILL_CREA CLS_BFEAT_BARB 2 **** **** 1 0 14 14 11 14 3 5 STR 0X00 0X0 0 CLASS_TYPE_ABERRATION 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ABER 0 0 0 0 -1 73 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
11 Aberration 112198 525 525 4901 8154 IR_WIZARD 8 CLS_ATK_2 CLS_FEAT_ABER CLS_SAVTHR_WIZ CLS_SKILL_CREA CLS_BFEAT_BARB 2 **** **** 1 0 14 14 11 14 3 5 STR 0X00 0X0 0 CLASS_TYPE_ABERRATION 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ABER 0 0 0 0 -1 73 0 **** **** **** **** **** **** **** **** **** Aberration **** **** **** **** ****
|
||||||
12 Animal 112199 526 526 4902 8154 IR_WIZARD 8 CLS_ATK_2 CLS_FEAT_CREA CLS_SAVTHR_WILD CLS_SKILL_CREA CLS_BFEAT_BARB 2 **** **** 0 0 13 17 15 12 2 6 STR 0X00 0X0 0 CLASS_TYPE_ANIMAL 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ANI 0 0 0 0 -1 74 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
12 Animal 112199 526 526 4902 8154 IR_WIZARD 8 CLS_ATK_2 CLS_FEAT_CREA CLS_SAVTHR_WILD CLS_SKILL_CREA CLS_BFEAT_BARB 2 **** **** 0 0 13 17 15 12 2 6 STR 0X00 0X0 0 CLASS_TYPE_ANIMAL 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ANI 0 0 0 0 -1 74 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
13 Construct 112200 528 528 4903 8154 IR_WIZARD 10 CLS_ATK_2 CLS_FEAT_CREA CLS_SAVTHR_CONS CLS_SKILL_CREA CLS_BFEAT_BARB 0 **** **** 1 0 21 9 10 11 10 3 STR 0X00 0X0 0 CLASS_TYPE_CONSTRUCT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_CON 0 0 0 0 -1 75 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
13 Construct 112200 528 528 4903 8154 IR_WIZARD 10 CLS_ATK_2 CLS_FEAT_CREA CLS_SAVTHR_CONS CLS_SKILL_CREA CLS_BFEAT_BARB 0 **** **** 1 0 21 9 10 11 10 3 STR 0X00 0X0 0 CLASS_TYPE_CONSTRUCT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_CON 0 0 0 0 -1 75 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
14 Humanoid 112201 1763 1764 4904 8154 IR_WIZARD 8 CLS_ATK_2 CLS_FEAT_CREA CLS_SAVTHR_FIGHT CLS_SKILL_CREA CLS_BFEAT_BARB 6 **** **** 1 0 15 10 13 11 8 8 STR 0X00 0X0 0 CLASS_TYPE_HUMANOID 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_HUM 0 0 0 0 -1 76 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
14 Humanoid 112201 1763 1764 4904 8154 IR_WIZARD 8 CLS_ATK_2 CLS_FEAT_CREA CLS_SAVTHR_FIGHT CLS_SKILL_CREA CLS_BFEAT_BARB 6 **** **** 1 0 15 10 13 11 8 8 STR 0X00 0X0 0 CLASS_TYPE_HUMANOID 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_HUM 0 0 0 0 -1 76 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
15 Monstrous 112202 536 536 4905 8154 IR_WIZARD 8 CLS_ATK_1 CLS_FEAT_MONHUM CLS_SAVTHR_BARD CLS_SKILL_CREA CLS_BFEAT_BARB 2 **** **** 1 0 19 10 15 10 7 8 STR 0X00 0X0 0 CLASS_TYPE_MONSTEROUS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_MON 0 0 0 0 -1 77 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
15 Monstrous 112202 536 536 4905 8154 IR_WIZARD 8 CLS_ATK_1 CLS_FEAT_MONHUM CLS_SAVTHR_BARD CLS_SKILL_CREA CLS_BFEAT_BARB 2 **** **** 1 0 19 10 15 10 7 8 STR 0X00 0X0 0 CLASS_TYPE_MONSTEROUS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_MON 0 0 0 0 -1 77 0 **** **** **** **** **** **** **** **** **** Monstrous **** **** **** **** ****
|
||||||
16 Elemental 112203 539 539 4906 8154 IR_WIZARD 8 CLS_ATK_2 CLS_FEAT_CREA CLS_SAVTHR_FIGHT CLS_SKILL_CREA CLS_BFEAT_BARB 2 **** **** 1 0 17 8 13 11 4 11 STR 0X00 0X0 0 CLASS_TYPE_ELEMENTAL 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ELE 0 0 0 0 -1 78 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
16 Elemental 112203 539 539 4906 8154 IR_WIZARD 8 CLS_ATK_2 CLS_FEAT_CREA CLS_SAVTHR_FIGHT CLS_SKILL_CREA CLS_BFEAT_BARB 2 **** **** 1 0 17 8 13 11 4 11 STR 0X00 0X0 0 CLASS_TYPE_ELEMENTAL 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ELE 0 0 0 0 -1 78 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
17 Fey 112204 540 540 4907 8154 IR_WIZARD 6 CLS_ATK_3 CLS_FEAT_FEY CLS_SAVTHR_BARD CLS_SKILL_FEY CLS_BFEAT_BARB 6 **** **** 1 0 10 15 11 15 14 18 DEX 0X00 0X0 0 CLASS_TYPE_FEY 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_FEY 0 0 0 0 -1 79 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
17 Fey 112204 540 540 4907 8154 IR_WIZARD 6 CLS_ATK_3 CLS_FEAT_FEY CLS_SAVTHR_BARD CLS_SKILL_FEY CLS_BFEAT_BARB 6 **** **** 1 0 10 15 11 15 14 18 DEX 0X00 0X0 0 CLASS_TYPE_FEY 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_FEY 0 0 0 0 -1 79 0 **** **** **** **** **** **** **** **** **** Fey **** **** **** **** ****
|
||||||
18 Dragon 112205 529 529 4908 8154 IR_DRGNFIREADPT 12 CLS_ATK_1 CLS_FEAT_DRAG CLS_SAVTHR_MONK CLS_SKILL_DRAGON CLS_BFEAT_BARB 6 **** **** 1 0 13 10 13 10 11 10 STR 0X00 0X0 0 CLASS_TYPE_DRAGON 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_DRAG 0 0 0 0 -1 80 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
18 Dragon 112205 529 529 4908 8154 IR_DRGNFIREADPT 12 CLS_ATK_1 CLS_FEAT_DRAG CLS_SAVTHR_MONK CLS_SKILL_DRAGON CLS_BFEAT_BARB 6 **** **** 1 0 13 10 13 10 11 10 STR 0X00 0X0 0 CLASS_TYPE_DRAGON 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_DRAG 0 0 0 0 -1 80 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
19 Undead 112206 547 547 4909 8154 IR_WIZARD 12 CLS_ATK_3 CLS_FEAT_CREA CLS_SAVTHR_WIZ CLS_SKILL_CREA CLS_BFEAT_BARB 4 **** **** 1 0 10 12 10 10 10 11 STR 0X00 0X0 0 CLASS_TYPE_UNDEAD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_UNDEAD 0 0 0 0 -1 81 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
19 Undead 112206 547 547 4909 8154 IR_WIZARD 12 CLS_ATK_3 CLS_FEAT_CREA CLS_SAVTHR_WIZ CLS_SKILL_CREA CLS_BFEAT_BARB 4 **** **** 1 0 10 12 10 10 10 11 STR 0X00 0X0 0 CLASS_TYPE_UNDEAD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_UNDEAD 0 0 0 0 -1 81 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
20 Commoner 112207 2291 2292 4910 8155 IR_WIZARD 4 CLS_ATK_3 CLS_FEAT_COMM CLS_SAVTHR_CONS CLS_SKILL_CREA CLS_BFEAT_BARB 2 **** **** 1 0 10 10 12 10 10 10 STR 0X00 0X0 0 CLASS_TYPE_COMMONER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 **** 0 0 0 0 -1 82 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
20 Commoner 112207 2291 2292 4910 8155 IR_WIZARD 4 CLS_ATK_3 CLS_FEAT_COMM CLS_SAVTHR_CONS CLS_SKILL_CREA CLS_BFEAT_BARB 2 **** **** 1 0 10 10 12 10 10 10 STR 0X00 0X0 0 CLASS_TYPE_COMMONER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 **** 0 0 0 0 -1 82 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
21 Beast 112208 527 527 4911 8154 IR_WIZARD 10 CLS_ATK_2 CLS_FEAT_CREA CLS_SAVTHR_WILD CLS_SKILL_CREA CLS_BFEAT_BARB 2 **** **** 0 0 16 13 16 3 12 8 STR 0X00 0X0 0 CLASS_TYPE_BEAST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_BEAST 0 0 0 0 -1 83 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
21 Beast 112208 527 527 4911 8154 IR_WIZARD 10 CLS_ATK_2 CLS_FEAT_CREA CLS_SAVTHR_WILD CLS_SKILL_CREA CLS_BFEAT_BARB 2 **** **** 0 0 16 13 16 3 12 8 STR 0X00 0X0 0 CLASS_TYPE_BEAST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_BEAST 0 0 0 0 -1 83 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
22 Giant 112209 541 541 4912 8154 IR_WIZARD 8 CLS_ATK_2 CLS_FEAT_GIAN CLS_SAVTHR_FIGHT CLS_SKILL_CREA CLS_BFEAT_BARB 2 **** **** 1 0 25 8 19 10 6 17 STR 0X00 0X0 0 CLASS_TYPE_GIANT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_GIANT 0 0 0 0 -1 84 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
22 Giant 112209 541 541 4912 8154 IR_WIZARD 8 CLS_ATK_2 CLS_FEAT_GIAN CLS_SAVTHR_FIGHT CLS_SKILL_CREA CLS_BFEAT_BARB 2 **** **** 1 0 25 8 19 10 6 17 STR 0X00 0X0 0 CLASS_TYPE_GIANT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_GIANT 0 0 0 0 -1 84 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
23 MagicBeast 112210 542 542 4913 8154 IR_WIZARD 10 CLS_ATK_1 CLS_FEAT_CREA CLS_SAVTHR_WILD CLS_SKILL_CREA CLS_BFEAT_BARB 2 **** **** 0 0 15 8 15 12 2 10 STR 0X00 0X0 0 CLASS_TYPE_MAGICAL_BEAST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_MAGBST 0 0 0 0 -1 85 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
23 MagicBeast 112210 542 542 4913 8154 IR_WIZARD 10 CLS_ATK_1 CLS_FEAT_CREA CLS_SAVTHR_WILD CLS_SKILL_CREA CLS_BFEAT_BARB 2 **** **** 0 0 15 8 15 12 2 10 STR 0X00 0X0 0 CLASS_TYPE_MAGICAL_BEAST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_MAGBST 0 0 0 0 -1 85 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
24 Outsider 112211 4812 4812 4914 8154 IR_WIZARD 8 CLS_ATK_1 CLS_FEAT_OUTS CLS_SAVTHR_MONK CLS_SKILL_OUTS CLS_BFEAT_BARB 8 **** **** 1 0 15 10 13 13 10 12 STR 0X00 0X0 0 CLASS_TYPE_OUTSIDER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_OUTS 0 0 0 0 -1 86 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
24 Outsider 112211 4812 4812 4914 8154 IR_WIZARD 8 CLS_ATK_1 CLS_FEAT_OUTS CLS_SAVTHR_MONK CLS_SKILL_OUTS CLS_BFEAT_BARB 8 **** **** 1 0 15 10 13 13 10 12 STR 0X00 0X0 0 CLASS_TYPE_OUTSIDER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_OUTS 0 0 0 0 -1 86 0 **** **** **** **** **** **** **** **** **** Outsider **** **** **** **** ****
|
||||||
25 Shapechanger 112212 546 546 4915 8154 IR_WIZARD 8 CLS_ATK_2 CLS_FEAT_SHCHNG CLS_SAVTHR_MONK CLS_SKILL_CREA CLS_BFEAT_BARB 2 **** **** 1 0 15 11 17 10 10 10 STR 0X00 0X0 0 CLASS_TYPE_SHAPECHANGER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SHAPE 0 0 0 0 -1 87 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25 Shapechanger 112212 546 546 4915 8154 IR_WIZARD 8 CLS_ATK_2 CLS_FEAT_SHCHNG CLS_SAVTHR_MONK CLS_SKILL_CREA CLS_BFEAT_BARB 2 **** **** 1 0 15 11 17 10 10 10 STR 0X00 0X0 0 CLASS_TYPE_SHAPECHANGER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SHAPE 0 0 0 0 -1 87 0 **** **** **** **** **** **** **** **** **** Shapechanger **** **** **** **** ****
|
||||||
26 Vermin 112213 548 548 4916 8154 IR_WIZARD 8 CLS_ATK_2 CLS_FEAT_CREA CLS_SAVTHR_FIGHT CLS_SKILL_CREA CLS_BFEAT_BARB 2 **** **** 0 0 11 17 12 10 10 3 STR 0X00 0X0 0 CLASS_TYPE_VERMIN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_VERMIN 0 0 0 0 -1 88 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
26 Vermin 112213 548 548 4916 8154 IR_WIZARD 8 CLS_ATK_2 CLS_FEAT_CREA CLS_SAVTHR_FIGHT CLS_SKILL_CREA CLS_BFEAT_BARB 2 **** **** 0 0 11 17 12 10 10 3 STR 0X00 0X0 0 CLASS_TYPE_VERMIN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_VERMIN 0 0 0 0 -1 88 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
27 Shadowdancer 112214 2944 2945 2946 2947 IR_X1_SHADOW 8 CLS_ATK_2 CLS_FEAT_SHADOW CLS_SAVTHR_ROG CLS_SKILL_SHADOW CLS_BFEAT_SHADOW 6 **** **** 1 0 12 16 14 8 14 12 DEX 0X00 0X0 0 CLASS_TYPE_SHADOWDANCER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SHADOW 40 0 0 0 10 63 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
27 Shadowdancer 112214 2944 2945 2946 2947 IR_X1_SHADOW 8 CLS_ATK_2 CLS_FEAT_SHADOW CLS_SAVTHR_ROG CLS_SKILL_SHADOW CLS_BFEAT_SHADOW 6 **** **** 1 0 12 16 14 8 14 12 DEX 0X00 0X0 0 CLASS_TYPE_SHADOWDANCER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SHADOW 40 0 0 0 10 63 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
28 Harper 112215 2956 2957 2958 2959 IR_X1_HARPER 6 CLS_ATK_2 CLS_FEAT_HARPER CLS_SAVTHR_BARD CLS_SKILL_HARPER CLS_BFEAT_HARPER 4 CLS_SPGN_HARPER CLS_SPKN_HARPER 0 1 12 16 14 8 14 12 DEX 0X10 0X2 0 CLASS_TYPE_HARPER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_HARPER 5 0 0 0 5 64 130 **** **** **** **** **** **** **** **** **** Harper **** **** **** **** ****
|
28 Harper 112215 2956 2957 2958 2959 IR_X1_HARPER 6 CLS_ATK_2 CLS_FEAT_HARPER CLS_SAVTHR_BARD CLS_SKILL_HARPER CLS_BFEAT_HARPER 4 CLS_SPGN_HARPER CLS_SPKN_HARPER 0 1 12 16 14 8 14 12 DEX 0X10 0X2 0 CLASS_TYPE_HARPER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_HARPER 5 0 0 0 5 64 130 **** **** **** **** **** **** **** **** **** Harper **** **** **** **** ****
|
||||||
29 Arcane_Archer 112216 9003 9004 9005 9006 IR_ARCHER 8 CLS_ATK_1 CLS_FEAT_ARCHER CLS_SAVTHR_WILD CLS_SKILL_ARCHER CLS_BFEAT_ARCHER 4 **** **** 1 0 12 16 14 8 14 12 DEX 0X00 0X0 0 CLASS_TYPE_ARCANE_ARCHER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ARCHER 40 0 0 0 10 65 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
29 Arcane_Archer 112216 9003 9004 9005 9006 IR_ARCHER 8 CLS_ATK_1 CLS_FEAT_ARCHER CLS_SAVTHR_WILD CLS_SKILL_ARCHER CLS_BFEAT_ARCHER 4 **** **** 1 0 12 16 14 8 14 12 DEX 0X00 0X0 0 CLASS_TYPE_ARCANE_ARCHER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ARCHER 40 0 0 0 10 65 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
30 Assassin 112217 9007 9008 9009 16790386 IR_ASASIN 6 CLS_ATK_2 CLS_FEAT_ASASIN CLS_SAVTHR_ROG CLS_SKILL_ASASIN CLS_BFEAT_ASASIN 4 CLS_SPGN_ASASIN CLS_SPKN_ASASIN 1 1 12 16 14 8 14 12 DEX 0X09 0X2 0 CLASS_TYPE_ASSASSIN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ASASIN 40 0 0 0 10 66 131 **** **** **** **** **** **** **** **** **** Assassin **** **** **** **** ****
|
30 Assassin 112217 9007 9008 9009 16790386 IR_ASASIN 6 CLS_ATK_2 CLS_FEAT_ASASIN CLS_SAVTHR_ROG CLS_SKILL_ASASIN CLS_BFEAT_ASASIN 4 CLS_SPGN_ASASIN **** 1 1 12 16 14 8 14 12 DEX 0X09 0X2 0 CLASS_TYPE_ASSASSIN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ASASIN 40 0 0 0 10 66 131 **** 1 1 0 0 1 1 1 INT Assassin 1 1 255 0 0
|
||||||
31 Blackguard 112218 9011 9012 9013 16790387 IR_BLKGRD 10 CLS_ATK_1 CLS_FEAT_BLKGRD CLS_SAVTHR_FIGHT CLS_SKILL_BLKGRD CLS_BFEAT_BLKGRD 2 CLS_SPGN_BLKGRD **** 1 1 12 16 14 8 14 12 CON 0X09 0X2 0 CLASS_TYPE_BLACKGUARD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_BLKGRD 40 0 0 0 10 67 0 **** 1 0 0 0 0 0 0 WIS Blackguard 1 1 255 0 0
|
31 Blackguard 112218 9011 9012 9013 16790387 IR_BLKGRD 10 CLS_ATK_1 CLS_FEAT_BLKGRD CLS_SAVTHR_FIGHT CLS_SKILL_BLKGRD CLS_BFEAT_BLKGRD 2 CLS_SPGN_BLKGRD **** 1 1 12 16 14 8 14 12 CON 0X09 0X2 0 CLASS_TYPE_BLACKGUARD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_BLKGRD 40 0 0 0 10 67 0 **** 1 0 0 0 0 0 0 WIS Blackguard 1 1 255 0 0
|
||||||
32 Champion_Torm 112219 9015 9016 9017 9018 IR_DIVCHA 10 CLS_ATK_1 CLS_FEAT_DIVCHA CLS_SAVTHR_WILD CLS_SKILL_DIVCHA CLS_BFEAT_DIVCHA 2 **** **** 0 0 12 16 14 8 14 12 CHA 0X10 0X2 0 CLASS_TYPE_DIVINE_CHAMPION 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_DIVCHA 40 0 0 0 10 109 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
32 Champion_Torm 112219 9015 9016 9017 9018 IR_DIVCHA 10 CLS_ATK_1 CLS_FEAT_DIVCHA CLS_SAVTHR_WILD CLS_SKILL_DIVCHA CLS_BFEAT_DIVCHA 2 **** **** 0 0 12 16 14 8 14 12 CHA 0X10 0X2 0 CLASS_TYPE_DIVINE_CHAMPION 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_DIVCHA 40 0 0 0 10 109 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
33 WeaponMaster 112220 9019 9019 9021 9022 IR_WM 10 CLS_ATK_1 CLS_FEAT_WM CLS_SAVTHR_ROG CLS_SKILL_WM CLS_BFEAT_WM 2 **** **** 1 0 12 16 14 8 14 12 STR 0X00 0X0 0 CLASS_TYPE_WEAPON_MASTER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WM 40 0 0 0 10 112 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
33 WeaponMaster 112220 9019 9019 9021 9022 IR_WM 10 CLS_ATK_1 CLS_FEAT_WM CLS_SAVTHR_ROG CLS_SKILL_WM CLS_BFEAT_WM 2 **** **** 1 0 12 16 14 8 14 12 STR 0X00 0X0 0 CLASS_TYPE_WEAPON_MASTER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WM 40 0 0 0 10 112 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
36 Dwarven_Defender 112223 76418 76419 76420 76422 IR_DWDEF 12 CLS_ATK_1 CLS_FEAT_DWDEF CLS_SAVTHR_CLER CLS_SKILL_DWDEF CLS_BFEAT_DWDEF 2 **** **** 1 0 16 8 15 14 10 12 STR 0X05 0X1 0 CLASS_TYPE_DWARVEN_DEFENDER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_DWDEF 40 0 0 0 10 89 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
36 Dwarven_Defender 112223 76418 76419 76420 76422 IR_DWDEF 12 CLS_ATK_1 CLS_FEAT_DWDEF CLS_SAVTHR_CLER CLS_SKILL_DWDEF CLS_BFEAT_DWDEF 2 **** **** 1 0 16 8 15 14 10 12 STR 0X05 0X1 0 CLASS_TYPE_DWARVEN_DEFENDER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_DWDEF 40 0 0 0 10 89 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
37 Dragon_Disciple 112224 16832127 16832128 16832129 16832130 IR_DRAGOND 6 CLS_ATK_2 CLS_FEAT_DRADIS CLS_SAVTHR_CLER CLS_SKILL_DRADIS CLS_BFEAT_DRADIS 2 **** **** 1 0 14 8 14 16 10 14 STR 0X00 0X0 0 CLASS_TYPE_DRAGON_DISCIPLE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_DRADIS 40 0 0 0 10 111 0 cls_stat_dradis **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
37 Dragon_Disciple 112224 16832127 16832128 16832129 16832130 IR_DRAGOND 6 CLS_ATK_2 CLS_FEAT_DRADIS CLS_SAVTHR_CLER CLS_SKILL_DRADIS CLS_BFEAT_DRADIS 2 **** **** 1 0 14 8 14 16 10 14 STR 0X00 0X0 0 CLASS_TYPE_DRAGON_DISCIPLE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_DRADIS 40 0 0 0 10 111 0 cls_stat_dradis **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
38 Ooze 112225 84438 84438 84437 8154 IR_CLERIC 10 CLS_ATK_2 CLS_FEAT_CLER CLS_SAVTHR_CLER CLS_SKILL_CLER CLS_BFEAT_CLER 0 **** **** 0 0 14 8 14 16 10 14 STR 0X00 0X0 0 CLASS_TYPE_OOZE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_OOZE 0 0 0 0 -1 75 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
38 Ooze 112225 84438 84438 84437 8154 IR_CLERIC 10 CLS_ATK_2 CLS_FEAT_CLER CLS_SAVTHR_CLER CLS_SKILL_CLER CLS_BFEAT_CLER 0 **** **** 0 0 14 8 14 16 10 14 STR 0X00 0X0 0 CLASS_TYPE_OOZE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_OOZE 0 0 0 0 -1 75 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
39 Eye_of_Gruumsh 16790665 16824294 16824295 16824296 16824297 IR_GRUUMSH 12 CLS_ATK_1 CLS_FEAT_EOG CLS_SAVTHR_BARB CLS_SKILL_EOG CLS_BFEAT_EOG 2 **** **** 1 0 16 14 14 14 10 8 STR 0X0A 0X3 0 CLASS_TYPE_PRC_EYE_OF_GRUUMSH 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_EOG 40 0 0 0 10 17 0 cls_stat_eog **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
39 Eye_of_Gruumsh 16790665 16824294 16824295 16824296 16824297 IR_GRUUMSH 12 CLS_ATK_1 CLS_FEAT_EOG CLS_SAVTHR_BARB CLS_SKILL_EOG CLS_BFEAT_EOG 2 **** **** 0 0 16 14 14 14 10 8 STR 0X0A 0X3 0 CLASS_TYPE_PRC_EYE_OF_GRUUMSH 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_EOG 40 0 0 0 10 17 0 cls_stat_eog **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
40 Shou_Disciple 16790649 16823346 16823347 16823348 16823349 IR_SHOUDISC 10 CLS_ATK_1 CLS_FEAT_SHOU CLS_SAVTHR_WILD CLS_SKILL_SHOU CLS_BFEAT_SHOU 2 **** **** 0 0 12 16 14 8 14 12 DEX 0X00 0X0 0 CLASS_TYPE_SHOU 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SHOU 5 0 0 0 5 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
40 Shou_Disciple 16790649 16823346 16823347 16823348 16823349 IR_SHOUDISC 10 CLS_ATK_1 CLS_FEAT_SHOU CLS_SAVTHR_WILD CLS_SKILL_SHOU CLS_BFEAT_SHOU 2 **** **** 0 0 12 16 14 8 14 12 DEX 0X00 0X0 0 CLASS_TYPE_SHOU 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SHOU 5 0 0 0 5 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
41 Purple_Dragon_Knight 112226 111710 111711 111712 111713 IR_PDK 10 CLS_ATK_1 CLS_FEAT_PDK CLS_SAVTHR_FIGHT CLS_SKILL_PDK CLS_BFEAT_PDK 2 **** **** 0 0 12 16 14 8 14 12 STR 0X14 0X3 0 CLASS_TYPE_PDK 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_PDK 5 0 0 0 5 131 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
41 Purple_Dragon_Knight 112226 111710 111711 111712 111713 IR_PDK 10 CLS_ATK_1 CLS_FEAT_PDK CLS_SAVTHR_FIGHT CLS_SKILL_PDK CLS_BFEAT_PDK 2 **** **** 0 0 12 16 14 8 14 12 STR 0X14 0X3 0 CLASS_TYPE_PDK 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_PDK 5 0 0 0 5 131 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
42 UrPriest 16790529 16835606 16835607 16835608 16835609 IR_WARLOCK 8 CLS_ATK_2 CLS_FEAT_URPRST CLS_SAVTHR_WIZ CLS_SKILL_URPRST CLS_BFEAT_URPRST 2 CLS_SPGN_BLIGHT **** 1 1 15 9 14 13 10 15 WIS 0X09 0X2 0 CLASS_TYPE_UR_PRIEST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_URPRST 40 0 0 0 10 10 0 **** 1 0 0 0 0 0 0 WIS Cleric 1 1 255 0 0
|
42 UrPriest 16790529 16835606 16835607 16835608 16835609 IR_WARLOCK 8 CLS_ATK_2 CLS_FEAT_URPRST CLS_SAVTHR_WIZ CLS_SKILL_URPRST CLS_BFEAT_URPRST 2 CLS_SPGN_BLIGHT **** 1 1 15 9 14 13 10 15 WIS 0X09 0X2 0 CLASS_TYPE_UR_PRIEST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_URPRST 40 0 0 0 10 10 0 **** 1 0 0 0 0 0 0 WIS Cleric 1 1 255 0 0
|
||||||
@@ -65,7 +65,7 @@
|
|||||||
61 Hexblade 16790548 16823462 16823463 16823464 16823465 IR_ELDKNI 10 CLS_ATK_1 CLS_FEAT_HEXBL CLS_SAVTHR_CLER CLS_SKILL_HEXBL CLS_BFEAT_HEXBL 2 CLS_SPGN_HEXBL CLS_SPKN_HEXBL 1 1 14 14 14 10 12 14 CHA 0X08 0X2 0 CLASS_TYPE_HEXBLADE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_HEXBL 0 1 0 0 -1 5 131 **** **** **** **** **** **** **** **** **** Hexblade **** **** **** **** ****
|
61 Hexblade 16790548 16823462 16823463 16823464 16823465 IR_ELDKNI 10 CLS_ATK_1 CLS_FEAT_HEXBL CLS_SAVTHR_CLER CLS_SKILL_HEXBL CLS_BFEAT_HEXBL 2 CLS_SPGN_HEXBL CLS_SPKN_HEXBL 1 1 14 14 14 10 12 14 CHA 0X08 0X2 0 CLASS_TYPE_HEXBLADE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_HEXBL 0 1 0 0 -1 5 131 **** **** **** **** **** **** **** **** **** Hexblade **** **** **** **** ****
|
||||||
62 Duskblade 16790549 16824168 16824169 16824170 16824171 IR_HAVOCMAGE 8 CLS_ATK_1 CLS_FEAT_DUSKBL CLS_SAVTHR_CLER CLS_SKILL_DUSKBL CLS_BFEAT_DUSKBL 2 CLS_SPGN_DUSKBL CLS_SPKN_DUSKBL 1 1 15 12 14 10 15 10 STR 0X00 0X0 0 CLASS_TYPE_DUSKBLADE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_DUSKBL 0 1 0 0 -1 5 131 **** **** **** **** **** **** **** **** **** Duskblade **** **** **** **** ****
|
62 Duskblade 16790549 16824168 16824169 16824170 16824171 IR_HAVOCMAGE 8 CLS_ATK_1 CLS_FEAT_DUSKBL CLS_SAVTHR_CLER CLS_SKILL_DUSKBL CLS_BFEAT_DUSKBL 2 CLS_SPGN_DUSKBL CLS_SPKN_DUSKBL 1 1 15 12 14 10 15 10 STR 0X00 0X0 0 CLASS_TYPE_DUSKBLADE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_DUSKBL 0 1 0 0 -1 5 131 **** **** **** **** **** **** **** **** **** Duskblade **** **** **** **** ****
|
||||||
63 Scout 16790550 16822486 16822513 16822514 16822515 IR_ARCHER 8 CLS_ATK_2 CLS_FEAT_SCOUT CLS_SAVTHR_ROG CLS_SKILL_SCOUT CLS_BFEAT_SCOUT 8 **** **** 1 0 12 16 12 14 12 10 DEX 0X00 0X0 0 CLASS_TYPE_SCOUT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SCOUT 0 1 0 0 -1 7 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
63 Scout 16790550 16822486 16822513 16822514 16822515 IR_ARCHER 8 CLS_ATK_2 CLS_FEAT_SCOUT CLS_SAVTHR_ROG CLS_SKILL_SCOUT CLS_BFEAT_SCOUT 8 **** **** 1 0 12 16 12 14 12 10 DEX 0X00 0X0 0 CLASS_TYPE_SCOUT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SCOUT 0 1 0 0 -1 7 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
64 Healer 16790551 16822656 16822657 16822658 16822659 IR_CBTMEDIC 8 CLS_ATK_3 CLS_FEAT_HEALER CLS_SAVTHR_CLER CLS_SKILL_HEALER CLS_BFEAT_HEALER 4 CLS_SPGN_HEALER **** 1 1 10 12 12 15 10 16 WIS 0X11 0X2 0 CLASS_TYPE_HEALER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_HEALER 0 1 0 0 -1 2 0 **** 1 0 0 0 0 0 0 WIS Healer 1 1 255 0 0
|
64 Healer 16790551 16822656 16822657 16822658 16822659 IR_CBTMEDIC 8 CLS_ATK_3 CLS_FEAT_HEALER CLS_SAVTHR_CLER CLS_SKILL_HEALER CLS_BFEAT_HEALER 4 CLS_SPGN_HEALER **** 1 1 10 12 12 15 10 16 WIS 0X11 0X2 0 CLASS_TYPE_HEALER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_HEALER 0 1 0 0 -1 895 0 **** 1 0 0 0 0 0 0 WIS Healer 1 1 255 0 0
|
||||||
65 Mage_Killer 16790552 16822219 16822220 16822221 16822222 IR_MAGEKILL 4 CLS_ATK_3 CLS_FEAT_MAGEK CLS_SAVTHR_WIZ CLS_SKILL_MAGEK CLS_BFEAT_MAGEK 2 **** **** 1 0 12 16 14 8 14 12 INT 0X00 0X0 0 CLASS_TYPE_MAGEKILLER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_MAGEK 40 0 1 0 10 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
65 Mage_Killer 16790552 16822219 16822220 16822221 16822222 IR_MAGEKILL 4 CLS_ATK_3 CLS_FEAT_MAGEK CLS_SAVTHR_WIZ CLS_SKILL_MAGEK CLS_BFEAT_MAGEK 2 **** **** 1 0 12 16 14 8 14 12 INT 0X00 0X0 0 CLASS_TYPE_MAGEKILLER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_MAGEK 40 0 1 0 10 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
66 Harper_Mage 16790553 16822223 16822224 16822225 16822226 IEF_HARPWIZ 4 CLS_ATK_3 CLS_FEAT_HMAGE CLS_SAVTHR_WIZ CLS_SKILL_HMAGE CLS_BFEAT_HMAGE 4 **** **** 0 0 12 16 14 8 14 12 INT 0X10 0X2 0 CLASS_TYPE_HARPERMAGE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_HMAGE 5 0 1 0 5 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
66 Harper_Mage 16790553 16822223 16822224 16822225 16822226 IEF_HARPWIZ 4 CLS_ATK_3 CLS_FEAT_HMAGE CLS_SAVTHR_WIZ CLS_SKILL_HMAGE CLS_BFEAT_HMAGE 4 **** **** 0 0 12 16 14 8 14 12 INT 0X10 0X2 0 CLASS_TYPE_HARPERMAGE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_HMAGE 5 0 1 0 5 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
67 Spell_Sword 16790554 16822227 16822228 16822229 16822230 IR_SPELLS 8 CLS_ATK_1 CLS_FEAT_SPELLS CLS_SAVTHR_CLER CLS_SKILL_SPELLS CLS_BFEAT_SPELLS 2 **** **** 1 0 12 16 14 8 14 12 INT 0X00 0X0 0 CLASS_TYPE_SPELLSWORD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SPELLS 40 0 2 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
67 Spell_Sword 16790554 16822227 16822228 16822229 16822230 IR_SPELLS 8 CLS_ATK_1 CLS_FEAT_SPELLS CLS_SAVTHR_CLER CLS_SKILL_SPELLS CLS_BFEAT_SPELLS 2 **** **** 1 0 12 16 14 8 14 12 INT 0X00 0X0 0 CLASS_TYPE_SPELLSWORD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SPELLS 40 0 2 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@@ -74,13 +74,13 @@
|
|||||||
70 Eldritch_Knight 16790557 16822308 16822309 16822310 16822311 IR_ELDKNI 6 CLS_ATK_1 CLS_FEAT_ELDKNI CLS_SAVTHR_FIGHT CLS_SKILL_ELDKNI CLS_BFEAT_ELDKNI 2 **** **** 1 0 14 13 14 10 14 13 INT 0X00 0X0 0 CLASS_TYPE_ELDRITCH_KNIGHT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ELDKNI 40 0 1 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
70 Eldritch_Knight 16790557 16822308 16822309 16822310 16822311 IR_ELDKNI 6 CLS_ATK_1 CLS_FEAT_ELDKNI CLS_SAVTHR_FIGHT CLS_SKILL_ELDKNI CLS_BFEAT_ELDKNI 2 **** **** 1 0 14 13 14 10 14 13 INT 0X00 0X0 0 CLASS_TYPE_ELDRITCH_KNIGHT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ELDKNI 40 0 1 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
71 Elemental_Savant 16790558 16822312 16822313 16822314 16822315 IR_ELEMFIRE 4 CLS_ATK_3 CLS_FEAT_SAVANT CLS_SAVTHR_WIZ CLS_SKILL_SAVANT CLS_BFEAT_SAVANT 2 **** **** 1 0 12 16 14 8 14 12 INT 0X00 0X0 0 CLASS_TYPE_ELEMENTAL_SAVANT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SAVANT 40 0 1 0 10 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
71 Elemental_Savant 16790558 16822312 16822313 16822314 16822315 IR_ELEMFIRE 4 CLS_ATK_3 CLS_FEAT_SAVANT CLS_SAVTHR_WIZ CLS_SKILL_SAVANT CLS_BFEAT_SAVANT 2 **** **** 1 0 12 16 14 8 14 12 INT 0X00 0X0 0 CLASS_TYPE_ELEMENTAL_SAVANT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SAVANT 40 0 1 0 10 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
72 Factotum 16790559 16823092 16823093 16823094 16823095 IR_BEGUIL 8 CLS_ATK_2 CLS_FEAT_FACTUM CLS_SAVTHR_ROG CLS_SKILL_FACTUM CLS_BFEAT_FACTUM 6 **** **** 1 0 12 16 14 8 14 12 INT 0X00 0X0 0 CLASS_TYPE_FACTOTUM 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_FACTUM 20 1 0 0 -1 8 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
72 Factotum 16790559 16823092 16823093 16823094 16823095 IR_BEGUIL 8 CLS_ATK_2 CLS_FEAT_FACTUM CLS_SAVTHR_ROG CLS_SKILL_FACTUM CLS_BFEAT_FACTUM 6 **** **** 1 0 12 16 14 8 14 12 INT 0X00 0X0 0 CLASS_TYPE_FACTOTUM 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_FACTUM 20 1 0 0 -1 8 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
73 CelebrantSharess 16790560 16826321 16826322 16826323 16826324 IR_HEARTW 6 CLS_ATK_3 CLS_FEAT_SHARSS CLS_SAVTHR_WIZ CLS_SKILL_SHARSS CLS_BFEAT_SHARSS 6 CLS_SPGN_SHARSS CLS_SPKN_SHARSS 0 1 12 16 14 8 14 12 CHA 0X13 0X3 0 CLASS_TYPE_CELEBRANT_SHARESS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SHARSS 40 0 0 0 10 10 0 **** **** **** **** **** **** **** **** **** Celebrant **** **** **** **** ****
|
73 CelebrantSharess 16790560 16826321 16826322 16826323 16826324 IR_HEARTW 6 CLS_ATK_3 CLS_FEAT_SHARSS CLS_SAVTHR_WIZ CLS_SKILL_SHARSS CLS_BFEAT_SHARSS 6 CLS_SPGN_SHARSS CLS_SPKN_SHARSS 0 1 12 16 14 8 14 12 CHA 0X13 0X3 0 CLASS_TYPE_CELEBRANT_SHARESS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SHARSS 40 0 0 0 10 10 0 **** 0 0 0 0 0 1 1 CHA Celebrant **** **** 255 0 ****
|
||||||
74 CultistShatteredPeak 16790561 16789654 16789655 16789656 16789657 IR_SPARCDLST 6 CLS_ATK_2 CLS_FEAT_CULTST CLS_SAVTHR_RANG CLS_SKILL_CULTST CLS_BFEAT_CULTST 6 CLS_SPGN_CULTST **** 0 1 12 16 14 8 14 12 DEX 0X00 0X0 0 CLASS_TYPE_CULTIST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_CULTST 5 0 0 0 5 64 130 **** 1 1 0 0 1 1 1 INT Cultist 1 1 255 0 0
|
74 CultistShatteredPeak 16790561 16789654 16789655 16789656 16789657 IR_SPARCDLST 6 CLS_ATK_2 CLS_FEAT_CULTST CLS_SAVTHR_RANG CLS_SKILL_CULTST CLS_BFEAT_CULTST 6 CLS_SPGN_CULTST **** 0 1 12 16 14 8 14 12 DEX 0X00 0X0 0 CLASS_TYPE_CULTIST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_CULTST 5 0 0 0 5 64 130 **** 1 1 0 0 1 1 1 INT Cultist 1 1 255 0 0
|
||||||
75 Forsaker 16790562 16847610 16847611 16847612 16847613 IC_LEGDREAD 12 CLS_ATK_1 CLS_FEAT_FORSAK CLS_SAVTHR_CLER CLS_SKILL_FORSAK CLS_BFEAT_FORSAK 2 **** **** 1 0 16 13 16 10 10 9 STR 0X00 0X0 0 CLASS_TYPE_FORSAKER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_FORSAK 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
75 Forsaker 16790562 16847610 16847611 16847612 16847613 IC_LEGDREAD 12 CLS_ATK_1 CLS_FEAT_FORSAK CLS_SAVTHR_CLER CLS_SKILL_FORSAK CLS_BFEAT_FORSAK 2 **** **** 1 0 16 13 16 10 10 9 STR 0X00 0X0 0 CLASS_TYPE_FORSAKER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_FORSAK 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
76 Incarnate 16790563 16836706 16836707 16836708 16836709 IR_PSION 6 CLS_ATK_3 CLS_FEAT_INCARN CLS_SAVTHR_CLER CLS_SKILL_INCARN CLS_BFEAT_INCARN 2 **** **** 1 0 10 14 14 12 16 10 INT 0X01 0X3 1 CLASS_TYPE_INCARNATE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_INCARN 0 1 0 0 -1 8 130 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
76 Incarnate 16790563 16836706 16836707 16836708 16836709 IR_PSION 6 CLS_ATK_3 CLS_FEAT_INCARN CLS_SAVTHR_CLER CLS_SKILL_INCARN CLS_BFEAT_INCARN 2 **** **** 1 0 10 14 14 12 16 10 INT 0X01 0X3 1 CLASS_TYPE_INCARNATE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_INCARN 0 1 0 0 -1 8 130 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
77 Soulborn 16790564 16836718 16836719 16836720 16836721 IR_SOULKNIFE 10 CLS_ATK_1 CLS_FEAT_SOULBN CLS_SAVTHR_FIGHT CLS_SKILL_SOULBN CLS_BFEAT_SOULBN 2 **** **** 1 0 16 13 16 10 10 9 STR 0X01 0X3 0 CLASS_TYPE_SOULBORN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SOULBN 0 1 0 0 -1 8 130 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
77 Soulborn 16790564 16836718 16836719 16836720 16836721 IR_SOULKNIFE 10 CLS_ATK_1 CLS_FEAT_SOULBN CLS_SAVTHR_FIGHT CLS_SKILL_SOULBN CLS_BFEAT_SOULBN 2 **** **** 1 0 16 13 16 10 10 9 STR 0X01 0X3 0 CLASS_TYPE_SOULBORN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SOULBN 0 1 0 0 -1 8 130 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
78 Totemist 16790565 16836722 16836723 16836724 16836725 IR_PSYWARRIOR 8 CLS_ATK_2 CLS_FEAT_TOTEM CLS_SAVTHR_RANG CLS_SKILL_TOTEM CLS_BFEAT_TOTEM 4 **** **** 1 0 16 13 16 10 10 9 STR 0X00 0X0 0 CLASS_TYPE_TOTEMIST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_TOTEM 0 1 0 0 -1 8 130 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
78 Totemist 16790565 16836722 16836723 16836724 16836725 IR_PSYWARRIOR 8 CLS_ATK_2 CLS_FEAT_TOTEM CLS_SAVTHR_RANG CLS_SKILL_TOTEM CLS_BFEAT_TOTEM 4 **** **** 1 0 16 13 16 10 10 9 STR 0X00 0X0 0 CLASS_TYPE_TOTEMIST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_TOTEM 0 1 0 0 -1 8 130 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
79 Beguiler 16790566 16789870 16789871 16789872 16789873 IR_BEGUIL 6 CLS_ATK_3 CLS_FEAT_BEGUIL CLS_SAVTHR_WIZ CLS_SKILL_BEGUIL CLS_BFEAT_BEGUIL 6 CLS_SPGN_BEGUIL CLS_SPKN_BEGUIL 1 1 10 14 14 12 16 10 INT 0X00 0X0 0 CLASS_TYPE_BEGUILER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_BEGUIL 20 1 0 0 -1 8 130 **** **** **** **** **** **** **** **** **** Beguiler **** **** **** **** ****
|
79 Beguiler 16790566 16789870 16789871 16789872 16789873 IR_BEGUIL 6 CLS_ATK_3 CLS_FEAT_BEGUIL CLS_SAVTHR_WIZ CLS_SKILL_BEGUIL CLS_BFEAT_BEGUIL 6 CLS_SPGN_BEGUIL CLS_SPKN_BEGUIL 1 1 10 14 14 12 16 10 INT 0X00 0X0 0 CLASS_TYPE_BEGUILER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_BEGUIL 20 1 0 0 -1 700 130 **** **** **** **** **** **** **** **** **** Beguiler **** **** **** **** ****
|
||||||
80 Duelist 16790567 16822716 16822717 16822718 16822719 IR_DUEL 10 CLS_ATK_1 CLS_FEAT_DUEL CLS_SAVTHR_ROG CLS_SKILL_DUEL CLS_BFEAT_DUEL 4 **** **** 1 0 14 16 14 8 14 10 DEX 0X00 0X0 0 CLASS_TYPE_DUELIST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_DUEL 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
80 Duelist 16790567 16822716 16822717 16822718 16822719 IR_DUEL 10 CLS_ATK_1 CLS_FEAT_DUEL CLS_SAVTHR_ROG CLS_SKILL_DUEL CLS_BFEAT_DUEL 4 **** **** 1 0 14 16 14 8 14 10 DEX 0X00 0X0 0 CLASS_TYPE_DUELIST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_DUEL 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
81 Hierophant 16790568 16822744 16822745 16822746 16822747 IR_HIERO 8 CLS_ATK_2 CLS_FEAT_HIERO CLS_SAVTHR_CLER CLS_SKILL_HIERO CLS_BFEAT_HIERO 2 **** **** 1 0 14 8 14 16 10 14 WIS 0X00 0X0 0 CLASS_TYPE_HIEROPHANT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_HIERO 5 0 0 0 5 2 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
81 Hierophant 16790568 16822744 16822745 16822746 16822747 IR_HIERO 8 CLS_ATK_2 CLS_FEAT_HIERO CLS_SAVTHR_CLER CLS_SKILL_HIERO CLS_BFEAT_HIERO 2 **** **** 1 0 14 8 14 16 10 14 WIS 0X00 0X0 0 CLASS_TYPE_HIEROPHANT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_HIERO 5 0 0 0 5 2 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
82 RedAvenger 16790569 16822765 16822766 16822767 16822768 IR_REDAVNG 8 CLS_ATK_2 CLS_FEAT_REDAV CLS_SAVTHR_MONK CLS_SKILL_REDAV CLS_BFEAT_REDAV 4 **** **** 1 0 14 14 14 15 10 10 DEX 0X00 0X0 0 CLASS_TYPE_RED_AVENGER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_REDAV 40 0 0 0 10 5 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
82 RedAvenger 16790569 16822765 16822766 16822767 16822768 IR_REDAVNG 8 CLS_ATK_2 CLS_FEAT_REDAV CLS_SAVTHR_MONK CLS_SKILL_REDAV CLS_BFEAT_REDAV 4 **** **** 1 0 14 14 14 15 10 10 DEX 0X00 0X0 0 CLASS_TYPE_RED_AVENGER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_REDAV 40 0 0 0 10 5 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@@ -97,12 +97,12 @@
|
|||||||
93 SublimeChord 16790580 16829452 16829453 16829454 16829455 IR_X1_HARPER 6 CLS_ATK_3 CLS_FEAT_SCHORD CLS_SAVTHR_WIZ CLS_SKILL_SCHORD CLS_BFEAT_SCHORD 4 CLS_SPGN_SCHORD CLS_SPKN_SCHORD 1 1 10 14 12 10 14 16 CHA 0X00 0X0 0 CLASS_TYPE_SUBLIME_CHORD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SCHORD 40 0 0 0 10 46 131 **** **** **** **** **** **** **** **** **** SublimeCh **** **** **** **** ****
|
93 SublimeChord 16790580 16829452 16829453 16829454 16829455 IR_X1_HARPER 6 CLS_ATK_3 CLS_FEAT_SCHORD CLS_SAVTHR_WIZ CLS_SKILL_SCHORD CLS_BFEAT_SCHORD 4 CLS_SPGN_SCHORD CLS_SPKN_SCHORD 1 1 10 14 12 10 14 16 CHA 0X00 0X0 0 CLASS_TYPE_SUBLIME_CHORD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SCHORD 40 0 0 0 10 46 131 **** **** **** **** **** **** **** **** **** SublimeCh **** **** **** **** ****
|
||||||
94 Artificer 16790581 16827101 16827102 16827103 16827104 **** 6 CLS_ATK_2 CLS_FEAT_ARTI CLS_SAVTHR_WIZ CLS_SKILL_ARTI CLS_BFEAT_ARTI 4 **** **** 0 0 10 14 12 10 16 14 CHA 0X00 0X0 0 CLASS_TYPE_ARTIFICER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ARTI 0 1 0 0 -1 1 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
94 Artificer 16790581 16827101 16827102 16827103 16827104 **** 6 CLS_ATK_2 CLS_FEAT_ARTI CLS_SAVTHR_WIZ CLS_SKILL_ARTI CLS_BFEAT_ARTI 4 **** **** 0 0 10 14 12 10 16 14 CHA 0X00 0X0 0 CLASS_TYPE_ARTIFICER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ARTI 0 1 0 0 -1 1 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
95 Arcane_Duelist 16790582 16823520 16823521 16823522 16823523 IR_SPARCDLST 8 CLS_ATK_3 CLS_FEAT_ADST CLS_SAVTHR_BARD CLS_SKILL_ADST CLS_BFEAT_ADST 4 **** **** 1 0 12 16 14 8 14 12 CHA 0X00 0X0 0 CLASS_TYPE_ARCANE_DUELIST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ADST 40 0 0 0 10 **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
95 Arcane_Duelist 16790582 16823520 16823521 16823522 16823523 IR_SPARCDLST 8 CLS_ATK_3 CLS_FEAT_ADST CLS_SAVTHR_BARD CLS_SKILL_ADST CLS_BFEAT_ADST 4 **** **** 1 0 12 16 14 8 14 12 CHA 0X00 0X0 0 CLASS_TYPE_ARCANE_DUELIST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ADST 40 0 0 0 10 **** 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
96 ForceMissileMage 16790583 16836426 16836427 16836428 16836429 IR_HAVOCMAGE 4 CLS_ATK_3 CLS_FEAT_FMM CLS_SAVTHR_ROG CLS_SKILL_FMM CLS_BFEAT_FMM 2 **** **** 1 0 12 14 14 10 12 15 CHA 0X00 0X0 0 CLASS_TYPE_FMM 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_FMM 5 0 1 0 10 1 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
96 ForceMissileMage 16790583 16836426 16836427 16836428 16836429 IR_HAVOCMAGE 4 CLS_ATK_3 CLS_FEAT_FMM CLS_SAVTHR_ROG CLS_SKILL_FMM CLS_BFEAT_FMM 2 **** **** 1 0 12 14 14 10 12 15 INT 0X00 0X0 0 CLASS_TYPE_FMM 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_FMM 5 0 1 0 5 31 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
97 WildMage 16790584 16836416 16836417 16836418 16836419 IR_WILDER 4 CLS_ATK_3 CLS_FEAT_WILDMG CLS_SAVTHR_ROG CLS_SKILL_WILDMG CLS_BFEAT_WILDMG 2 **** **** 1 0 12 14 14 10 12 15 CHA 0X04 0X0 0 CLASS_TYPE_WILD_MAGE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WILDMG 40 0 1 0 10 1 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
97 WildMage 16790584 16836416 16836417 16836418 16836419 IR_WILDER 4 CLS_ATK_3 CLS_FEAT_WILDMG CLS_SAVTHR_ROG CLS_SKILL_WILDMG CLS_BFEAT_WILDMG 2 **** **** 1 0 12 14 14 10 12 15 CHA 0X04 0X0 0 CLASS_TYPE_WILD_MAGE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WILDMG 40 0 1 0 10 1 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
98 Shadowsmith 16790585 16847414 16847415 16847416 16847417 IR_TEMPUS 8 CLS_ATK_1 CLS_FEAT_SHDSMT CLS_SAVTHR_ROG CLS_SKILL_SHDSMT CLS_BFEAT_SHDSMT 6 **** **** 1 0 14 13 14 10 14 13 INT 0x00 0x0 0 CLASS_TYPE_SHADOWSMITH 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SHDSMT 40 0 0 0 10 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
98 Shadowsmith 16790585 16847414 16847415 16847416 16847417 IR_TEMPUS 8 CLS_ATK_1 CLS_FEAT_SHDSMT CLS_SAVTHR_ROG CLS_SKILL_SHDSMT CLS_BFEAT_SHDSMT 6 **** **** 1 0 14 13 14 10 14 13 INT 0x00 0x0 0 CLASS_TYPE_SHADOWSMITH 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SHDSMT 40 0 0 0 10 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
99 Abjurant_Champion 16790586 16847652 16847653 16847654 16847655 IR_ELDKNI 10 CLS_ATK_1 CLS_FEAT_ABCHAM CLS_SAVTHR_WIZ CLS_SKILL_ABCHAM CLS_BFEAT_ABCHAM 2 **** **** 1 0 14 13 14 10 14 13 INT 0X00 0X0 0 CLASS_TYPE_ABJURANT_CHAMPION 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ABCHAM 5 0 1 0 5 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
99 Abjurant_Champion 16790586 16847652 16847653 16847654 16847655 IR_ELDKNI 10 CLS_ATK_1 CLS_FEAT_ABCHAM CLS_SAVTHR_WIZ CLS_SKILL_ABCHAM CLS_BFEAT_ABCHAM 2 **** **** 1 0 14 13 14 10 14 13 INT 0X00 0X0 0 CLASS_TYPE_ABJURANT_CHAMPION 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ABCHAM 5 0 1 0 5 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
100 Archmage 16790587 16825000 16825001 16825002 16825003 IR_EPICSPELL 4 CLS_ATK_3 CLS_FEAT_ARCH CLS_SAVTHR_WIZ CLS_SKILL_ARCH CLS_BFEAT_ARCH 2 **** **** 1 0 12 16 14 8 14 12 INT 0X00 0X0 0 CLASS_TYPE_ARCHMAGE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ARCH 5 0 2 0 5 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
100 Archmage 16790587 16825000 16825001 16825002 16825003 IR_EPICSPELL 4 CLS_ATK_3 CLS_FEAT_ARCH CLS_SAVTHR_WIZ CLS_SKILL_ARCH CLS_BFEAT_ARCH 2 **** **** 1 0 12 16 14 8 14 12 INT 0X00 0X0 0 CLASS_TYPE_ARCHMAGE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ARCH 5 0 2 0 5 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
101 Oozemaster 16790588 16825036 16825037 16825038 16825039 IR_GENSUMMON 8 CLS_ATK_2 CLS_FEAT_OOZE CLS_SAVTHR_FIGHT CLS_SKILL_OOZE CLS_BFEAT_OOZE 4 **** **** 1 0 12 16 14 8 14 12 INT 0X00 0X0 0 CLASS_TYPE_OOZEMASTER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_OOZE 40 0 2 2 10 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
101 Oozemaster 16790588 16825036 16825037 16825038 16825039 IR_GENSUMMON 8 CLS_ATK_2 CLS_FEAT_OOZE CLS_SAVTHR_FIGHT CLS_SKILL_OOZE CLS_BFEAT_OOZE 4 **** **** 1 0 12 16 14 8 14 12 INT 0X00 0X0 0 CLASS_TYPE_OOZEMASTER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_OOZEM 40 0 2 2 10 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
102 Psychic_Rogue 16790589 16835172 16835173 16835174 16835175 IR_PSYWARRIOR 6 CLS_ATK_2 CLS_FEAT_PSYROG CLS_SAVTHR_ROG CLS_SKILL_PSYROG CLS_BFEAT_PSYROG 6 **** **** 1 0 14 12 14 16 10 10 WIS 0X00 0X0 0 CLASS_TYPE_PSYROG 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_PSYROG 20 1 0 0 -1 7 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
102 Psychic_Rogue 16790589 16835172 16835173 16835174 16835175 IR_PSYWARRIOR 6 CLS_ATK_2 CLS_FEAT_PSYROG CLS_SAVTHR_ROG CLS_SKILL_PSYROG CLS_BFEAT_PSYROG 6 **** **** 1 0 14 12 14 16 10 10 WIS 0X00 0X0 0 CLASS_TYPE_PSYROG 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_PSYROG 20 1 0 0 -1 7 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
103 Spelldancer 16790590 16835157 16835158 16835159 16835160 IR_HAVOCMAGE 6 CLS_ATK_3 CLS_FEAT_SPLDNC CLS_SAVTHR_BARD CLS_SKILL_SPLDNC CLS_BFEAT_SPLDNC 4 **** **** 1 0 12 16 14 8 14 12 INT 0X00 0X0 0 CLASS_TYPE_SPELLDANCER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SPLDNC 5 0 1 0 5 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
103 Spelldancer 16790590 16835157 16835158 16835159 16835160 IR_HAVOCMAGE 6 CLS_ATK_3 CLS_FEAT_SPLDNC CLS_SAVTHR_BARD CLS_SKILL_SPLDNC CLS_BFEAT_SPLDNC 4 **** **** 1 0 12 16 14 8 14 12 INT 0X00 0X0 0 CLASS_TYPE_SPELLDANCER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SPLDNC 5 0 1 0 5 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
104 KnightoftheWeave 16790591 16835149 16835150 16835151 16835152 IR_MAGEKILL 8 CLS_ATK_2 CLS_FEAT_KNGTWV CLS_SAVTHR_DRU CLS_SKILL_KNGTWV CLS_BFEAT_KNGTWV 2 CLS_SPGN_KNGTWV CLS_SPKN_KNGTWV 0 1 12 16 14 8 14 12 INT 0X10 0X2 0 CLASS_TYPE_KNIGHT_WEAVE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_KNGTWV 40 0 0 0 10 10 0 **** **** **** **** **** **** **** **** **** KnightWeave **** **** **** **** ****
|
104 KnightoftheWeave 16790591 16835149 16835150 16835151 16835152 IR_MAGEKILL 8 CLS_ATK_2 CLS_FEAT_KNGTWV CLS_SAVTHR_DRU CLS_SKILL_KNGTWV CLS_BFEAT_KNGTWV 2 CLS_SPGN_KNGTWV CLS_SPKN_KNGTWV 0 1 12 16 14 8 14 12 INT 0X10 0X2 0 CLASS_TYPE_KNIGHT_WEAVE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_KNGTWV 40 0 0 0 10 10 0 **** **** **** **** **** **** **** **** **** KnightWeave **** **** **** **** ****
|
||||||
@@ -113,7 +113,7 @@
|
|||||||
109 Umbral_Disciple 16790596 16837827 16837828 16837829 16837830 IR_ASASIN 6 CLS_ATK_2 CLS_FEAT_UMBRAL CLS_SAVTHR_BARD CLS_SKILL_UMBRAL CLS_BFEAT_UMBRAL 6 **** **** 1 0 12 16 14 8 14 12 DEX 0X00 0X0 0 CLASS_TYPE_UMBRAL_DISCIPLE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_UMBRAL 40 0 0 0 10 8 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
109 Umbral_Disciple 16790596 16837827 16837828 16837829 16837830 IR_ASASIN 6 CLS_ATK_2 CLS_FEAT_UMBRAL CLS_SAVTHR_BARD CLS_SKILL_UMBRAL CLS_BFEAT_UMBRAL 6 **** **** 1 0 12 16 14 8 14 12 DEX 0X00 0X0 0 CLASS_TYPE_UMBRAL_DISCIPLE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_UMBRAL 40 0 0 0 10 8 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
110 Alienist 16790597 16789710 16789711 16789712 16789713 IR_ALIEN 4 CLS_ATK_3 CLS_FEAT_ALIEN CLS_SAVTHR_WIZ CLS_SKILL_ALIEN CLS_BFEAT_ALIEN 2 **** **** 1 0 10 14 14 12 16 10 INT 0X00 0X0 0 CLASS_TYPE_ALIENIST 1 1 1 2 2 4 6 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ALIEN 40 0 1 0 10 10 0 cls_stat_alien **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
110 Alienist 16790597 16789710 16789711 16789712 16789713 IR_ALIEN 4 CLS_ATK_3 CLS_FEAT_ALIEN CLS_SAVTHR_WIZ CLS_SKILL_ALIEN CLS_BFEAT_ALIEN 2 **** **** 1 0 10 14 14 12 16 10 INT 0X00 0X0 0 CLASS_TYPE_ALIENIST 1 1 1 2 2 4 6 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ALIEN 40 0 1 0 10 10 0 cls_stat_alien **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
111 BlackBloodCultist 16790598 16823068 16823077 16823078 16823079 IR_WILDWOLF 12 CLS_ATK_2 CLS_FEAT_BBC CLS_SAVTHR_BARB CLS_SKILL_BBC CLS_BFEAT_BBC 4 **** **** 0 0 16 14 14 14 10 8 STR 0X0A 0X3 0 CLASS_TYPE_BLACK_BLOOD_CULTIST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_BBC 40 0 0 0 10 17 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
111 BlackBloodCultist 16790598 16823068 16823077 16823078 16823079 IR_WILDWOLF 12 CLS_ATK_2 CLS_FEAT_BBC CLS_SAVTHR_BARB CLS_SKILL_BBC CLS_BFEAT_BBC 4 **** **** 0 0 16 14 14 14 10 8 STR 0X0A 0X3 0 CLASS_TYPE_BLACK_BLOOD_CULTIST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_BBC 40 0 0 0 10 17 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
112 Warlock 16790599 16827934 16827935 16827936 16827937 IR_WARLOCK 6 CLS_ATK_2 CLS_FEAT_WARLOK CLS_SAVTHR_WIZ CLS_SKILL_WARLOK CLS_BFEAT_WARLOK 2 **** **** 1 0 12 14 14 10 12 15 CHA 0X14 0X3 1 CLASS_TYPE_WARLOCK 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WARLOK 0 1 0 0 -1 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
112 Warlock 16790599 16827934 16827935 16827936 16827937 IR_WARLOCK 6 CLS_ATK_2 CLS_FEAT_WARLOK CLS_SAVTHR_WIZ CLS_SKILL_WARLOK CLS_BFEAT_WARLOK 2 **** **** 1 1 12 14 14 10 12 15 CHA 0X14 0X3 1 CLASS_TYPE_WARLOCK 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WARLOK 0 1 0 0 -1 900 0 **** **** **** **** **** **** **** **** **** Warlock **** **** **** **** ****
|
||||||
113 Fochlucan_Lyrist 16852476 16825142 16825143 16825144 16825145 IR_DRUID 6 CLS_ATK_1 CLS_FEAT_FOCLYR CLS_SAVTHR_BARD CLS_SKILL_FOCLYR CLS_BFEAT_FOCLYR 6 **** **** 1 0 10 12 12 14 12 16 CHA 0X02 0X0 0 CLASS_TYPE_FOCHLUCAN_LYRIST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_FOCLYR 40 0 1 1 10 1 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
113 Fochlucan_Lyrist 16852476 16825142 16825143 16825144 16825145 IR_DRUID 6 CLS_ATK_1 CLS_FEAT_FOCLYR CLS_SAVTHR_BARD CLS_SKILL_FOCLYR CLS_BFEAT_FOCLYR 6 **** **** 1 0 10 12 12 14 12 16 CHA 0X02 0X0 0 CLASS_TYPE_FOCHLUCAN_LYRIST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_FOCLYR 40 0 1 1 10 1 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
114 Dragonsong_Lyrist 16790600 16825459 16825460 16825461 16825462 IR_DRSLYR 6 CLS_ATK_2 CLS_FEAT_DRSLYR CLS_SAVTHR_BARD CLS_SKILL_DRSLYR CLS_BFEAT_DRSLYR 4 **** **** 1 0 12 14 14 10 12 15 CHA 0X10 0X2 0 CLASS_TYPE_DRAGONSONG_LYRIST 1 2 3 4 5 6 7 8 9 10 11 12 12 14 15 16 17 18 19 20 CLS_PRES_DSLYR 5 0 2 0 5 1 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
114 Dragonsong_Lyrist 16790600 16825459 16825460 16825461 16825462 IR_DRSLYR 6 CLS_ATK_2 CLS_FEAT_DRSLYR CLS_SAVTHR_BARD CLS_SKILL_DRSLYR CLS_BFEAT_DRSLYR 4 **** **** 1 0 12 14 14 10 12 15 CHA 0X10 0X2 0 CLASS_TYPE_DRAGONSONG_LYRIST 1 2 3 4 5 6 7 8 9 10 11 12 12 14 15 16 17 18 19 20 CLS_PRES_DSLYR 5 0 2 0 5 1 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
115 SpinemeldWarrior 16790601 16836998 16836999 16837000 16837001 IR_TEMPEST 10 CLS_ATK_1 CLS_FEAT_SPNMLD CLS_SAVTHR_FIGHT CLS_SKILL_SPNMLD CLS_BFEAT_SPNMLD 4 **** **** 1 0 16 14 14 14 10 8 STR 0X02 0X1 1 CLASS_TYPE_SPINEMELD_WARRIOR 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SPNMLD 40 0 0 0 10 17 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
115 SpinemeldWarrior 16790601 16836998 16836999 16837000 16837001 IR_TEMPEST 10 CLS_ATK_1 CLS_FEAT_SPNMLD CLS_SAVTHR_FIGHT CLS_SKILL_SPNMLD CLS_BFEAT_SPNMLD 4 **** **** 1 0 16 14 14 14 10 8 STR 0X02 0X1 1 CLASS_TYPE_SPINEMELD_WARRIOR 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SPNMLD 40 0 0 0 10 17 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@@ -129,23 +129,23 @@
|
|||||||
125 Soulcaster 16790611 16837012 16837013 16837014 16837015 IR_MYSTIC 4 CLS_ATK_3 CLS_FEAT_SOULC CLS_SAVTHR_WIZ CLS_SKILL_SOULC CLS_BFEAT_SOULC 2 **** **** 1 0 10 11 11 16 16 10 INT 0X00 0X0 0 CLASS_TYPE_SOULCASTER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SOULC 40 0 1 0 10 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
125 Soulcaster 16790611 16837012 16837013 16837014 16837015 IR_MYSTIC 4 CLS_ATK_3 CLS_FEAT_SOULC CLS_SAVTHR_WIZ CLS_SKILL_SOULC CLS_BFEAT_SOULC 2 **** **** 1 0 10 11 11 16 16 10 INT 0X00 0X0 0 CLASS_TYPE_SOULCASTER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SOULC 40 0 1 0 10 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
126 Sacred_Fist 16790612 16825367 16825368 16825369 16825370 IR_SACREDFIST 8 CLS_ATK_1 CLS_FEAT_SACFIS CLS_SAVTHR_WILD CLS_SKILL_SACFIS CLS_BFEAT_SACFIS 4 **** **** 1 0 14 14 12 16 10 10 WIS 0X00 0X0 0 CLASS_TYPE_SACREDFIST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SACFIS 40 0 0 1 10 5 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
126 Sacred_Fist 16790612 16825367 16825368 16825369 16825370 IR_SACREDFIST 8 CLS_ATK_1 CLS_FEAT_SACFIS CLS_SAVTHR_WILD CLS_SKILL_SACFIS CLS_BFEAT_SACFIS 4 **** **** 1 0 14 14 12 16 10 10 WIS 0X00 0X0 0 CLASS_TYPE_SACREDFIST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SACFIS 40 0 0 1 10 5 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
127 Legendary_Dreadnought 16790613 16826086 16826087 16826088 16826089 IC_LEGDREAD 12 CLS_ATK_1 CLS_FEAT_LGDR CLS_SAVTHR_FIGHT CLS_SKILL_LGDR CLS_BFEAT_LGDR 2 **** **** 1 0 16 13 16 10 10 9 STR 0X00 0X0 0 CLASS_TYPE_LEGENDARY_DREADNOUGHT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_LGDR 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
127 Legendary_Dreadnought 16790613 16826086 16826087 16826088 16826089 IC_LEGDREAD 12 CLS_ATK_1 CLS_FEAT_LGDR CLS_SAVTHR_FIGHT CLS_SKILL_LGDR CLS_BFEAT_LGDR 2 **** **** 1 0 16 13 16 10 10 9 STR 0X00 0X0 0 CLASS_TYPE_LEGENDARY_DREADNOUGHT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_LGDR 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
128 Disciple_of_Baalzebul 16790614 16826094 16826095 16826096 16826097 IC_BAALZEBUL 6 CLS_ATK_2 CLS_FEAT_BAAL CLS_SAVTHR_BARD CLS_SKILL_BAAL CLS_BFEAT_BAAL 6 **** **** 1 0 12 14 14 10 12 15 CHA 0X09 0X2 0 CLASS_TYPE_DISC_BAALZEBUL 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_BAAL 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
128 Disciple_of_Baalzebul 16790614 16826094 16826095 16826096 16826097 IC_BAALZEBUL 6 CLS_ATK_2 CLS_FEAT_BAAL CLS_SAVTHR_BARD CLS_SKILL_BAAL CLS_BFEAT_BAAL 6 **** **** 1 0 12 14 14 10 12 15 CHA 0X09 0X2 0 CLASS_TYPE_DISC_BAALZEBUL 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_BAAL 40 0 0 0 10 4 0 cls_stat_baal **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
129 Mighty_Contender_of_Kord 16790615 16824935 16824936 16824937 16824938 IC_LEGDREAD 10 CLS_ATK_2 CLS_FEAT_KORD CLS_SAVTHR_CLER CLS_SKILL_KORD CLS_BFEAT_KORD 2 **** **** 1 0 14 8 14 16 10 14 WIS 0X00 0X0 0 CLASS_TYPE_MIGHTY_CONTENDER_KORD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_KORD 40 0 0 1 10 4 0 cls_stat_kord **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
129 Mighty_Contender_of_Kord 16790615 16824935 16824936 16824937 16824938 IC_LEGDREAD 10 CLS_ATK_2 CLS_FEAT_KORD CLS_SAVTHR_CLER CLS_SKILL_KORD CLS_BFEAT_KORD 2 **** **** 1 0 14 8 14 16 10 14 WIS 0X00 0X0 0 CLASS_TYPE_MIGHTY_CONTENDER_KORD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_KORD 40 0 0 1 10 4 0 cls_stat_kord **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
130 Iaijutsu_Master 16790616 16826114 16826115 16826116 16826117 IC_IAIJUTSU 10 CLS_ATK_1 CLS_FEAT_IAIJ CLS_SAVTHR_ROG CLS_SKILL_IAIJ CLS_BFEAT_IAIJ 4 **** **** 1 0 16 13 16 10 10 9 CHA 0X05 0X1 0 CLASS_TYPE_IAIJUTSU_MASTER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_IAIJ 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
130 Iaijutsu_Master 16790616 16826114 16826115 16826116 16826117 IC_IAIJUTSU 10 CLS_ATK_1 CLS_FEAT_IAIJ CLS_SAVTHR_ROG CLS_SKILL_IAIJ CLS_BFEAT_IAIJ 4 **** **** 1 0 16 13 16 10 10 9 CHA 0X05 0X1 0 CLASS_TYPE_IAIJUTSU_MASTER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_IAIJ 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
131 Disciple_of_Dispater 16790617 16826136 16826137 16826138 16826139 IR_BLKGRD 10 CLS_ATK_1 CLS_FEAT_DISP CLS_SAVTHR_MONK CLS_SKILL_DISP CLS_BFEAT_DISP 4 **** **** 1 0 16 13 16 10 10 9 CON 0X09 0X2 0 CLASS_TYPE_DISPATER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_DISP 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
131 Disciple_of_Dispater 16790617 16826136 16826137 16826138 16826139 IR_BLKGRD 10 CLS_ATK_1 CLS_FEAT_DISP CLS_SAVTHR_MONK CLS_SKILL_DISP CLS_BFEAT_DISP 4 **** **** 1 0 16 13 16 10 10 9 CON 0X09 0X2 0 CLASS_TYPE_DISPATER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_DISP 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
132 CW_Samurai 16790618 16826168 16826169 16826170 16826171 IR_SAMURAI 10 CLS_ATK_1 CLS_FEAT_CWSM CLS_SAVTHR_FIGHT CLS_SKILL_SAMUR CLS_BFEAT_CWSM 2 **** **** 0 0 16 13 16 10 10 9 STR 0X05 0X1 0 CLASS_TYPE_CW_SAMURAI 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_CWSM 20 1 0 0 -1 5 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
132 CW_Samurai 16790618 16826168 16826169 16826170 16826171 IR_SAMURAI 10 CLS_ATK_1 CLS_FEAT_CWSM CLS_SAVTHR_FIGHT CLS_SKILL_SAMUR CLS_BFEAT_CWSM 2 **** **** 0 0 16 13 16 10 10 9 STR 0X05 0X1 0 CLASS_TYPE_CW_SAMURAI 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_CWSM 20 1 0 0 -1 5 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
133 Ravager 16790619 16826156 16826157 16826158 16826159 IC_RAVA 10 CLS_ATK_1 CLS_FEAT_RAVA CLS_SAVTHR_FIGHT CLS_SKILL_RAVA CLS_BFEAT_RAVA 2 **** **** 1 0 16 13 16 10 10 9 STR 0X0A 0X3 0 CLASS_TYPE_RAVAGER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_RAVA 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
133 Ravager 16790619 16826156 16826157 16826158 16826159 IC_RAVA 10 CLS_ATK_1 CLS_FEAT_RAVA CLS_SAVTHR_FIGHT CLS_SKILL_RAVA CLS_BFEAT_RAVA 2 **** **** 0 0 16 13 16 10 10 9 STR 0X0A 0X3 0 CLASS_TYPE_RAVAGER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_RAVA 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
134 Runescarred_Berserker 16790620 16826187 16826188 16826189 16826190 IC_RUNE 10 CLS_ATK_1 CLS_FEAT_RUNE CLS_SAVTHR_FIGHT CLS_SKILL_RUNE CLS_BFEAT_RUNE 4 **** **** 1 0 16 13 16 10 10 9 STR 0X02 0X1 0 CLASS_TYPE_RUNESCARRED 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_RUNE 40 0 0 0 10 4 0 cls_stat_rune **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
134 Runescarred_Berserker 16790620 16826187 16826188 16826189 16826190 IC_RUNE 10 CLS_ATK_1 CLS_FEAT_RUNE CLS_SAVTHR_FIGHT CLS_SKILL_RUNE CLS_BFEAT_RUNE 4 **** **** 0 0 16 13 16 10 10 9 STR 0X02 0X1 0 CLASS_TYPE_RUNESCARRED 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_RUNE 40 0 0 0 10 4 0 cls_stat_rune **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
135 Talontar_Blightlord 16790621 16824917 16824918 16824919 16824920 IR_CLERIC 8 CLS_ATK_2 CLS_FEAT_BLTL CLS_SAVTHR_CLER CLS_SKILL_BLTL CLS_BFEAT_BLTL 2 **** **** 0 0 16 13 16 10 10 9 WIS 0X09 0X2 0 CLASS_TYPE_BLIGHTLORD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_BLTL 40 0 0 1 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
135 Talontar_Blightlord 16790621 16824917 16824918 16824919 16824920 IR_CLERIC 8 CLS_ATK_2 CLS_FEAT_BLTL CLS_SAVTHR_CLER CLS_SKILL_BLTL CLS_BFEAT_BLTL 2 **** **** 0 0 16 13 16 10 10 9 WIS 0X09 0X2 0 CLASS_TYPE_BLIGHTLORD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_BLTL 40 0 0 1 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
136 Shadowcaster 16790622 16847394 16847395 16847396 16847397 IR_SHADADEPT 6 CLS_ATK_3 CLS_FEAT_SHDCST CLS_SAVTHR_CLER CLS_SKILL_SHDCST CLS_BFEAT_SHDCST 2 **** **** 1 0 10 10 14 12 16 14 CHA 0x00 0x0 0 CLASS_TYPE_SHADOWCASTER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SHDCST 20 1 0 0 -1 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
136 Shadowcaster 16790622 16847394 16847395 16847396 16847397 IR_SHADADEPT 6 CLS_ATK_3 CLS_FEAT_SHDCST CLS_SAVTHR_CLER CLS_SKILL_SHDCST CLS_BFEAT_SHDCST 2 **** **** 1 0 10 10 14 12 16 14 CHA 0x00 0x0 0 CLASS_TYPE_SHADOWCASTER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SHDCST 20 1 0 0 -1 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
137 ChildOfNight 16790623 16847398 16847399 16847400 16847401 IR_X1_SHADOW 6 CLS_ATK_3 CLS_FEAT_CHLDNT CLS_SAVTHR_WIZ CLS_SKILL_CHLDNT CLS_BFEAT_CHLDNT 2 **** **** 1 0 10 10 14 12 16 14 CHA 0x00 0x0 0 CLASS_TYPE_CHILD_OF_NIGHT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_CHLDNT 40 0 0 0 10 0 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
137 ChildOfNight 16790623 16847398 16847399 16847400 16847401 IR_X1_SHADOW 6 CLS_ATK_3 CLS_FEAT_CHLDNT CLS_SAVTHR_WIZ CLS_SKILL_CHLDNT CLS_BFEAT_CHLDNT 2 **** **** 1 0 10 10 14 12 16 14 CHA 0x00 0x0 0 CLASS_TYPE_CHILD_OF_NIGHT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_CHLDNT 40 0 0 0 10 0 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
138 MasterofShadow 16790624 16847402 16847403 16847404 16847405 IR_MYSTIC 8 CLS_ATK_3 CLS_FEAT_MSTRSH CLS_SAVTHR_CLER CLS_SKILL_MSTRSH CLS_BFEAT_MSTRSH 2 **** **** 1 0 12 14 14 10 12 15 CHA 0x00 0x0 0 CLASS_TYPE_MASTER_OF_SHADOW 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_MSTRSH 40 0 0 0 10 0 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
138 MasterofShadow 16790624 16847402 16847403 16847404 16847405 IR_MYSTIC 8 CLS_ATK_3 CLS_FEAT_MSTRSH CLS_SAVTHR_CLER CLS_SKILL_MSTRSH CLS_BFEAT_MSTRSH 2 **** **** 1 0 12 14 14 10 12 15 CHA 0x00 0x0 0 CLASS_TYPE_MASTER_OF_SHADOW 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_MSTRSH 40 0 0 0 10 0 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
139 Noctumancer 16790625 16847406 16847407 16847408 16847409 IR_NOCTM 4 CLS_ATK_3 CLS_FEAT_NOCTM CLS_SAVTHR_CLER CLS_SKILL_NOCTM CLS_BFEAT_NOCTM 2 **** **** 1 0 12 14 14 10 12 15 CHA 0x00 0x0 **** CLASS_TYPE_NOCTUMANCER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_NOCTM 40 0 1 0 10 0 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
139 Noctumancer 16790625 16847406 16847407 16847408 16847409 IR_NOCTM 4 CLS_ATK_3 CLS_FEAT_NOCTM CLS_SAVTHR_CLER CLS_SKILL_NOCTM CLS_BFEAT_NOCTM 2 **** **** 1 0 12 14 14 10 12 15 CHA 0x00 0x0 **** CLASS_TYPE_NOCTUMANCER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_NOCTM 40 0 1 0 10 0 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
140 Totem_Rager 16790626 16825977 16825978 16825979 16825980 IR_PSYWARRIOR 10 CLS_ATK_2 CLS_FEAT_TOTRAG CLS_SAVTHR_RANG CLS_SKILL_TOTRAG CLS_BFEAT_TOTRAG 4 **** **** 1 0 16 15 14 10 10 10 CON 0X00 0X0 0 CLASS_TYPE_TOTEM_RAGER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_TOTRAG 40 0 0 0 10 142 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
140 Totem_Rager 16790626 16825977 16825978 16825979 16825980 IR_PSYWARRIOR 10 CLS_ATK_2 CLS_FEAT_TOTRAG CLS_SAVTHR_RANG CLS_SKILL_TOTRAG CLS_BFEAT_TOTRAG 4 **** **** 1 0 16 15 14 10 10 10 CON 0X00 0X0 0 CLASS_TYPE_TOTEM_RAGER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_TOTRAG 40 0 0 0 10 142 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
141 Ninja_CA 16790627 16832316 16832317 16832318 16832319 IR_NINJCA 6 CLS_ATK_2 CLS_FEAT_NINJCA CLS_SAVTHR_ROG CLS_SKILL_NINJCA CLS_BFEAT_NINJCA 6 **** **** 0 0 12 16 12 14 14 8 DEX 0X00 0X0 0 CLASS_TYPE_NINJA 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_NINJCA 40 1 0 0 -1 7 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
141 Ninja_CA 16790627 16832316 16832317 16832318 16832319 IR_NINJCA 6 CLS_ATK_2 CLS_FEAT_NINJCA CLS_SAVTHR_ROG CLS_SKILL_NINJCA CLS_BFEAT_NINJCA 6 **** **** 0 0 12 16 12 14 14 8 DEX 0X00 0X0 0 CLASS_TYPE_NINJA 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_NINJCA 0 1 0 0 -1 7 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
142 Shadowblade 16790628 16847410 16847411 16847412 16847413 IR_SHADOWBLADE 8 CLS_ATK_2 CLS_FEAT_SHDBLD CLS_SAVTHR_FIGHT CLS_SKILL_SHDBLD CLS_BFEAT_SHDBLD 2 **** **** 1 0 14 15 14 12 12 10 DEX 0X00 0X0 0 CLASS_TYPE_SHADOWBLADE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SHDBLD 40 0 0 0 10 8 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
142 Shadowblade 16790628 16847410 16847411 16847412 16847413 IR_SHADOWBLADE 8 CLS_ATK_2 CLS_FEAT_SHDBLD CLS_SAVTHR_FIGHT CLS_SKILL_SHDBLD CLS_BFEAT_SHDBLD 2 **** **** 1 0 14 15 14 12 12 10 DEX 0X00 0X0 0 CLASS_TYPE_SHADOWBLADE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SHDBLD 40 0 0 0 10 8 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
143 DragonShaman 16790629 16832703 16832704 16832705 16832706 IR_DRAGSHMN 10 CLS_ATK_2 CLS_FEAT_DRGSHM CLS_SAVTHR_CLER CLS_SKILL_DRGSHM CLS_BFEAT_DRGSHM 2 **** **** 1 0 12 14 16 10 14 10 CON 0X00 0X0 0 CLASS_TYPE_DRAGON_SHAMAN 1 1 3 4 5 6 7 8 9 10 11 12 12 14 15 16 17 18 19 20 CLS_PRES_DRGSHM 40 1 0 0 -1 1 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
143 DragonShaman 16790629 16832703 16832704 16832705 16832706 IR_DRAGSHMN 10 CLS_ATK_2 CLS_FEAT_DRGSHM CLS_SAVTHR_CLER CLS_SKILL_DRGSHM CLS_BFEAT_DRGSHM 2 **** **** 1 0 12 14 16 10 14 10 CON 0X00 0X0 0 CLASS_TYPE_DRAGON_SHAMAN 1 1 3 4 5 6 7 8 9 10 11 12 12 14 15 16 17 18 19 20 CLS_PRES_DRGSHM 40 1 0 0 -1 705 0 cls_stat_drgshm **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
144 Dragonfire_Adept 16790630 16832914 16832915 16832916 16832917 IR_DRGNFIREADPT 8 CLS_ATK_3 CLS_FEAT_DFA CLS_SAVTHR_CLER CLS_SKILL_DFA CLS_BFEAT_DFA 4 **** **** 1 0 10 14 16 12 10 14 CON 0X00 0X0 0 CLASS_TYPE_DRAGONFIRE_ADEPT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_DFA 40 1 0 0 -1 1 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
144 Dragonfire_Adept 16790630 16832914 16832915 16832916 16832917 IR_DRGNFIREADPT 8 CLS_ATK_3 CLS_FEAT_DFA CLS_SAVTHR_CLER CLS_SKILL_DFA CLS_BFEAT_DFA 4 **** **** 1 1 10 14 16 12 10 14 CON 0X00 0X0 0 CLASS_TYPE_DRAGONFIRE_ADEPT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_DFA 40 1 0 0 -1 1 0 **** **** **** **** **** **** **** **** **** Dragonfire **** **** **** **** ****
|
||||||
145 Psion 16790631 16823566 16823567 16823568 16823569 IR_PSION 4 CLS_ATK_3 CLS_FEAT_PSION CLS_SAVTHR_WIZ CLS_SKILL_PSION CLS_BFEAT_PSION 2 **** **** 1 0 10 14 14 12 16 10 INT 0X00 0X0 0 CLASS_TYPE_PSION 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_PSION 0 1 0 0 -1 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
145 Psion 16790631 16823566 16823567 16823568 16823569 IR_PSION 4 CLS_ATK_3 CLS_FEAT_PSION CLS_SAVTHR_WIZ CLS_SKILL_PSION CLS_BFEAT_PSION 2 **** **** 1 0 10 14 14 12 16 10 INT 0X00 0X0 0 CLASS_TYPE_PSION 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_PSION 0 1 0 0 -1 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
146 Psychic_Warrior 16790632 16823570 16823571 16823572 16823573 IR_PSYWARRIOR 8 CLS_ATK_2 CLS_FEAT_PSYWAR CLS_SAVTHR_FIGHT CLS_SKILL_PSYWAR CLS_BFEAT_PSYWAR 2 **** **** 1 0 14 12 14 16 10 10 WIS 0X00 0X0 0 CLASS_TYPE_PSYWAR 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_PSYWAR 0 1 0 0 -1 2 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
146 Psychic_Warrior 16790632 16823570 16823571 16823572 16823573 IR_PSYWARRIOR 8 CLS_ATK_2 CLS_FEAT_PSYWAR CLS_SAVTHR_FIGHT CLS_SKILL_PSYWAR CLS_BFEAT_PSYWAR 2 **** **** 1 0 14 12 14 16 10 10 WIS 0X00 0X0 0 CLASS_TYPE_PSYWAR 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_PSYWAR 0 1 0 0 -1 2 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
147 Soulknife 16790633 16823574 16823575 16823576 16823577 IR_SOULKNIFE 10 CLS_ATK_2 CLS_FEAT_SOULKN CLS_SAVTHR_BARD CLS_SKILL_SOULKN CLS_BFEAT_SOULKN 4 **** **** 1 0 16 15 14 10 10 10 STR 0X00 0X0 0 CLASS_TYPE_SOULKNIFE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SOULKN 0 1 0 0 -1 5 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
147 Soulknife 16790633 16823574 16823575 16823576 16823577 IR_SOULKNIFE 10 CLS_ATK_2 CLS_FEAT_SOULKN CLS_SAVTHR_BARD CLS_SKILL_SOULKN CLS_BFEAT_SOULKN 4 **** **** 1 0 16 15 14 10 10 10 STR 0X00 0X0 0 CLASS_TYPE_SOULKNIFE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SOULKN 0 1 0 0 -1 5 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@@ -181,14 +181,14 @@
|
|||||||
177 Frenzied_Berserker 16790662 16824216 16824217 16824218 16824219 IR_FREBZK 12 CLS_ATK_1 CLS_FEAT_FREBZK CLS_SAVTHR_BARB CLS_SKILL_FREBZK CLS_BFEAT_FREBZK 2 **** **** 1 0 16 14 14 14 10 8 STR 0X02 0X1 0 CLASS_TYPE_FRE_BERSERKER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_FREBZK 40 0 0 0 10 17 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
177 Frenzied_Berserker 16790662 16824216 16824217 16824218 16824219 IR_FREBZK 12 CLS_ATK_1 CLS_FEAT_FREBZK CLS_SAVTHR_BARB CLS_SKILL_FREBZK CLS_BFEAT_FREBZK 2 **** **** 1 0 16 14 14 14 10 8 STR 0X02 0X1 0 CLASS_TYPE_FRE_BERSERKER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_FREBZK 40 0 0 0 10 17 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
178 Tempest 16790663 16824242 16824243 16824244 16824245 IR_TEMPEST 10 CLS_ATK_1 CLS_FEAT_TEMPST CLS_SAVTHR_BARB CLS_SKILL_TEMPST CLS_BFEAT_TEMPST 2 **** **** 1 0 10 16 12 10 16 10 DEX 0X00 0X0 0 CLASS_TYPE_TEMPEST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_TEMPST 40 0 0 0 10 7 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
178 Tempest 16790663 16824242 16824243 16824244 16824245 IR_TEMPEST 10 CLS_ATK_1 CLS_FEAT_TEMPST CLS_SAVTHR_BARB CLS_SKILL_TEMPST CLS_BFEAT_TEMPST 2 **** **** 1 0 10 16 12 10 16 10 DEX 0X00 0X0 0 CLASS_TYPE_TEMPEST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_TEMPST 40 0 0 0 10 7 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
179 Foe_Hunter 16790664 16824256 16824257 16824258 16824259 IR_FH 10 CLS_ATK_1 CLS_FEAT_FH CLS_SAVTHR_WILD CLS_SKILL_FH CLS_BFEAT_FH 2 **** **** 1 0 10 16 12 10 16 10 DEX 0X00 0X0 0 CLASS_TYPE_FOE_HUNTER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_FH 40 0 0 0 10 58 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
179 Foe_Hunter 16790664 16824256 16824257 16824258 16824259 IR_FH 10 CLS_ATK_1 CLS_FEAT_FH CLS_SAVTHR_WILD CLS_SKILL_FH CLS_BFEAT_FH 2 **** **** 1 0 10 16 12 10 16 10 DEX 0X00 0X0 0 CLASS_TYPE_FOE_HUNTER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_FH 40 0 0 0 10 58 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
180 ***Eye_of_Gruumsh*** 16790665 16824294 16824295 16824296 16824297 IR_GRUUMSH 12 CLS_ATK_1 CLS_FEAT_EOG CLS_SAVTHR_BARB CLS_SKILL_EOG CLS_BFEAT_EOG 2 **** **** 0 0 16 14 14 14 10 8 STR 0X0A 0X3 0 CLASS_TYPE_PRC_EYE_OF_GRUUMSH 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_EOG 40 0 0 0 10 17 0 cls_stat_eog **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
180 Verdant_Lord 16855246 16855247 16855248 16855249 16855250 IR_DRUID 8 CLS_ATK_1 CLS_FEAT_VLORD CLS_SAVTHR_DRU CLS_SKILL_VLORD CLS_BFEAT_VLORD 4 **** **** 1 0 14 13 13 16 10 10 WIS 0X10 0X2 0 CLASS_VERDANT_LORD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_VLORD 40 0 0 1 10 3 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
181 Orc_Warlord 16790666 16824312 16824313 16824314 16824315 IR_ORCWAR 12 CLS_ATK_1 CLS_FEAT_ORCWAR CLS_SAVTHR_MONK CLS_SKILL_ORCWAR CLS_BFEAT_ORCWAR 2 **** **** 1 0 16 14 14 14 10 8 STR 0X08 0X2 0 CLASS_TYPE_ORC_WARLORD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ORCWAR 5 0 0 0 5 17 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
181 Orc_Warlord 16790666 16824312 16824313 16824314 16824315 IR_ORCWAR 12 CLS_ATK_1 CLS_FEAT_ORCWAR CLS_SAVTHR_MONK CLS_SKILL_ORCWAR CLS_BFEAT_ORCWAR 2 **** **** 1 0 16 14 14 14 10 8 STR 0X08 0X2 0 CLASS_TYPE_ORC_WARLORD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ORCWAR 5 0 0 0 5 17 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
182 Thrall_of_Grazzt 16790667 16824516 16824517 16824518 16824519 IR_TOG 6 CLS_ATK_3 CLS_FEAT_TOG CLS_SAVTHR_WIZ CLS_SKILL_TOG CLS_BFEAT_TOG 4 **** **** 1 0 12 16 14 8 14 12 INT 0X09 0X2 0 CLASS_TYPE_THRALL_OF_GRAZZT_A 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_TOG_A 40 0 2 0 10 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
182 Thrall_of_Grazzt 16790667 16824516 16824517 16824518 16824519 IR_TOG 6 CLS_ATK_3 CLS_FEAT_TOG CLS_SAVTHR_WIZ CLS_SKILL_TOG CLS_BFEAT_TOG 4 **** **** 1 0 12 16 14 8 14 12 INT 0X09 0X2 0 CLASS_TYPE_THRALL_OF_GRAZZT_A 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_TOG_A 40 0 2 0 10 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
183 Necrocarnate 16790668 16838080 16838081 16838082 16838083 ir_truenecro 6 CLS_ATK_3 CLS_FEAT_NECRNM CLS_SAVTHR_WIZ CLS_SKILL_NECRNM CLS_BFEAT_BLANK 2 **** **** 1 0 12 16 14 8 14 12 INT 0X09 0X2 0 CLASS_TYPE_NECROCARNATE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_NECRNM 13 0 0 0 13 13 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
183 Necrocarnate 16790668 16838080 16838081 16838082 16838083 ir_truenecro 6 CLS_ATK_3 CLS_FEAT_NECRNM CLS_SAVTHR_WIZ CLS_SKILL_NECRNM CLS_BFEAT_BLANK 2 **** **** 1 0 12 16 14 8 14 12 INT 0X09 0X2 0 CLASS_TYPE_NECROCARNATE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_NECRNM 13 0 0 0 13 13 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
184 Eldritch_Disciple 16790669 16790013 16790014 16790015 16790016 IR_EDISC 8 CLS_ATK_2 CLS_FEAT_EDISC CLS_SAVTHR_CLER CLS_SKILL_EDISC CLS_BFEAT_EDISC 2 **** **** 1 0 14 8 14 16 10 14 WIS 0X00 0X0 0 CLASS_TYPE_ELDRITCH_DISCIPLE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_EDISC 40 0 0 1 10 2 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
184 Eldritch_Disciple 16790669 16790013 16790014 16790015 16790016 IR_EDISC 8 CLS_ATK_2 CLS_FEAT_EDISC CLS_SAVTHR_CLER CLS_SKILL_EDISC CLS_BFEAT_EDISC 2 **** **** 1 0 14 8 14 16 10 14 WIS 0X00 0X0 0 CLASS_TYPE_ELDRITCH_DISCIPLE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_EDISC 40 0 0 1 10 2 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
185 Eldritch_Theurge 16790670 16790017 16790018 16790019 16790020 IR_ETHEUR 4 CLS_ATK_2 CLS_FEAT_ETHEUR CLS_SAVTHR_WIZ CLS_SKILL_ETHEUR CLS_BFEAT_ETHEUR 2 **** **** 1 0 10 14 14 12 16 10 INT 0X00 0X0 0 CLASS_TYPE_ELDRITCH_THEURGE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ETHEUR 40 0 1 0 10 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
185 Eldritch_Theurge 16790670 16790017 16790018 16790019 16790020 IR_ETHEUR 4 CLS_ATK_2 CLS_FEAT_ETHEUR CLS_SAVTHR_WIZ CLS_SKILL_ETHEUR CLS_BFEAT_ETHEUR 2 **** **** 1 0 10 14 14 12 16 10 INT 0X00 0X0 0 CLASS_TYPE_ELDRITCH_THEURGE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ETHEUR 40 0 1 0 10 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
186 Ghost_Faced_Killer 16790671 16832352 16832353 16832354 16832355 IR_GFKILL_PRC 8 CLS_ATK_1 CLS_FEAT_GFKILL CLS_SAVTHR_FIGHT CLS_SKILL_GFKILL CLS_BFEAT_GFKILL 4 **** **** 1 0 16 13 16 10 10 9 STR 0X09 0X2 0 CLASS_TYPE_GHOST_FACED_KILLER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_GFKILL 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
186 Ghost_Faced_Killer 16790671 16832352 16832353 16832354 16832355 IR_GFKILL_PRC 8 CLS_ATK_1 CLS_FEAT_GFKILL CLS_SAVTHR_FIGHT CLS_SKILL_GFKILL CLS_BFEAT_GFKILL 4 **** **** 1 0 16 13 16 10 10 9 STR 0X09 0X2 0 CLASS_TYPE_GHOST_FACED_KILLER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_GFKILL 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
187 DreadNecromancer 16790672 16847586 16847587 16847588 16847589 IR_PALEMA 6 CLS_ATK_3 CLS_FEAT_DNECRO CLS_SAVTHR_WIZ CLS_SKILL_DNECRO CLS_BFEAT_DNECRO 2 CLS_SPGN_DNECRO CLS_SPKN_DNECRO 1 1 10 14 12 10 14 16 CHA 0X08 0X2 0 CLASS_TYPE_DREAD_NECROMANCER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_DNECRO 0 1 1 0 -1 10 130 **** **** **** **** **** **** **** **** **** DreadNecro **** **** **** **** ****
|
187 DreadNecromancer 16790672 16847586 16847587 16847588 16847589 IR_PALEMA 6 CLS_ATK_3 CLS_FEAT_DNECRO CLS_SAVTHR_WIZ CLS_SKILL_DNECRO CLS_BFEAT_DNECRO 2 CLS_SPGN_DNECRO CLS_SPKN_DNECRO 1 1 10 14 12 10 14 16 CHA 0X08 0X2 0 CLASS_TYPE_DREAD_NECROMANCER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_DNECRO 0 1 0 0 -1 10 130 **** **** **** **** **** **** 1 **** **** DreadNecro **** **** **** **** ****
|
||||||
188 UltimateMagus **** 16790350 16790351 16790352 16790353 IR_EPICSPELL 4 CLS_ATK_3 CLS_FEAT_UM CLS_SAVTHR_WIZ CLS_SKILL_UM CLS_BFEAT_UM 2 **** **** 0 0 10 11 11 16 16 10 INT 0X00 0X0 0 CLASS_TYPE_MYSTIC_THEURGE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_UM 40 0 2 0 10 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
188 UltimateMagus **** 16790350 16790351 16790352 16790353 IR_EPICSPELL 4 CLS_ATK_3 CLS_FEAT_UM CLS_SAVTHR_WIZ CLS_SKILL_UM CLS_BFEAT_UM 2 **** **** 0 0 10 11 11 16 16 10 INT 0X00 0X0 0 CLASS_TYPE_MYSTIC_THEURGE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_UM 40 0 2 0 10 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
189 ForestMaster 16790673 16793736 16793737 16793738 16793739 IR_DRUID 8 CLS_ATK_2 CLS_FEAT_FORMAS CLS_SAVTHR_DRU CLS_SKILL_FORMAS CLS_BFEAT_FORMAS 2 **** **** 0 0 14 13 13 16 10 10 WIS 0X00 0X0 0 CLASS_TYPE_FORESTMASTER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_FORMAS 40 0 0 1 10 3 0 cls_stat_formas **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
189 ForestMaster 16790673 16793736 16793737 16793738 16793739 IR_DRUID 8 CLS_ATK_2 CLS_FEAT_FORMAS CLS_SAVTHR_DRU CLS_SKILL_FORMAS CLS_BFEAT_FORMAS 2 **** **** 0 0 14 13 13 16 10 10 WIS 0X00 0X0 0 CLASS_TYPE_FORESTMASTER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_FORMAS 40 0 0 1 10 3 0 cls_stat_formas **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
190 Archivist 16790674 16789866 16789867 16789868 16789869 IR_ARCHIVIST 6 CLS_ATK_3 CLS_FEAT_ARCHV CLS_SAVTHR_CLER CLS_SKILL_ARCHV CLS_BFEAT_ARCHV 4 CLS_SPGN_ARCHV **** 1 1 10 14 14 12 16 10 INT 0X00 0X0 0 CLASS_TYPE_ARCHIVIST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ARCHV 0 1 0 0 -1 10 65 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
190 Archivist 16790674 16789866 16789867 16789868 16789869 IR_ARCHIVIST 6 CLS_ATK_3 CLS_FEAT_ARCHV CLS_SAVTHR_CLER CLS_SKILL_ARCHV CLS_BFEAT_ARCHV 4 CLS_SPGN_ARCHV **** 1 1 10 14 14 12 16 10 INT 0X00 0X0 0 CLASS_TYPE_ARCHIVIST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ARCHV 0 1 0 0 -1 10 65 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@@ -198,9 +198,9 @@
|
|||||||
194 RubyKnightVindicator 16790678 16827167 16827168 16827169 16827170 IR_HEIRONEOUS 8 CLS_ATK_1 CLS_FEAT_RBYKNT CLS_SAVTHR_WIZ CLS_SKILL_RBYKNT CLS_BFEAT_RBYKNT 4 **** **** 1 0 12 16 14 8 14 12 DEX 0X00 0X0 0 CLASS_TYPE_RUBY_VINDICATOR 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_RBYKNT 40 0 0 1 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
194 RubyKnightVindicator 16790678 16827167 16827168 16827169 16827170 IR_HEIRONEOUS 8 CLS_ATK_1 CLS_FEAT_RBYKNT CLS_SAVTHR_WIZ CLS_SKILL_RBYKNT CLS_BFEAT_RBYKNT 4 **** **** 1 0 12 16 14 8 14 12 DEX 0X00 0X0 0 CLASS_TYPE_RUBY_VINDICATOR 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_RBYKNT 40 0 0 1 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
195 MasterOfNine 16790679 16847557 16847558 16847559 16847560 IR_PSYWARRIOR 8 CLS_ATK_2 CLS_FEAT_MONINE CLS_SAVTHR_WIZ CLS_SKILL_MONINE CLS_BFEAT_MONINE 6 **** **** 1 0 12 16 14 8 14 12 DEX 0X00 0X0 0 CLASS_TYPE_MASTER_OF_NINE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_MONINE 5 0 0 0 5 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
195 MasterOfNine 16790679 16847557 16847558 16847559 16847560 IR_PSYWARRIOR 8 CLS_ATK_2 CLS_FEAT_MONINE CLS_SAVTHR_WIZ CLS_SKILL_MONINE CLS_BFEAT_MONINE 6 **** **** 1 0 12 16 14 8 14 12 DEX 0X00 0X0 0 CLASS_TYPE_MASTER_OF_NINE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_MONINE 5 0 0 0 5 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
196 EternalBlade 16790680 16834750 16834751 16834752 16834753 IR_FH 10 CLS_ATK_1 CLS_FEAT_ETBL CLS_SAVTHR_FIGHT CLS_SKILL_ETBL CLS_BFEAT_ETBL 2 **** **** 1 0 16 13 16 10 10 9 STR 0X00 0X0 0 CLASS_TYPE_ETERNAL_BLADE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ETBL 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
196 EternalBlade 16790680 16834750 16834751 16834752 16834753 IR_FH 10 CLS_ATK_1 CLS_FEAT_ETBL CLS_SAVTHR_FIGHT CLS_SKILL_ETBL CLS_BFEAT_ETBL 2 **** **** 1 0 16 13 16 10 10 9 STR 0X00 0X0 0 CLASS_TYPE_ETERNAL_BLADE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ETBL 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
197 ShadowSunNinja 16790681 16834778 16834779 16834780 16834781 IR_SHADADEPT 8 CLS_ATK_2 CLS_FEAT_SSN CLS_SAVTHR_MONK CLS_SKILL_SSN CLS_BFEAT_SSN 4 **** **** 0 0 16 13 16 10 10 9 STR 0X11 0X2 0 CLASS_TYPE_SHADOW_SUN_NINJA 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SSN 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
197 ShadowSunNinja 16790681 16834778 16834779 16834780 16834781 IR_SHADADEPT 8 CLS_ATK_2 CLS_FEAT_SSN CLS_SAVTHR_MONK CLS_SKILL_SSN CLS_BFEAT_SSN 4 **** **** 1 0 16 13 16 10 10 9 STR 0X11 0X2 0 CLASS_TYPE_SHADOW_SUN_NINJA 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SSN 40 0 0 0 10 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
198 WitchbornBinder 16790682 16838144 16838145 16838146 16838147 IR_WITCH 6 CLS_ATK_2 CLS_FEAT_WCHBRN CLS_SAVTHR_WIZ CLS_SKILL_WCHBRN CLS_BFEAT_WCHBRN 4 **** **** 1 0 10 14 14 10 12 16 CHA 0X00 0X0 0 CLASS_TYPE_WITCHBORN_BINDER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WCHBRN 40 0 0 0 10 6 2 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
198 WitchbornBinder 16790682 16838144 16838145 16838146 16838147 IR_WITCH 6 CLS_ATK_2 CLS_FEAT_WCHBRN CLS_SAVTHR_WIZ CLS_SKILL_WCHBRN CLS_BFEAT_WCHBRN 4 **** **** 1 0 10 14 14 10 12 16 CHA 0X00 0X0 0 CLASS_TYPE_WITCHBORN_BINDER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WCHBRN 40 0 0 0 10 6 2 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
199 Baelnorn 16790683 16829216 16829217 16829218 16829219 IR_BAELNORN 4 CLS_ATK_4 CLS_FEAT_BAELN CLS_SAVTHR_LICH CLS_SKILL_WIZ CLS_BFEAT_LICH 2 **** **** 1 0 13 13 13 13 13 13 CHA 0X11 0X2 0 CLASS_TYPE_BAELNORN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_BAELN 4 0 0 0 4 10 0 cls_stat_baeln **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
199 Lion_of_Talisid 16855216 16855217 16855218 16855219 16855220 IR_LIONTALISID 8 CLS_ATK_2 CLS_FEAT_LOT CLS_SAVTHR_DRU CLS_SKILL_LOT CLS_BFEAT_LOT 4 **** **** 1 0 14 13 13 16 10 10 WIS 0X16 0X3 0 CLASS_TYPE_LION_OF_TALISID 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_LOT 40 0 0 1 10 3 0 **** **** **** **** **** **** **** **** **** **** **** **** 1 **** ****
|
||||||
200 Disciple_of_Meph 16790684 16823016 16823017 16823018 16823019 IR_DISCMEPH 8 CLS_ATK_1 CLS_FEAT_MEPH CLS_SAVTHR_MONK CLS_SKILL_MEPH CLS_BFEAT_MEPH 4 **** **** 1 0 12 16 14 8 14 12 CHA 0X09 0X2 0 CLASS_TYPE_DISCIPLE_OF_MEPH 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_MEPH 40 0 0 0 10 2 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
200 Disciple_of_Meph 16790684 16823016 16823017 16823018 16823019 IR_DISCMEPH 8 CLS_ATK_1 CLS_FEAT_MEPH CLS_SAVTHR_MONK CLS_SKILL_MEPH CLS_BFEAT_MEPH 4 **** **** 1 0 12 16 14 8 14 12 CHA 0X09 0X2 0 CLASS_TYPE_DISCIPLE_OF_MEPH 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_MEPH 40 0 0 0 10 2 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
201 Soul_Eater 16790685 16832116 16832117 16832118 16832119 IR_SOULEATER 8 CLS_ATK_1 CLS_FEAT_SLEAT CLS_SAVTHR_MONK CLS_SKILL_SLEAT CLS_BFEAT_SLEAT 4 **** **** 1 0 14 16 10 12 14 10 INT 0X09 0X2 0 CLASS_TYPE_SOUL_EATER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SLEAT 40 0 0 0 10 1 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
201 Soul_Eater 16790685 16832116 16832117 16832118 16832119 IR_SOULEATER 8 CLS_ATK_1 CLS_FEAT_SLEAT CLS_SAVTHR_MONK CLS_SKILL_SLEAT CLS_BFEAT_SLEAT 4 **** **** 1 0 14 16 10 12 14 10 INT 0X09 0X2 0 CLASS_TYPE_SOUL_EATER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SLEAT 40 0 0 0 10 1 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
202 Henshin_Mystic 16790686 16825076 16825078 16825079 16825080 IR_HNSHN 8 CLS_ATK_2 CLS_FEAT_HNSHN CLS_SAVTHR_MONK CLS_SKILL_HNSHN CLS_BFEAT_HNSHN 4 **** **** 1 0 14 14 14 15 10 10 WIS 0X05 0X1 0 CLASS_TYPE_HENSHIN_MYSTIC 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_HNSHN 40 0 0 0 10 5 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
202 Henshin_Mystic 16790686 16825076 16825078 16825079 16825080 IR_HNSHN 8 CLS_ATK_2 CLS_FEAT_HNSHN CLS_SAVTHR_MONK CLS_SKILL_HNSHN CLS_BFEAT_HNSHN 4 **** **** 1 0 14 14 14 15 10 10 WIS 0X05 0X1 0 CLASS_TYPE_HENSHIN_MYSTIC 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_HNSHN 40 0 0 0 10 5 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@@ -208,7 +208,7 @@
|
|||||||
204 Enlightened_Fist 16790688 16829416 16829417 16829418 16829419 IR_SACREDFIST 8 CLS_ATK_2 CLS_FEAT_ENLFIS CLS_SAVTHR_BARD CLS_SKILL_ENLFIS CLS_BFEAT_ENLFIS 4 **** **** 1 0 10 14 12 14 16 10 DEX 0X00 0X0 0 CLASS_TYPE_ENLIGHTENEDFIST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ENLFIS 40 0 1 0 10 5 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
204 Enlightened_Fist 16790688 16829416 16829417 16829418 16829419 IR_SACREDFIST 8 CLS_ATK_2 CLS_FEAT_ENLFIS CLS_SAVTHR_BARD CLS_SKILL_ENLFIS CLS_BFEAT_ENLFIS 4 **** **** 1 0 10 14 12 14 16 10 DEX 0X00 0X0 0 CLASS_TYPE_ENLIGHTENEDFIST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ENLFIS 40 0 1 0 10 5 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
205 Morninglord 16790689 16789624 16789625 16789626 16789627 IR_MORNING 8 CLS_ATK_2 CLS_FEAT_ML CLS_SAVTHR_CLER CLS_SKILL_ML CLS_BFEAT_ML 2 **** **** 0 0 14 8 14 16 10 14 CHA 0X11 0X2 0 CLASS_TYPE_MORNINGLORD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ML 40 0 0 1 10 2 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
205 Morninglord 16790689 16789624 16789625 16789626 16789627 IR_MORNING 8 CLS_ATK_2 CLS_FEAT_ML CLS_SAVTHR_CLER CLS_SKILL_ML CLS_BFEAT_ML 2 **** **** 0 0 14 8 14 16 10 14 CHA 0X11 0X2 0 CLASS_TYPE_MORNINGLORD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_ML 40 0 0 1 10 2 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
206 IncarnumBlade 16790690 16838136 16838137 16838138 16838139 IR_CRUSADER 10 CLS_ATK_1 CLS_FEAT_IBLADE CLS_SAVTHR_FIGHT CLS_SKILL_IBLADE CLS_BFEAT_BLANK 2 **** **** 1 0 16 14 14 14 10 8 STR 0X01 0X3 0 CLASS_TYPE_INCARNUM_BLADE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_IBLADE 5 0 0 0 5 17 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
206 IncarnumBlade 16790690 16838136 16838137 16838138 16838139 IR_CRUSADER 10 CLS_ATK_1 CLS_FEAT_IBLADE CLS_SAVTHR_FIGHT CLS_SKILL_IBLADE CLS_BFEAT_BLANK 2 **** **** 1 0 16 14 14 14 10 8 STR 0X01 0X3 0 CLASS_TYPE_INCARNUM_BLADE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_IBLADE 5 0 0 0 5 17 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
207 OAShaman 16790691 16827659 16827660 16827661 16827662 IR_CLERIC 6 CLS_ATK_2 CLS_FEAT_SHAMAN CLS_SAVTHR_WIZ CLS_SKILL_SHAMAN CLS_BFEAT_SHAMAN 4 CLS_SPGN_SHAMAN **** 1 1 10 13 12 16 13 12 WIS 0X00 0X0 0 CLASS_TYPE_SHAMAN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SHAMAN 0 1 0 0 -1 2 0 **** 1 0 1 0 0 0 0 WIS Shaman 1 1 1 0 0
|
207 OAShaman 16790691 16827659 16827660 16827661 16827662 IR_CLERIC 6 CLS_ATK_2 CLS_FEAT_SHAMAN CLS_SAVTHR_WIZ CLS_SKILL_SHAMAN CLS_BFEAT_SHAMAN 4 CLS_SPGN_SHAMAN **** 0 1 10 13 12 16 13 12 WIS 0X00 0X0 0 CLASS_TYPE_SHAMAN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SHAMAN 0 1 0 0 -1 2 0 **** 1 0 1 0 0 0 0 WIS Shaman 1 1 1 0 0
|
||||||
208 Pyrokineticist 16790692 16827043 16827044 16827045 16827046 IR_BFZ 8 CLS_ATK_2 CLS_FEAT_PYRO CLS_SAVTHR_WILD CLS_SKILL_PYRO CLS_BFEAT_PYRO 2 **** **** 1 0 10 14 14 10 12 16 CHA 0X03 0X1 0 CLASS_TYPE_PYROKINETICIST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_PYRO 40 0 0 0 10 9 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
208 Pyrokineticist 16790692 16827043 16827044 16827045 16827046 IR_BFZ 8 CLS_ATK_2 CLS_FEAT_PYRO CLS_SAVTHR_WILD CLS_SKILL_PYRO CLS_BFEAT_PYRO 2 **** **** 1 0 10 14 14 10 12 16 CHA 0X03 0X1 0 CLASS_TYPE_PYROKINETICIST 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_PYRO 40 0 0 0 10 9 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
209 Shadowmind 16790693 16829364 16829365 16829366 16829367 IR_TFSHAD 6 CLS_ATK_2 CLS_FEAT_SDMIND CLS_SAVTHR_BARD CLS_SKILL_SDMIND CLS_BFEAT_SDMIND 4 **** **** 1 0 10 11 11 16 16 10 INT 0X00 0X0 0 CLASS_TYPE_SHADOWMIND 1 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SDMIND 40 0 0 0 10 8 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
209 Shadowmind 16790693 16829364 16829365 16829366 16829367 IR_TFSHAD 6 CLS_ATK_2 CLS_FEAT_SDMIND CLS_SAVTHR_BARD CLS_SKILL_SDMIND CLS_BFEAT_SDMIND 4 **** **** 1 0 10 11 11 16 16 10 INT 0X00 0X0 0 CLASS_TYPE_SHADOWMIND 1 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SDMIND 40 0 0 0 10 8 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
210 Psychic_Thurge 16790694 16823908 16823909 16823910 16823911 IR_PSYCHIC 4 CLS_ATK_3 CLS_FEAT_PSYCH CLS_SAVTHR_WIZ CLS_SKILL_PSYCH CLS_BFEAT_PSYCH 2 **** **** 1 0 10 11 11 16 16 10 INT 0X00 0X0 0 CLASS_TYPE_PSYCHIC_THEURGE 1 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_PSYCH 40 0 0 1 10 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
210 Psychic_Thurge 16790694 16823908 16823909 16823910 16823911 IR_PSYCHIC 4 CLS_ATK_3 CLS_FEAT_PSYCH CLS_SAVTHR_WIZ CLS_SKILL_PSYCH CLS_BFEAT_PSYCH 2 **** **** 1 0 10 11 11 16 16 10 INT 0X00 0X0 0 CLASS_TYPE_PSYCHIC_THEURGE 1 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_PSYCH 40 0 0 1 10 10 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@@ -235,9 +235,9 @@
|
|||||||
231 BrimstoneSpeaker 16790715 16827554 16827555 16827556 16827557 IR_BRIMSTONE 8 CLS_ATK_2 CLS_FEAT_BRIMST CLS_SAVTHR_CLER CLS_SKILL_BRIMST CLS_BFEAT_BRIMST 2 **** **** 1 0 12 16 14 8 14 12 WIS 0X11 0X2 0 CLASS_TYPE_BRIMSTONE_SPEAKER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_BRIMST 40 0 0 2 10 2 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
231 BrimstoneSpeaker 16790715 16827554 16827555 16827556 16827557 IR_BRIMSTONE 8 CLS_ATK_2 CLS_FEAT_BRIMST CLS_SAVTHR_CLER CLS_SKILL_BRIMST CLS_BFEAT_BRIMST 2 **** **** 1 0 12 16 14 8 14 12 WIS 0X11 0X2 0 CLASS_TYPE_BRIMSTONE_SPEAKER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_BRIMST 40 0 0 2 10 2 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
232 Shugenja **** 16825142 16825143 16825144 16825145 IR_HNSHN 6 CLS_ATK_3 CLS_FEAT_SHUGEN CLS_SAVTHR_WIZ CLS_SKILL_SHUGEN CLS_BFEAT_SHUGEN 4 **** **** 0 0 10 14 14 10 12 16 CHA 0X00 0X0 0 CLASS_TYPE_SHUGENJA 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SHUGEN 0 1 0 0 -1 0 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
232 Shugenja **** 16825142 16825143 16825144 16825145 IR_HNSHN 6 CLS_ATK_3 CLS_FEAT_SHUGEN CLS_SAVTHR_WIZ CLS_SKILL_SHUGEN CLS_BFEAT_SHUGEN 4 **** **** 0 0 10 14 14 10 12 16 CHA 0X00 0X0 0 CLASS_TYPE_SHUGENJA 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SHUGEN 0 1 0 0 -1 0 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
233 Sohei 16790716 16827429 16827430 16827431 16827432 IR_FIGHTER 10 CLS_ATK_2 CLS_FEAT_SOHEI CLS_SAVTHR_CLER CLS_SKILL_SOHEI CLS_BFEAT_SOHEI 2 CLS_SPGN_SOHEI **** 1 1 16 10 13 14 13 10 STR 0X05 0X1 0 CLASS_TYPE_SOHEI 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SOHEI 0 1 0 0 -1 6 0 **** 1 0 0 0 0 0 0 WIS Sohei 1 4 255 0 0
|
233 Sohei 16790716 16827429 16827430 16827431 16827432 IR_FIGHTER 10 CLS_ATK_2 CLS_FEAT_SOHEI CLS_SAVTHR_CLER CLS_SKILL_SOHEI CLS_BFEAT_SOHEI 2 CLS_SPGN_SOHEI **** 1 1 16 10 13 14 13 10 STR 0X05 0X1 0 CLASS_TYPE_SOHEI 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SOHEI 0 1 0 0 -1 6 0 **** 1 0 0 0 0 0 0 WIS Sohei 1 4 255 0 0
|
||||||
234 Crusader 16790717 16829702 16829703 16829704 16829705 IR_CRUSADER 10 CLS_ATK_1 CLS_FEAT_CRUSDR CLS_SAVTHR_FIGHT CLS_SKILL_CRUSDR CLS_BFEAT_CRUSDR 4 **** **** 1 0 16 14 14 10 12 10 STR 0X1E 0X3 1 CLASS_TYPE_CRUSADER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_CRUSDR 40 1 0 0 -1 6 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
234 Crusader 16790717 16829702 16829703 16829704 16829705 IR_CRUSADER 10 CLS_ATK_1 CLS_FEAT_CRUSDR CLS_SAVTHR_FIGHT CLS_SKILL_CRUSDR CLS_BFEAT_CRUSDR 4 **** **** 1 0 16 14 14 10 12 10 STR 0X1E 0X3 1 CLASS_TYPE_CRUSADER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_CRUSDR 0 1 0 0 -1 6 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
235 Swordsage 16790718 16829706 16829707 16829708 16829709 IR_MONK 8 CLS_ATK_2 CLS_FEAT_SWDSGE CLS_SAVTHR_BARD CLS_SKILL_SWDSGE CLS_BFEAT_SWDSGE 6 **** **** 1 0 16 14 14 10 12 10 STR 0X00 0X0 0 CLASS_TYPE_SWORDSAGE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SWDSGE 40 1 0 0 -1 5 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
235 Swordsage 16790718 16829706 16829707 16829708 16829709 IR_MONK 8 CLS_ATK_2 CLS_FEAT_SWDSGE CLS_SAVTHR_BARD CLS_SKILL_SWDSGE CLS_BFEAT_SWDSGE 6 **** **** 1 0 16 14 14 10 12 10 STR 0X00 0X0 0 CLASS_TYPE_SWORDSAGE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_SWDSGE 0 1 0 0 -1 5 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
236 Warblade 16790719 16829710 16829711 16829712 16829713 IR_FIGHTER 12 CLS_ATK_1 CLS_FEAT_WARBLD CLS_SAVTHR_FIGHT CLS_SKILL_WARBLD CLS_BFEAT_WARBLD 4 **** **** 1 0 16 14 14 10 12 10 STR 0X00 0X0 0 CLASS_TYPE_WARBLADE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WARBLD 40 1 0 0 -1 5 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
236 Warblade 16790719 16829710 16829711 16829712 16829713 IR_FIGHTER 12 CLS_ATK_1 CLS_FEAT_WARBLD CLS_SAVTHR_FIGHT CLS_SKILL_WARBLD CLS_BFEAT_WARBLD 4 **** **** 1 0 16 14 14 10 12 10 STR 0X00 0X0 0 CLASS_TYPE_WARBLADE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WARBLD 0 1 0 0 -1 5 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
237 Warmage 16790720 16827604 16827605 16827606 16827607 IR_HAVOCMAGE 6 CLS_ATK_3 CLS_FEAT_WRMAGE CLS_SAVTHR_WIZ CLS_SKILL_WRMAGE CLS_BFEAT_WRMAGE 2 CLS_SPGN_WRMAGE CLS_SPKN_WRMAGE 1 1 10 14 12 10 14 16 INT 0X00 0X0 0 CLASS_TYPE_WARMAGE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WRMAGE 0 1 0 0 -1 10 130 **** **** **** **** **** **** **** **** **** Warmage **** **** **** **** ****
|
237 Warmage 16790720 16827604 16827605 16827606 16827607 IR_HAVOCMAGE 6 CLS_ATK_3 CLS_FEAT_WRMAGE CLS_SAVTHR_WIZ CLS_SKILL_WRMAGE CLS_BFEAT_WRMAGE 2 CLS_SPGN_WRMAGE CLS_SPKN_WRMAGE 1 1 10 14 12 10 14 16 INT 0X00 0X0 0 CLASS_TYPE_WARMAGE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_WRMAGE 0 1 0 0 -1 10 130 **** **** **** **** **** **** **** **** **** Warmage **** **** **** **** ****
|
||||||
238 Knight 16790721 16827632 16827633 16827634 16827635 IR_PALADIN 12 CLS_ATK_1 CLS_FEAT_KNIGHT CLS_SAVTHR_WIZ CLS_SKILL_KNIGHT CLS_BFEAT_KNIGHT 2 **** **** 1 0 16 10 16 10 10 12 STR 0X05 0X1 0 CLASS_TYPE_KNIGHT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_KNIGHT 20 1 0 0 -1 6 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
238 Knight 16790721 16827632 16827633 16827634 16827635 IR_PALADIN 12 CLS_ATK_1 CLS_FEAT_KNIGHT CLS_SAVTHR_WIZ CLS_SKILL_KNIGHT CLS_BFEAT_KNIGHT 2 **** **** 1 0 16 10 16 10 10 12 STR 0X05 0X1 0 CLASS_TYPE_KNIGHT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_KNIGHT 20 1 0 0 -1 6 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
239 FistOfDalQuor 16790722 16827033 16827034 16827035 16827036 IR_SHOUDISC 10 CLS_ATK_2 CLS_FEAT_DALQUR CLS_SAVTHR_CLER CLS_SKILL_DALQUR CLS_BFEAT_DALQUR 2 **** **** 0 0 12 16 14 8 14 12 DEX 0X00 0X0 0 CLASS_TYPE_FIST_DAL_QUOR 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_DALQUR 5 0 0 0 5 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
239 FistOfDalQuor 16790722 16827033 16827034 16827035 16827036 IR_SHOUDISC 10 CLS_ATK_2 CLS_FEAT_DALQUR CLS_SAVTHR_CLER CLS_SKILL_DALQUR CLS_BFEAT_DALQUR 2 **** **** 0 0 12 16 14 8 14 12 DEX 0X00 0X0 0 CLASS_TYPE_FIST_DAL_QUOR 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CLS_PRES_DALQUR 5 0 0 0 5 4 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
|||||||
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
@@ -216,7 +216,7 @@
|
|||||||
212 ImprovedEvasion 1946 6032 ife_evade **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_IMPROVED_EVASION 6 **** **** **** **** **** 0 1
|
212 ImprovedEvasion 1946 6032 ife_evade **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_IMPROVED_EVASION 6 **** **** **** **** **** 0 1
|
||||||
213 KiStrike 1947 6033 ife_kistrike **** **** **** **** **** **** **** **** **** **** 0 0 0 **** 1 **** 343 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_KI_STRIKE 6 **** **** **** **** **** 0 1
|
213 KiStrike 1947 6033 ife_kistrike **** **** **** **** **** **** **** **** **** **** 0 0 0 **** 1 **** 343 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_KI_STRIKE 6 **** **** **** **** **** 0 1
|
||||||
214 DiamondBody 1948 6034 ife_dibod **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_DIAMOND_BODY 6 **** **** **** **** **** 0 1
|
214 DiamondBody 1948 6034 ife_dibod **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_DIAMOND_BODY 6 **** **** **** **** **** 0 1
|
||||||
215 DiamondSoul 1949 6035 ife_disoul **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_DIAMOND_SOUL 6 **** **** **** **** **** 0 1
|
215 DiamondSoul 1949 16793789 ife_disoul **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_DIAMOND_SOUL 6 **** **** **** **** **** 0 1
|
||||||
216 PerfectSelf 1950 6036 ife_perfself **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_PERFECT_SELF 6 **** **** **** **** **** 0 1
|
216 PerfectSelf 1950 6036 ife_perfself **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_PERFECT_SELF 6 **** **** **** **** **** 0 1
|
||||||
217 DivineGrace 1951 6037 ife_divgrace **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_DIVINE_GRACE 6 **** **** **** **** **** 0 1
|
217 DivineGrace 1951 6037 ife_divgrace **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_DIVINE_GRACE 6 **** **** **** **** **** 0 1
|
||||||
218 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 6 **** **** **** **** **** 0 1
|
218 **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 6 **** **** **** **** **** 0 1
|
||||||
@@ -424,8 +424,8 @@
|
|||||||
420 ArcaneDefenseIll 2820 2823 ife_X1ADIll **** **** **** **** **** **** **** **** 170 **** 0 0 1 **** **** **** **** 1 **** 7 **** **** **** **** **** **** **** **** **** **** FEAT_ARCANE_DEFENSE_ILLUSION 6 **** **** **** **** **** 0 1
|
420 ArcaneDefenseIll 2820 2823 ife_X1ADIll **** **** **** **** **** **** **** **** 170 **** 0 0 1 **** **** **** **** 1 **** 7 **** **** **** **** **** **** **** **** **** **** FEAT_ARCANE_DEFENSE_ILLUSION 6 **** **** **** **** **** 0 1
|
||||||
421 ArcaneDefenseNec 2821 2823 ife_X1ADNec **** **** **** **** **** **** **** **** 171 **** 0 0 1 **** **** **** **** 1 **** 7 **** **** **** **** **** **** **** **** **** **** FEAT_ARCANE_DEFENSE_NECROMANCY 6 **** **** **** **** **** 0 1
|
421 ArcaneDefenseNec 2821 2823 ife_X1ADNec **** **** **** **** **** **** **** **** 171 **** 0 0 1 **** **** **** **** 1 **** 7 **** **** **** **** **** **** **** **** **** **** FEAT_ARCANE_DEFENSE_NECROMANCY 6 **** **** **** **** **** 0 1
|
||||||
422 ArcaneDefenseTra 2822 2823 ife_X1ADTra **** **** **** **** **** **** **** **** 172 **** 0 0 1 **** **** **** **** 1 **** 7 **** **** **** **** **** **** **** **** **** **** FEAT_ARCANE_DEFENSE_TRANSMUTATION 6 **** **** **** **** **** 0 1
|
422 ArcaneDefenseTra 2822 2823 ife_X1ADTra **** **** **** **** **** **** **** **** 172 **** 0 0 1 **** **** **** **** 1 **** 7 **** **** **** **** **** **** **** **** **** **** FEAT_ARCANE_DEFENSE_TRANSMUTATION 6 **** **** **** **** **** 0 1
|
||||||
423 ExtraMusic 2824 2825 ife_X1ExMus **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** 11 **** **** **** FEAT_EXTRA_MUSIC 6 **** 1 1 **** **** 0 1
|
423 ExtraMusic 2824 2825 ife_X1ExMus **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** 11 **** **** **** FEAT_EXTRA_MUSIC 6 **** 1 **** **** **** 0 1
|
||||||
424 LingeringSong 2826 2827 ife_X1LingSong **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** 11 **** **** **** FEAT_LINGERING_SONG 6 **** 1 1 **** **** 0 1
|
424 LingeringSong 2826 2827 ife_X1LingSong **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** 11 **** **** **** FEAT_LINGERING_SONG 6 **** 1 **** **** **** 0 1
|
||||||
425 DirtyFighting 2803 2804 ife_X1DirFig 2 **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_DIRTY_FIGHTING 6 **** **** **** **** **** 0 1
|
425 DirtyFighting 2803 2804 ife_X1DirFig 2 **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_DIRTY_FIGHTING 6 **** **** **** **** **** 0 1
|
||||||
426 ResistDisease 2828 2829 ife_X1ResDis **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_RESIST_DISEASE 6 **** **** **** **** **** 0 1
|
426 ResistDisease 2828 2829 ife_X1ResDis **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_RESIST_DISEASE 6 **** **** **** **** **** 0 1
|
||||||
427 ResistEnergyCold 2830 2835 ife_X1ResCol **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** 8 **** **** **** **** **** **** **** **** **** **** FEAT_RESIST_ENERGY_COLD 6 **** **** **** **** 8 0 1
|
427 ResistEnergyCold 2830 2835 ife_X1ResCol **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** 8 **** **** **** **** **** **** **** **** **** **** FEAT_RESIST_ENERGY_COLD 6 **** **** **** **** 8 0 1
|
||||||
@@ -2352,7 +2352,7 @@
|
|||||||
2348 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
2348 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
||||||
2349 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
2349 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
||||||
2350 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
2350 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
||||||
2351 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
2351 FEAT_MONK_ABUNDANT_STEP 16793787 16793788 is_dimdoor **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 17986 **** 1 1 **** **** **** **** **** **** **** **** **** **** **** FEAT_MONK_ABUNDANT_STEP 5 0 **** **** **** **** 0 1
|
||||||
2352 FEAT_KIAI_SMITE_1 16826172 16826173 ife_x2kicrit **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 2772 **** **** 10 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
2352 FEAT_KIAI_SMITE_1 16826172 16826173 ife_x2kicrit **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 2772 **** **** 10 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
||||||
2353 PRC_ATTACK 16837825 16837826 ife_x2kicrit **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 18671 **** **** -1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
2353 PRC_ATTACK 16837825 16837826 ife_x2kicrit **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 18671 **** **** -1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
||||||
2354 FE_Oozes 16790075 6079 ife_racehate **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.5 **** 5 **** **** **** **** **** **** **** **** **** **** FEAT_FAVORED_ENEMY_OOZE 6 **** **** **** **** **** 0 1
|
2354 FE_Oozes 16790075 6079 ife_racehate **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.5 **** 5 **** **** **** **** **** **** **** **** **** **** FEAT_FAVORED_ENEMY_OOZE 6 **** **** **** **** **** 0 1
|
||||||
@@ -2463,7 +2463,7 @@
|
|||||||
2459 TactileTrapsmith 16824612 16824613 ife_lightflex **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
|
2459 TactileTrapsmith 16824612 16824613 ife_lightflex **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
|
||||||
2460 AugmentHealing 16824614 16824615 ife_X1ResDis **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** 4 4 **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
|
2460 AugmentHealing 16824614 16824615 ife_X1ResDis **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** 4 4 **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
|
||||||
2461 DetectEvil 16827574 16827575 is_detect_evil **** **** **** **** **** **** **** **** **** **** 0 0 0 15 5 3201 **** 0.5 -1 **** **** **** **** **** **** **** **** **** **** **** FEAT_DEATH_DOMAIN_POWER 6 **** **** **** **** **** 0 1
|
2461 DetectEvil 16827574 16827575 is_detect_evil **** **** **** **** **** **** **** **** **** **** 0 0 0 15 5 3201 **** 0.5 -1 **** **** **** **** **** **** **** **** **** **** **** FEAT_DEATH_DOMAIN_POWER 6 **** **** **** **** **** 0 1
|
||||||
2462 InscribeRune 16831916 16831917 ife_X2PlnrTurn **** **** **** 13 **** **** **** **** **** **** 0 0 1 **** **** 1621 **** 1 -1 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
2462 InscribeRune 16831916 16831917 ife_X2PlnrTurn **** **** **** 13 **** **** **** **** **** **** 0 0 1 **** **** 1621 **** 1 **** **** 1 **** **** **** **** **** 25 1 **** **** FEAT_INSCRIBE_RUNE 4 **** **** **** **** **** 0 0
|
||||||
2463 RuneCraft 16831973 16831974 ife_legendaryart **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
|
2463 RuneCraft 16831973 16831974 ife_legendaryart **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
|
||||||
2464 RunePower 16831975 16831976 Ife_epMagmaBurst **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
|
2464 RunePower 16831975 16831976 Ife_epMagmaBurst **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
|
||||||
2465 ImprovedRunecasting 16831977 16831978 ife_dweomerthief **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1624 **** 1 -1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 0
|
2465 ImprovedRunecasting 16831977 16831978 ife_dweomerthief **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1624 **** 1 -1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 0
|
||||||
@@ -2550,7 +2550,7 @@
|
|||||||
2546 FEAT_EPIC_SYMBIOSIS_3 16822293 16822256 ife_damred **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 2547 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_SMBIOIS_1 4 **** **** **** **** **** 0 1
|
2546 FEAT_EPIC_SYMBIOSIS_3 16822293 16822256 ife_damred **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 2547 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_SMBIOIS_1 4 **** **** **** **** **** 0 1
|
||||||
2547 FEAT_EPIC_SYMBIOSIS_4 16822294 16822256 ife_damred **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_SMBIOIS_1 4 **** **** **** **** **** 0 1
|
2547 FEAT_EPIC_SYMBIOSIS_4 16822294 16822256 ife_damred **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_SMBIOIS_1 4 **** **** **** **** **** 0 1
|
||||||
2548 SwiftAmbusher 16834560 16834561 ife_X2CritDLBow **** **** **** **** **** **** **** **** 345 3715 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
|
2548 SwiftAmbusher 16834560 16834561 ife_X2CritDLBow **** **** **** **** **** **** **** **** 345 3715 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
|
||||||
2549 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 1
|
2549 EPIC_FEAT_INSCRIBE_EPIC_RUNES 16989389 16989390 ife_X2PlnrTurn **** **** **** 19 **** **** **** **** 2462 **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** 25 24 **** **** EPIC_FEAT_INSCRIBE_EPIC_RUNES 4 **** **** **** **** **** 1 0
|
||||||
2550 FEAT_ES_TRANS_1 16822325 16822326 ife_rage **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 2551 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ES_TRANS_1 4 **** **** **** **** **** 0 1
|
2550 FEAT_ES_TRANS_1 16822325 16822326 ife_rage **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 2551 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ES_TRANS_1 4 **** **** **** **** **** 0 1
|
||||||
2551 FEAT_ES_TRANS_2 16822327 16822326 ife_rage **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 2552 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ES_TRANS_2 4 **** **** **** **** **** 0 1
|
2551 FEAT_ES_TRANS_2 16822327 16822326 ife_rage **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 2552 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ES_TRANS_2 4 **** **** **** **** **** 0 1
|
||||||
2552 FEAT_ES_TRANS_3 16822328 16822326 ife_rage **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ES_TRANS_3 4 **** **** **** **** **** 0 1
|
2552 FEAT_ES_TRANS_3 16822328 16822326 ife_rage **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ES_TRANS_3 4 **** **** **** **** **** 0 1
|
||||||
@@ -2811,8 +2811,8 @@
|
|||||||
2807 ImprovedTrip 16834580 16834581 ife_X1ImpExp **** **** **** 13 **** **** **** **** 389 **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
|
2807 ImprovedTrip 16834580 16834581 ife_X1ImpExp **** **** **** 13 **** **** **** **** 389 **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
|
||||||
2808 FEAT_ACROBATIC_CHARGE 16822731 16822735 ife_x2epicdodge **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1750 **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ACROBATIC_CHARGE 4 **** **** **** **** **** 0 1
|
2808 FEAT_ACROBATIC_CHARGE 16822731 16822735 ife_x2epicdodge **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1750 **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ACROBATIC_CHARGE 4 **** **** **** **** **** 0 1
|
||||||
2809 CurlingWaveStrike 16834582 16834583 ife_X2ImKiStrk5 **** **** 13 **** **** **** **** **** 2807 **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
|
2809 CurlingWaveStrike 16834582 16834583 ife_X2ImKiStrk5 **** **** 13 **** **** **** **** **** 2807 **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
|
||||||
2810 Bullrush 16834586 16834587 ife_X1Bull **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3476 **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
2810 Bullrush 16834586 16834587 ife_X1Bull **** **** **** **** **** **** **** **** **** **** 0 0 0 22 1 3476 **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
||||||
2811 Overrun 16834588 16834589 ife_X1DivMig **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3477 **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
2811 Overrun 16834588 16834589 ife_X1DivMig **** **** **** **** **** **** **** **** **** **** 0 0 0 22 1 3477 **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
||||||
2812 FEAT_ELABORATE_PARRY 16822736 16822737 ife_impparry **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ELABORATE_PARRY 4 **** **** **** **** **** 0 1
|
2812 FEAT_ELABORATE_PARRY 16822736 16822737 ife_impparry **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ELABORATE_PARRY 4 **** **** **** **** **** 0 1
|
||||||
2813 FEAT_EPIC_DUELIST 16822738 16822739 ife_epduel **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_DUELIST 4 **** **** **** **** **** 0 1
|
2813 FEAT_EPIC_DUELIST 16822738 16822739 ife_epduel **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_DUELIST 4 **** **** **** **** **** 0 1
|
||||||
2814 FEAT_BLAST_INFIDEL 16822748 16822749 ife_x2grsmt1 **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_BLAST_INFIDEL 4 **** **** **** **** **** 0 1
|
2814 FEAT_BLAST_INFIDEL 16822748 16822749 ife_x2grsmt1 **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_BLAST_INFIDEL 4 **** **** **** **** **** 0 1
|
||||||
@@ -2823,8 +2823,8 @@
|
|||||||
2819 FEAT_SPELLPOWER_6 16822756 16822759 ife_X1GFSPen **** **** **** **** **** **** **** **** 2818 **** 0 0 0 **** **** **** 2820 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SPELL_POWER_6 4 **** **** **** **** **** 0 1
|
2819 FEAT_SPELLPOWER_6 16822756 16822759 ife_X1GFSPen **** **** **** **** **** **** **** **** 2818 **** 0 0 0 **** **** **** 2820 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SPELL_POWER_6 4 **** **** **** **** **** 0 1
|
||||||
2820 FEAT_SPELLPOWER_8 16822757 16822759 ife_X1GFSPen **** **** **** **** **** **** **** **** 2819 **** 0 0 0 **** **** **** 2821 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SPELL_POWER_8 4 **** **** **** **** **** 0 1
|
2820 FEAT_SPELLPOWER_8 16822757 16822759 ife_X1GFSPen **** **** **** **** **** **** **** **** 2819 **** 0 0 0 **** **** **** 2821 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SPELL_POWER_8 4 **** **** **** **** **** 0 1
|
||||||
2821 FEAT_SPELLPOWER_10 16822758 16822759 ife_X1GFSPen **** **** **** **** **** **** **** **** 2820 **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SPELL_POWER_10 4 **** **** **** **** **** 0 1
|
2821 FEAT_SPELLPOWER_10 16822758 16822759 ife_X1GFSPen **** **** **** **** **** **** **** **** 2820 **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SPELL_POWER_10 4 **** **** **** **** **** 0 1
|
||||||
2822 Trip 16834590 16834591 ife_X1ImpExp **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3478 **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
2822 Trip 16834590 16834591 ife_X1ImpExp **** **** **** **** **** **** **** **** **** **** 0 0 0 22 1 3478 **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
||||||
2823 Charge 16834592 16834593 ife_X2ImKiStrk5 **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3479 **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
2823 Charge 16834592 16834593 ife_X2ImKiStrk5 **** **** **** **** **** **** **** **** **** **** 0 0 0 22 1 3479 **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
||||||
2824 UnsettlingEnchantment 16827143 16827144 ife_X2EpicRepu **** **** **** **** **** **** **** **** 168 **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
|
2824 UnsettlingEnchantment 16827143 16827144 ife_X2EpicRepu **** **** **** **** **** **** **** **** 168 **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
|
||||||
2825 SLA_I 16822760 16822761 ife_heiro_sla1 **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2036 **** 1 5 **** **** **** **** **** **** **** **** **** **** **** FEAT_SLA_I 4 **** **** **** **** **** 0 0
|
2825 SLA_I 16822760 16822761 ife_heiro_sla1 **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2036 **** 1 5 **** **** **** **** **** **** **** **** **** **** **** FEAT_SLA_I 4 **** **** **** **** **** 0 0
|
||||||
2826 SLA_II 16822760 16822761 ife_heiro_sla2 **** **** **** **** **** **** **** **** 2825 **** 0 0 0 **** **** 2037 **** 1 5 **** **** **** **** **** **** **** **** **** **** **** FEAT_SLA_II 4 **** **** **** **** **** 0 0
|
2826 SLA_II 16822760 16822761 ife_heiro_sla2 **** **** **** **** **** **** **** **** 2825 **** 0 0 0 **** **** 2037 **** 1 5 **** **** **** **** **** **** **** **** **** **** **** FEAT_SLA_II 4 **** **** **** **** **** 0 0
|
||||||
@@ -2919,7 +2919,7 @@
|
|||||||
2915 FEAT_PRESTIGE_SHIFTER_QUICKSLOTS1 16824336 16824348 ife_X2WShpDrag **** **** **** **** **** **** **** **** **** **** 0 0 0 10 1 1919 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_PRESTIGE_SHIFTER_QUICKSLOTS1 5 **** **** **** **** **** 0 1
|
2915 FEAT_PRESTIGE_SHIFTER_QUICKSLOTS1 16824336 16824348 ife_X2WShpDrag **** **** **** **** **** **** **** **** **** **** 0 0 0 10 1 1919 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_PRESTIGE_SHIFTER_QUICKSLOTS1 5 **** **** **** **** **** 0 1
|
||||||
2916 FEAT_PRESTIGE_SHIFTER_QUICKSLOTS2 16824337 16824348 ife_X2WShpDrag **** **** **** **** **** **** **** **** **** **** 0 0 0 10 1 1920 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_PRESTIGE_SHIFTER_QUICKSLOTS2 5 **** **** **** **** **** 0 1
|
2916 FEAT_PRESTIGE_SHIFTER_QUICKSLOTS2 16824337 16824348 ife_X2WShpDrag **** **** **** **** **** **** **** **** **** **** 0 0 0 10 1 1920 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_PRESTIGE_SHIFTER_QUICKSLOTS2 5 **** **** **** **** **** 0 1
|
||||||
2917 FEAT_PRESTIGE_SHIFTER_NATURALSPELL 16824368 16824369 ife_X2GWShp3 **** **** **** **** 13 **** **** **** **** **** 0 0 1 10 1 **** **** 1 **** **** **** 305 2900 **** **** **** **** **** **** **** FEAT_PRESTIGE_SHIFTER_NATURALSPELL 5 **** **** **** **** **** 0 1
|
2917 FEAT_PRESTIGE_SHIFTER_NATURALSPELL 16824368 16824369 ife_X2GWShp3 **** **** **** **** 13 **** **** **** **** **** 0 0 1 10 1 **** **** 1 **** **** **** 305 2900 **** **** **** **** **** **** **** FEAT_PRESTIGE_SHIFTER_NATURALSPELL 5 **** **** **** **** **** 0 1
|
||||||
2918 Shifter_Black_List 16824371 16824372 ife_darkvis **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** Shifter_Black_List 6 **** **** **** **** **** 0 1
|
2918 FEAT_ARCHETYPAL_FORM 16824371 16824372 ife_darkvis **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ARCHETYPAL_FORM 6 **** **** **** **** **** 0 1
|
||||||
2919 ExamineRecipe 16824431 16824432 is_divine **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2250 **** 0 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_EXAMINE_RECIPE 4 **** **** **** **** **** 0 0
|
2919 ExamineRecipe 16824431 16824432 is_divine **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2250 **** 0 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_EXAMINE_RECIPE 4 **** **** **** **** **** 0 0
|
||||||
2920 CraftConstruct 16823154 16823155 ife_craftconstr **** **** **** **** **** **** **** 99 2925 2926 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_CRAFT_CONSTRUCT 4 **** **** **** **** **** 0 1
|
2920 CraftConstruct 16823154 16823155 ife_craftconstr **** **** **** **** **** **** **** 99 2925 2926 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_CRAFT_CONSTRUCT 4 **** **** **** **** **** 0 1
|
||||||
2921 FEAT_PRESTIGE_LICH_TOUCH 16823130 16823131 ife_X2DthMstTch **** **** **** **** **** **** **** **** **** **** 0 0 0 3 **** 1904 **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_PRESTIGE_LICH_TOUCH 5 **** **** **** **** **** 0 1
|
2921 FEAT_PRESTIGE_LICH_TOUCH 16823130 16823131 ife_X2DthMstTch **** **** **** **** **** **** **** **** **** **** 0 0 0 3 **** 1904 **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_PRESTIGE_LICH_TOUCH 5 **** **** **** **** **** 0 1
|
||||||
@@ -3036,26 +3036,26 @@
|
|||||||
3032 FEAT_OOZY_GLOB5 16825060 16825061 ife_x1precise **** **** **** **** **** **** **** **** **** **** 0 0 0 2 **** 2018 **** 1 25 **** 0 **** **** **** **** **** **** **** **** **** FEAT_OOZY_GLOB5 6 1 **** **** **** **** 0 1
|
3032 FEAT_OOZY_GLOB5 16825060 16825061 ife_x1precise **** **** **** **** **** **** **** **** **** **** 0 0 0 2 **** 2018 **** 1 25 **** 0 **** **** **** **** **** **** **** **** **** FEAT_OOZY_GLOB5 6 1 **** **** **** **** 0 1
|
||||||
3033 IndiscernibleAnatomy 16825066 16825067 ife_x1sevade **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_INDISCERNIBLE_ANATOMY 6 **** **** **** **** **** 0 1
|
3033 IndiscernibleAnatomy 16825066 16825067 ife_x1sevade **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_INDISCERNIBLE_ANATOMY 6 **** **** **** **** **** 0 1
|
||||||
3034 CharismaPenality 16825068 16825069 ife_x1spdrkbls **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_CHARISMA_PENALITY 6 **** **** **** **** **** 0 1
|
3034 CharismaPenality 16825068 16825069 ife_x1spdrkbls **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_CHARISMA_PENALITY 6 **** **** **** **** **** 0 1
|
||||||
3035 OneWithTheOoze 16825070 16825071 ife_x1sshad **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ONE_WITH_THE_OOZE 6 **** **** **** **** **** **** 1
|
3035 OneWithTheOoze 16825070 16825071 ife_x1sshad **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ONE_WITH_THE_OOZE 6 **** **** **** **** **** 0 1
|
||||||
3036 FEAT_SLIME_WAVE 16825072 16825073 is_burnhands **** **** **** **** **** **** **** **** **** **** 0 0 0 2 **** 2023 **** 1 10 **** 0 **** **** **** **** **** **** **** **** **** FEAT_SLIME_WAVE 6 0 **** **** **** **** 0 1
|
3036 FEAT_SLIME_WAVE 16825072 16825073 is_burnhands **** **** **** **** **** **** **** **** **** **** 0 0 0 2 **** 2023 **** 1 10 **** 0 **** **** **** **** **** **** **** **** **** FEAT_SLIME_WAVE 6 0 **** **** **** **** 0 1
|
||||||
3037 FEAT_SKILL_FOCUS_RIDE 16789534 424 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** FEAT_SKILL_FOCUS_RIDE **** **** **** **** **** **** **** 1
|
3037 FEAT_SKILL_FOCUS_RIDE 16789534 424 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** FEAT_SKILL_FOCUS_RIDE 6 **** **** **** **** **** 0 1
|
||||||
3038 FEAT_EPIC_SKILL_FOCUS_RIDE 16789535 4063 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 15 **** **** **** **** **** **** 27 20 **** **** FEAT_EPIC_SKILL_FOCUS_RIDE **** **** 20 **** **** **** **** 1
|
3038 FEAT_EPIC_SKILL_FOCUS_RIDE 16789535 4063 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 15 **** **** **** **** **** **** 27 20 **** **** FEAT_EPIC_SKILL_FOCUS_RIDE 6 **** 20 **** **** **** 1 1
|
||||||
3039 FEAT_SKILL_FOCUS_JUMP 16789536 424 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** FEAT_SKILL_FOCUS_JUMP **** **** **** **** **** **** **** 1
|
3039 FEAT_SKILL_FOCUS_JUMP 16789536 424 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** FEAT_SKILL_FOCUS_JUMP 6 **** **** **** **** **** 0 1
|
||||||
3040 FEAT_EPIC_SKILL_FOCUS_JUMP 16789565 4063 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 15 **** **** **** **** **** **** 28 20 **** **** FEAT_EPIC_SKILL_FOCUS_JUMP **** **** 20 **** **** **** **** 1
|
3040 FEAT_EPIC_SKILL_FOCUS_JUMP 16789565 4063 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 15 **** **** **** **** **** **** 28 20 **** **** FEAT_EPIC_SKILL_FOCUS_JUMP 6 **** 20 **** **** **** 1 1
|
||||||
3041 FEAT_SKILL_FOCUS_SENSE_MOTIVE 16789590 424 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** FEAT_SKILL_FOCUS_SENSE_MOTIVE **** **** **** **** **** **** **** 1
|
3041 FEAT_SKILL_FOCUS_SENSE_MOTIVE 16789590 424 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** FEAT_SKILL_FOCUS_SENSE_MOTIVE 6 **** **** **** **** **** 0 1
|
||||||
3042 FEAT_EPIC_SKILL_FOCUS_SENSE_MOTIVE 16789591 4063 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 15 **** **** **** **** **** **** 30 20 **** **** FEAT_EPIC_SKILL_FOCUS_SENSE_MOTIVE **** **** 20 **** **** **** **** 1
|
3042 FEAT_EPIC_SKILL_FOCUS_SENSE_MOTIVE 16789591 4063 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 15 **** **** **** **** **** **** 30 20 **** **** FEAT_EPIC_SKILL_FOCUS_SENSE_MOTIVE 6 **** 20 **** **** **** 1 1
|
||||||
3043 FEAT_SKILL_FOCUS_MARTIAL_LORE 16789592 424 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** FEAT_SKILL_FOCUS_MARTIAL_LORE **** **** **** **** **** **** **** 1
|
3043 FEAT_SKILL_FOCUS_MARTIAL_LORE 16789592 424 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** FEAT_SKILL_FOCUS_MARTIAL_LORE 6 **** **** **** **** **** 0 1
|
||||||
3044 FEAT_EPIC_SKILL_FOCUS_MARTIAL_LORE 16789593 4063 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 15 **** **** **** **** **** **** 31 20 **** **** FEAT_EPIC_SKILL_FOCUS_MARTIAL_LORE **** **** 20 **** **** **** **** 1
|
3044 FEAT_EPIC_SKILL_FOCUS_MARTIAL_LORE 16789593 4063 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 15 **** **** **** **** **** **** 31 20 **** **** FEAT_EPIC_SKILL_FOCUS_MARTIAL_LORE 6 **** 20 **** **** **** 1 1
|
||||||
3045 FEAT_SKILL_FOCUS_BALANCE 16834263 424 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** FEAT_SKILL_FOCUS_BALANCE **** **** **** **** **** **** **** 1
|
3045 FEAT_SKILL_FOCUS_BALANCE 16834263 424 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** FEAT_SKILL_FOCUS_BALANCE 6 **** **** **** **** **** 0 1
|
||||||
3046 FEAT_EPIC_SKILL_FOCUS_BALANCE 16834264 4063 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 15 **** **** **** **** **** **** 32 20 **** **** FEAT_EPIC_SKILL_FOCUS_BALANCE **** **** 20 **** **** **** **** 1
|
3046 FEAT_EPIC_SKILL_FOCUS_BALANCE 16834264 4063 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 15 **** **** **** **** **** **** 32 20 **** **** FEAT_EPIC_SKILL_FOCUS_BALANCE 6 **** 20 **** **** **** 1 1
|
||||||
3047 FEAT_SKILL_FOCUS_CRAFT_POISON 16834265 424 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** FEAT_SKILL_FOCUS_CRAFT_POISON **** **** **** **** **** **** **** 1
|
3047 FEAT_SKILL_FOCUS_CRAFT_POISON 16834265 424 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** FEAT_SKILL_FOCUS_CRAFT_POISON 6 **** **** **** **** **** 0 1
|
||||||
3048 FEAT_EPIC_SKILL_FOCUS_CRAFT_POISON 16834266 4063 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 15 **** **** **** **** **** **** 35 20 **** **** FEAT_EPIC_SKILL_FOCUS_CRAFT_POISON **** **** 20 **** **** **** **** 1
|
3048 FEAT_EPIC_SKILL_FOCUS_CRAFT_POISON 16834266 4063 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 15 **** **** **** **** **** **** 35 20 **** **** FEAT_EPIC_SKILL_FOCUS_CRAFT_POISON 6 **** 20 **** **** **** 1 1
|
||||||
3049 FEAT_SKILL_FOCUS_PSICRAFT 16834267 424 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** FEAT_SKILL_FOCUS_PSICRAFT **** **** **** **** **** **** **** 1
|
3049 FEAT_SKILL_FOCUS_PSICRAFT 16834267 424 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** FEAT_SKILL_FOCUS_PSICRAFT 6 **** **** **** **** **** 0 1
|
||||||
3050 FEAT_EPIC_SKILL_FOCUS_PSICRAFT 16834268 4063 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 15 **** **** **** **** **** **** 36 20 **** **** FEAT_EPIC_SKILL_FOCUS_PSICRAFT **** **** 20 **** **** **** **** 1
|
3050 FEAT_EPIC_SKILL_FOCUS_PSICRAFT 16834268 4063 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 15 **** **** **** **** **** **** 36 20 **** **** FEAT_EPIC_SKILL_FOCUS_PSICRAFT 6 **** 20 **** **** **** 1 1
|
||||||
3051 FEAT_SKILL_FOCUS_CLIMB 16834269 424 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** FEAT_SKILL_FOCUS_CLIMB **** **** **** **** **** **** **** 1
|
3051 FEAT_SKILL_FOCUS_CLIMB 16834269 424 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** FEAT_SKILL_FOCUS_CLIMB 6 **** **** **** **** **** 0 1
|
||||||
3052 FEAT_EPIC_SKILL_FOCUS_CLIMB 16834270 4063 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 15 **** **** **** **** **** **** 37 20 **** **** FEAT_EPIC_SKILL_FOCUS_CLIMB **** **** 20 **** **** **** **** 1
|
3052 FEAT_EPIC_SKILL_FOCUS_CLIMB 16834270 4063 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 15 **** **** **** **** **** **** 37 20 **** **** FEAT_EPIC_SKILL_FOCUS_CLIMB 6 **** 20 **** **** **** 1 1
|
||||||
3053 FEAT_SKILL_FOCUS_CRAFT_GENERAL 16834271 424 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** FEAT_SKILL_FOCUS_CRAFT_GENERAL **** **** **** **** **** **** **** 1
|
3053 FEAT_SKILL_FOCUS_CRAFT_GENERAL 16834271 424 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** FEAT_SKILL_FOCUS_CRAFT_GENERAL 6 **** **** **** **** **** 0 1
|
||||||
3054 FEAT_EPIC_SKILL_FOCUS_CRAFT_GENERAL 16834272 4063 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 15 **** **** **** **** **** **** 38 20 **** **** FEAT_EPIC_SKILL_FOCUS_CRAFT_GENERAL **** **** 20 **** **** **** **** 1
|
3054 FEAT_EPIC_SKILL_FOCUS_CRAFT_GENERAL 16834272 4063 if_epic_iaijutsu **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 15 **** **** **** **** **** **** 38 20 **** **** FEAT_EPIC_SKILL_FOCUS_CRAFT_GENERAL 6 **** 20 **** **** **** 1 1
|
||||||
3055 FEAT_IMPROVED_TURNING 16790055 16790056 ife_xturn **** **** **** **** **** **** **** **** 294 **** 0 0 1 22 1 **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_IMPROVED_TURNING 6 0 **** **** **** **** 0 1
|
3055 FEAT_IMPROVED_TURNING 16790055 16790056 ife_xturn **** **** **** **** **** **** **** **** 294 **** 0 0 1 22 1 **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_IMPROVED_TURNING 6 0 **** **** **** **** 0 1
|
||||||
3056 Hosp_XX 16823403 16823379 ic_hospitaler **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 3057 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_HOSP_XX 4 0 **** **** **** **** **** 1
|
3056 Hosp_XX 16823403 16823379 ic_hospitaler **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 3057 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_HOSP_XX 4 0 **** **** **** **** **** 1
|
||||||
3057 Hosp_XXI 16823404 16823379 ic_hospitaler **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 3058 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_HOSP_XXI 4 0 **** **** **** **** **** 1
|
3057 Hosp_XXI 16823404 16823379 ic_hospitaler **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 3058 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_HOSP_XXI 4 0 **** **** **** **** **** 1
|
||||||
@@ -3163,13 +3163,13 @@
|
|||||||
3159 FEAT_VERMINMASTERY 16825898 16825899 ife_animal **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.5 **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_VERMINMASTERY 6 **** **** **** **** **** 0 1
|
3159 FEAT_VERMINMASTERY 16825898 16825899 ife_animal **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.5 **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_VERMINMASTERY 6 **** **** **** **** **** 0 1
|
||||||
3160 FEAT_MAGICALBEASTMASTERY 16825896 16825897 ife_animal **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.5 **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_MAGICALBEASTMASTERY 6 **** **** **** **** **** 0 1
|
3160 FEAT_MAGICALBEASTMASTERY 16825896 16825897 ife_animal **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.5 **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_MAGICALBEASTMASTERY 6 **** **** **** **** **** 0 1
|
||||||
3161 Familiar 16825363 16825364 ife_familiar **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2189 **** 0.5 1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_SUMMON_FAMILIAR 6 **** **** **** **** **** 0 1
|
3161 Familiar 16825363 16825364 ife_familiar **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2189 **** 0.5 1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_SUMMON_FAMILIAR 6 **** **** **** **** **** 0 1
|
||||||
3162 FEAT_RAVAGEGOLDENICE 16825902 16825903 ife_MagWeap **** **** **** **** **** 13 **** **** **** **** 0 0 0 **** **** 2190 **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_RAVAGEGOLDENICE 6 **** **** **** **** **** 0 1
|
3162 FEAT_RAVAGEGOLDENICE 16825902 16825903 ife_MagWeap **** **** **** **** **** 13 **** **** **** **** 0 0 1 **** **** 2190 **** 0.5 **** 97 **** **** **** **** **** **** **** **** **** **** FEAT_RAVAGEGOLDENICE 6 **** **** **** **** **** 0 1
|
||||||
3163 FEAT_STIGMATA 16825908 16825909 ife_layon **** **** **** **** **** **** **** **** 3165 **** 0 0 0 **** **** 2191 **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_STIGMATA 6 **** **** **** **** **** 0 0
|
3163 FEAT_STIGMATA 16825908 16825909 ife_layon **** **** **** **** **** **** **** **** 3165 **** 0 0 1 **** **** 2191 **** 0.5 **** 97 **** **** **** **** **** **** **** **** **** **** FEAT_STIGMATA 6 **** **** **** **** **** 0 0
|
||||||
3164 FEAT_HOLYRADIANCE 16825910 16825911 ife_holyrad **** **** **** **** **** **** 15 **** 3165 **** 0 0 1 **** **** 2196 **** 0.5 **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HOLYRADIANCE 2 **** **** **** **** **** 0 1
|
3164 FEAT_HOLYRADIANCE 16825910 16825911 ife_holyrad **** **** **** **** **** **** 15 **** 3165 **** 0 0 1 **** **** 2196 **** 0.5 **** 97 1 **** **** **** **** **** **** **** **** **** FEAT_HOLYRADIANCE 2 **** **** **** **** **** 0 1
|
||||||
3165 FEAT_NIMBUSLIGHT 16825912 16825913 ife_nimlight **** **** **** **** **** **** **** **** **** **** 0 1 1 **** **** 2032 **** 0.5 **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_NIMBUSLIGHT 2 **** **** **** **** **** 0 1
|
3165 FEAT_NIMBUSLIGHT 16825912 16825913 ife_nimlight **** **** **** **** **** **** **** **** **** **** 0 1 1 **** **** 2032 **** 0.5 **** 97 1 **** **** **** **** **** **** **** **** **** FEAT_NIMBUSLIGHT 2 **** **** **** **** **** 0 1
|
||||||
3166 FEAT_INTUITIVE_ATTACK 16825914 16825915 ife_weppro_sim 1 **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_INTUITIVE_ATTACK 5 **** **** **** **** **** 0 1
|
3166 FEAT_INTUITIVE_ATTACK 16825914 16825915 ife_weppro_sim 1 **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 0.5 **** 97 **** **** **** **** **** **** **** **** **** **** FEAT_INTUITIVE_ATTACK 5 **** **** **** **** **** 0 1
|
||||||
3167 FEAT_HAND_HEALER 16825916 16825917 ife_handheal **** **** **** **** **** **** 13 **** 299 **** 0 1 0 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_HAND_HEALER 5 **** **** **** **** **** 0 1
|
3167 FEAT_HAND_HEALER 16825916 16825917 ife_handheal **** **** **** **** **** **** 13 **** 299 **** 0 1 1 **** **** **** **** 0.5 **** 97 **** **** **** **** **** **** **** **** **** **** FEAT_HAND_HEALER 5 **** **** **** **** **** 0 1
|
||||||
3168 FEAT_EXALTED_TURNING 16825918 16825919 ife_exaturn **** **** **** **** **** **** **** **** 294 **** 0 0 1 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_EXALTED_TURNING 1 **** **** **** **** **** 0 1
|
3168 FEAT_EXALTED_TURNING 16825918 16825919 ife_exaturn **** **** **** **** **** **** **** **** 294 **** 0 0 1 **** **** **** **** 0.5 **** 97 **** **** **** **** **** **** **** **** **** **** FEAT_EXALTED_TURNING 1 **** **** **** **** **** 0 1
|
||||||
3169 FEAT_SANCTIFY_MARTIAL_SICKLE 16825920 16823245 ife_X2WSDWAx **** **** **** **** **** **** 15 **** 98 **** 0 0 1 **** **** **** **** 0.5 **** 93 **** **** **** **** **** **** **** **** **** **** FEAT_SANCTIFY_MARTIAL_SICKLE 1 **** **** **** **** **** 0 1
|
3169 FEAT_SANCTIFY_MARTIAL_SICKLE 16825920 16823245 ife_X2WSDWAx **** **** **** **** **** **** 15 **** 98 **** 0 0 1 **** **** **** **** 0.5 **** 93 **** **** **** **** **** **** **** **** **** **** FEAT_SANCTIFY_MARTIAL_SICKLE 1 **** **** **** **** **** 0 1
|
||||||
3170 FEAT_SANCTIFY_MARTIAL_DWARVENAXE 16825921 16823245 ife_X2WSDagg **** **** **** **** **** **** 15 **** 952 **** 0 0 1 **** **** **** **** 0.5 **** 93 **** **** **** **** **** **** **** **** **** **** FEAT_SANCTIFY_MARTIAL_DWARVENAXE 1 **** **** **** **** **** 0 1
|
3170 FEAT_SANCTIFY_MARTIAL_DWARVENAXE 16825921 16823245 ife_X2WSDagg **** **** **** **** **** **** 15 **** 952 **** 0 0 1 **** **** **** **** 0.5 **** 93 **** **** **** **** **** **** **** **** **** **** FEAT_SANCTIFY_MARTIAL_DWARVENAXE 1 **** **** **** **** **** 0 1
|
||||||
3171 FEAT_WEAPON_TEMPUS_SICKLE 16825923 16822945 ife_X2WpCh **** **** **** **** **** **** **** **** 98 **** 0 0 0 **** **** **** **** 0.5 **** 94 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_TEMPUS_SICKLE 1 **** **** **** **** **** 0 1
|
3171 FEAT_WEAPON_TEMPUS_SICKLE 16825923 16822945 ife_X2WpCh **** **** **** **** **** **** **** **** 98 **** 0 0 0 **** **** **** **** 0.5 **** 94 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_TEMPUS_SICKLE 1 **** **** **** **** **** 0 1
|
||||||
@@ -3268,7 +3268,7 @@
|
|||||||
3264 SpellFocusEvil 16835611 16835614 ife_foc_spel **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** 3 **** **** **** **** **** **** **** **** **** **** FEAT_SPELL_FOCUS_EVIL 4 **** **** **** **** **** 0 1
|
3264 SpellFocusEvil 16835611 16835614 ife_foc_spel **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** 3 **** **** **** **** **** **** **** **** **** **** FEAT_SPELL_FOCUS_EVIL 4 **** **** **** **** **** 0 1
|
||||||
3265 SpellFocusGood 16835612 16835614 ife_foc_spel **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** 3 **** **** **** **** **** **** **** **** **** **** FEAT_SPELL_FOCUS_GOOD 4 **** **** **** **** **** 0 1
|
3265 SpellFocusGood 16835612 16835614 ife_foc_spel **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** 3 **** **** **** **** **** **** **** **** **** **** FEAT_SPELL_FOCUS_GOOD 4 **** **** **** **** **** 0 1
|
||||||
3266 SpellFocusLawful 16835613 16835614 ife_foc_spel **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** 3 **** **** **** **** **** **** **** **** **** **** FEAT_SPELL_FOCUS_LAWFUL 4 **** **** **** **** **** 0 1
|
3266 SpellFocusLawful 16835613 16835614 ife_foc_spel **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** 3 **** **** **** **** **** **** **** **** **** **** FEAT_SPELL_FOCUS_LAWFUL 4 **** **** **** **** **** 0 1
|
||||||
3267 FEAT_STEADFAST_DETERMINATION 16789862 16789863 ife_ironwil **** **** **** **** **** **** **** **** 2568 **** **** **** 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_STEADFAST_DETERMINATION 5 **** **** **** **** **** 0 1
|
3267 FEAT_STEADFAST_DETERMINATION 16789862 16789863 ife_ironwil **** **** **** **** **** **** **** **** 2568 **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_STEADFAST_DETERMINATION 5 **** **** **** **** **** 0 1
|
||||||
3268 FEAT_WEAPON_TEMPUS_CLUB 16822946 16822945 ife_X2WpCh **** **** **** **** **** **** **** **** 43 **** 0 0 0 **** **** **** **** 0.5 **** 94 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_TEMPUS_CLUB 1 **** **** **** **** **** 0 1
|
3268 FEAT_WEAPON_TEMPUS_CLUB 16822946 16822945 ife_X2WpCh **** **** **** **** **** **** **** **** 43 **** 0 0 0 **** **** **** **** 0.5 **** 94 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_TEMPUS_CLUB 1 **** **** **** **** **** 0 1
|
||||||
3269 FEAT_WEAPON_TEMPUS_DAGGER 16822947 16822945 ife_X2WpCh **** **** **** **** **** **** **** **** 90 **** 0 0 0 **** **** **** **** 0.5 **** 94 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_TEMPUS_DAGGER 1 **** **** **** **** **** 0 1
|
3269 FEAT_WEAPON_TEMPUS_DAGGER 16822947 16822945 ife_X2WpCh **** **** **** **** **** **** **** **** 90 **** 0 0 0 **** **** **** **** 0.5 **** 94 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_TEMPUS_DAGGER 1 **** **** **** **** **** 0 1
|
||||||
3270 FEAT_WEAPON_TEMPUS_LIGHTMACE 16822948 16822945 ife_X2WpCh **** **** **** **** **** **** **** **** 94 **** 0 0 0 **** **** **** **** 0.5 **** 94 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_TEMPUS_LIGHTMACE 1 **** **** **** **** **** 0 1
|
3270 FEAT_WEAPON_TEMPUS_LIGHTMACE 16822948 16822945 ife_X2WpCh **** **** **** **** **** **** **** **** 94 **** 0 0 0 **** **** **** **** 0.5 **** 94 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_TEMPUS_LIGHTMACE 1 **** **** **** **** **** 0 1
|
||||||
@@ -3356,7 +3356,7 @@
|
|||||||
3352 FEAT_KillingShot 16826000 16826001 ife_wepspec_Lbw 19 **** **** **** **** **** **** **** 3353 **** 0 0 1 **** **** 2207 **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_KillingShot 6 0 **** **** **** **** 0 1
|
3352 FEAT_KillingShot 16826000 16826001 ife_wepspec_Lbw 19 **** **** **** **** **** **** **** 3353 **** 0 0 1 **** **** 2207 **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_KillingShot 6 0 **** **** **** **** 0 1
|
||||||
3353 FEAT_PerfectShot 16825998 16825999 ife_wepspec_Lbw 6 **** **** **** **** **** **** **** 3351 **** 0 0 1 **** **** 2207 **** 0.5 **** **** **** 92 93 101 102 99 **** **** **** **** FEAT_PerfectShot 6 0 **** **** **** **** 0 1
|
3353 FEAT_PerfectShot 16825998 16825999 ife_wepspec_Lbw 6 **** **** **** **** **** **** **** 3351 **** 0 0 1 **** **** 2207 **** 0.5 **** **** **** 92 93 101 102 99 **** **** **** **** FEAT_PerfectShot 6 0 **** **** **** **** 0 1
|
||||||
3354 FEAT_PerfectShot2 16825940 16825941 ife_wepspec_Lbw 6 **** **** **** **** **** **** **** 3353 **** 0 0 1 **** **** 2207 **** 0.5 **** **** **** 92 93 101 102 99 **** **** **** **** FEAT_PerfectShot2 6 0 **** **** **** **** 0 1
|
3354 FEAT_PerfectShot2 16825940 16825941 ife_wepspec_Lbw 6 **** **** **** **** **** **** **** 3353 **** 0 0 1 **** **** 2207 **** 0.5 **** **** **** 92 93 101 102 99 **** **** **** **** FEAT_PerfectShot2 6 0 **** **** **** **** 0 1
|
||||||
3355 FEAT_SERVHEAVEN 16823344 16823345 ife_servheaven **** **** **** **** **** **** **** **** **** **** 0 1 1 **** **** 2033 **** **** 1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_SERVHEAVEN 2 **** **** **** **** **** 0 1
|
3355 FEAT_SERVHEAVEN 16823344 16823345 ife_servheaven **** **** **** **** **** **** **** **** **** **** 0 1 1 **** **** 2033 **** **** 1 97 1 **** **** **** **** **** **** **** **** **** FEAT_SERVHEAVEN 2 **** **** **** **** **** 0 1
|
||||||
3356 FEAT_RANGED_SMITE 16823346 16823347 ife_rangedsmite **** **** **** **** **** **** **** **** **** **** 0 1 0 **** **** 2034 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** FEAT_RANGED_SMITE 5 1 **** **** **** **** 0 1
|
3356 FEAT_RANGED_SMITE 16823346 16823347 ife_rangedsmite **** **** **** **** **** **** **** **** **** **** 0 1 0 **** **** 2034 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** FEAT_RANGED_SMITE 5 1 **** **** **** **** 0 1
|
||||||
3357 FEAT_VILE_MARTIAL_CLUB 16825481 16825480 ife_X2WSClub **** **** **** **** **** **** 15 **** 43 **** 0 0 1 **** **** **** **** 0.5 **** 89 **** **** **** **** **** **** **** **** **** **** FEAT_VILE_MARTIAL_CLUB 1 **** **** **** **** **** 0 1
|
3357 FEAT_VILE_MARTIAL_CLUB 16825481 16825480 ife_X2WSClub **** **** **** **** **** **** 15 **** 43 **** 0 0 1 **** **** **** **** 0.5 **** 89 **** **** **** **** **** **** **** **** **** **** FEAT_VILE_MARTIAL_CLUB 1 **** **** **** **** **** 0 1
|
||||||
3358 FEAT_VILE_MARTIAL_DAGGER 16825482 16825480 ife_X2WSDagg **** **** **** **** **** **** 15 **** 90 **** 0 0 1 **** **** **** **** 0.5 **** 89 **** **** **** **** **** **** **** **** **** **** FEAT_VILE_MARTIAL_DAGGER 1 **** **** **** **** **** 0 1
|
3358 FEAT_VILE_MARTIAL_DAGGER 16825482 16825480 ife_X2WSDagg **** **** **** **** **** **** 15 **** 90 **** 0 0 1 **** **** **** **** 0.5 **** 89 **** **** **** **** **** **** **** **** **** **** FEAT_VILE_MARTIAL_DAGGER 1 **** **** **** **** **** 0 1
|
||||||
@@ -3389,8 +3389,8 @@
|
|||||||
3385 FEAT_VILE_MARTIAL_LIGHTCROSSBOW 16825509 16825480 ife_X2WSLXB **** **** **** **** **** **** 15 **** 93 **** 0 0 1 **** **** **** **** 0.5 **** 89 **** **** **** **** **** **** **** **** **** **** FEAT_VILE_MARTIAL_LIGHTCROSSBOW 1 **** **** **** **** **** 0 1
|
3385 FEAT_VILE_MARTIAL_LIGHTCROSSBOW 16825509 16825480 ife_X2WSLXB **** **** **** **** **** **** 15 **** 93 **** 0 0 1 **** **** **** **** 0.5 **** 89 **** **** **** **** **** **** **** **** **** **** FEAT_VILE_MARTIAL_LIGHTCROSSBOW 1 **** **** **** **** **** 0 1
|
||||||
3386 FEAT_VILE_MARTIAL_SLING 16825510 16825480 ife_X2WSSlng **** **** **** **** **** **** 15 **** 99 **** 0 0 1 **** **** **** **** 0.5 **** 89 **** **** **** **** **** **** **** **** **** **** FEAT_VILE_MARTIAL_SLING 1 **** **** **** **** **** 0 1
|
3386 FEAT_VILE_MARTIAL_SLING 16825510 16825480 ife_X2WSSlng **** **** **** **** **** **** 15 **** 99 **** 0 0 1 **** **** **** **** 0.5 **** 89 **** **** **** **** **** **** **** **** **** **** FEAT_VILE_MARTIAL_SLING 1 **** **** **** **** **** 0 1
|
||||||
3387 FEAT_VILE_MARTIAL_LONGBOW 16825511 16825480 ife_X2WSLBow **** **** **** **** **** **** 15 **** 101 **** 0 0 1 **** **** **** **** 0.5 **** 89 **** **** **** **** **** **** **** **** **** **** FEAT_VILE_MARTIAL_LONGBOW 1 **** **** **** **** **** 0 1
|
3387 FEAT_VILE_MARTIAL_LONGBOW 16825511 16825480 ife_X2WSLBow **** **** **** **** **** **** 15 **** 101 **** 0 0 1 **** **** **** **** 0.5 **** 89 **** **** **** **** **** **** **** **** **** **** FEAT_VILE_MARTIAL_LONGBOW 1 **** **** **** **** **** 0 1
|
||||||
3388 FEAT_SAC_VOW 16822845 16822846 ife_sacredvow **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SAC_VOW 6 **** **** **** **** **** 0 1
|
3388 FEAT_SAC_VOW 16822845 16822846 ife_sacredvow **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** 97 **** **** **** **** **** **** **** **** **** **** FEAT_SAC_VOW 6 **** **** **** **** **** 0 1
|
||||||
3389 FEAT_VOW_OBED 16822847 16822848 ife_sacredvow **** **** **** **** **** **** **** **** 3388 **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_VOW_OBED 6 **** **** **** **** **** 0 1
|
3389 FEAT_VOW_OBED 16822847 16822848 ife_sacredvow **** **** **** **** **** **** **** **** 3388 **** 0 0 1 **** **** **** **** 1 **** 97 **** **** **** **** **** **** **** **** **** **** FEAT_VOW_OBED 6 **** **** **** **** **** 0 1
|
||||||
3390 FEAT_EB_HAND 16822851 16822852 ife_X2BoneSk1 **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** 95 **** **** **** **** **** **** **** **** **** **** FEAT_EB_HAND 6 **** **** **** **** **** 0 1
|
3390 FEAT_EB_HAND 16822851 16822852 ife_X2BoneSk1 **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** 95 **** **** **** **** **** **** **** **** **** **** FEAT_EB_HAND 6 **** **** **** **** **** 0 1
|
||||||
3391 FEAT_EB_HEAD 16822853 16822854 ife_X2BoneSk1 **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** 95 **** **** **** **** **** **** **** **** **** **** FEAT_EB_HEAD 6 **** **** **** **** **** 0 1
|
3391 FEAT_EB_HEAD 16822853 16822854 ife_X2BoneSk1 **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** 95 **** **** **** **** **** **** **** **** **** **** FEAT_EB_HEAD 6 **** **** **** **** **** 0 1
|
||||||
3392 FEAT_EB_CHEST 16822855 16822856 ife_X2BoneSk1 **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** 95 **** **** **** **** **** **** **** **** **** **** FEAT_EB_CHEST 6 **** **** **** **** **** 0 1
|
3392 FEAT_EB_CHEST 16822855 16822856 ife_X2BoneSk1 **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** 95 **** **** **** **** **** **** **** **** **** **** FEAT_EB_CHEST 6 **** **** **** **** **** 0 1
|
||||||
@@ -3414,9 +3414,9 @@
|
|||||||
3410 OcAdept_FlSto 16789515 16789525 ife_petray **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1545 **** 1 2 **** 0 **** **** **** **** **** **** **** **** **** FEAT_PETRAY 6 **** **** **** **** **** 0 1
|
3410 OcAdept_FlSto 16789515 16789525 ife_petray **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1545 **** 1 2 **** 0 **** **** **** **** **** **** **** **** **** FEAT_PETRAY 6 **** **** **** **** **** 0 1
|
||||||
3411 OcAdept_Dis 16789516 16789526 ife_disray **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1546 **** 1 2 **** 0 **** **** **** **** **** **** **** **** **** FEAT_DISRAY 6 **** **** **** **** **** 0 1
|
3411 OcAdept_Dis 16789516 16789526 ife_disray **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1546 **** 1 2 **** 0 **** **** **** **** **** **** **** **** **** FEAT_DISRAY 6 **** **** **** **** **** 0 1
|
||||||
3412 OcAdept_Death 16789517 16789527 ife_deathray **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1547 **** 1 2 **** 0 **** **** **** **** **** **** **** **** **** FEAT_DEATHRAY 6 **** **** **** **** **** 0 1
|
3412 OcAdept_Death 16789517 16789527 ife_deathray **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1547 **** 1 2 **** 0 **** **** **** **** **** **** **** **** **** FEAT_DEATHRAY 6 **** **** **** **** **** 0 1
|
||||||
3413 ChargeBullrush 16834594 16834595 ife_X2Epfighter **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3480 **** 0.5 -1 **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
3413 ChargeBullrush 16834594 16834595 ife_X2Epfighter **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3480 **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
||||||
3414 GrappleBegin 16834584 16834585 ife_X2ImKiStrk4 **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3475 **** 0.5 -1 **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
3414 GrappleBegin 16834584 16834585 ife_X2ImKiStrk4 **** **** **** **** **** **** **** **** **** **** 0 0 0 22 1 3475 **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
||||||
3415 CombatMove_RadialMaster3 16833148 16832298 ife_X2Epmonk **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3496 **** 0.5 -1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 **** **** **** **** **** 0 0
|
3415 CombatMove_RadialMaster3 16833148 16832298 ife_X2Epmonk **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3496 **** 0.5 **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 **** **** **** **** **** 0 0
|
||||||
3416 FEAT_EPIC_SAMURAI 16789545 16789546 ife_X2Epfighter **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_SAMURAI 6 **** **** **** **** **** 1 1
|
3416 FEAT_EPIC_SAMURAI 16789545 16789546 ife_X2Epfighter **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_SAMURAI 6 **** **** **** **** **** 1 1
|
||||||
3417 Samur_AncestralDaisho 16789547 16789548 ife_wepspec_Kat **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1548 **** 0 **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_ANCESTRAL_DAISHO 6 **** **** **** **** **** 0 1
|
3417 Samur_AncestralDaisho 16789547 16789548 ife_wepspec_Kat **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1548 **** 0 **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_ANCESTRAL_DAISHO 6 **** **** **** **** **** 0 1
|
||||||
3418 Warpr_Rally 16789555 16789556 is_fear **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1549 **** 0 **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_RALLY 6 **** **** **** **** **** 0 1
|
3418 Warpr_Rally 16789555 16789556 is_fear **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1549 **** 0 **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_RALLY 6 **** **** **** **** **** 0 1
|
||||||
@@ -4200,7 +4200,7 @@
|
|||||||
4196 SB_Brill_25 16823454 16823455 ife_X2WSLSwd **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1566 4197 0.5 14 **** 1 **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_LONGSWORD 1 **** **** **** **** **** 0 1
|
4196 SB_Brill_25 16823454 16823455 ife_X2WSLSwd **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1566 4197 0.5 14 **** 1 **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_LONGSWORD 1 **** **** **** **** **** 0 1
|
||||||
4197 SB_Brill_27 16823454 16823455 ife_X2WSLSwd **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1566 4198 0.5 15 **** 1 **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_LONGSWORD 1 **** **** **** **** **** 0 1
|
4197 SB_Brill_27 16823454 16823455 ife_X2WSLSwd **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1566 4198 0.5 15 **** 1 **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_LONGSWORD 1 **** **** **** **** **** 0 1
|
||||||
4198 SB_Brill_29 16823454 16823455 ife_X2WSLSwd **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1566 **** 0.5 16 **** 1 **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_LONGSWORD 1 **** **** **** **** **** 0 1
|
4198 SB_Brill_29 16823454 16823455 ife_X2WSLSwd **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1566 **** 0.5 16 **** 1 **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_LONGSWORD 1 **** **** **** **** **** 0 1
|
||||||
4199 EXALTED_COMPANION 16822440 16822441 ife_animal **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_BLARCH_REGEN_1 4 **** **** **** **** **** 0 1
|
4199 EXALTED_COMPANION 16822440 16822441 ife_animal **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** 97 **** **** **** **** **** **** **** **** **** **** FEAT_BLARCH_REGEN_1 4 **** **** **** **** **** 0 1
|
||||||
4200 FEAT_BLARCH_POISON_BLOOD 16822397 16822398 ife_X2UsePoison **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2998 **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_BLARCH_POISON_BLOOD 4 **** **** **** **** **** 0 1
|
4200 FEAT_BLARCH_POISON_BLOOD 16822397 16822398 ife_X2UsePoison **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2998 **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_BLARCH_POISON_BLOOD 4 **** **** **** **** **** 0 1
|
||||||
4201 FEAT_BLARCH_ACID_BLOOD 16822399 16822400 ife_X2UsePoison **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ACID_BLOOD 4 **** **** **** **** **** 0 1
|
4201 FEAT_BLARCH_ACID_BLOOD 16822399 16822400 ife_X2UsePoison **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ACID_BLOOD 4 **** **** **** **** **** 0 1
|
||||||
4202 FEAT_BLARCH_REGEN_1 16822401 16822402 ife_X1ResDis **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 4203 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_BLARCH_REGEN_1 4 **** **** **** **** **** 0 1
|
4202 FEAT_BLARCH_REGEN_1 16822401 16822402 ife_X1ResDis **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 4203 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_BLARCH_REGEN_1 4 **** **** **** **** **** 0 1
|
||||||
@@ -4318,7 +4318,7 @@
|
|||||||
4314 DEATHLESS_FRENZY 16824231 16824232 ife_endfre **** **** **** **** **** **** **** **** **** **** 0 0 0 0 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_DEATHLESS_FRENZY 1 **** **** **** **** **** 0 1
|
4314 DEATHLESS_FRENZY 16824231 16824232 ife_endfre **** **** **** **** **** **** **** **** **** **** 0 0 0 0 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_DEATHLESS_FRENZY 1 **** **** **** **** **** 0 1
|
||||||
4315 GREATER_TWO_WEAPON_FIGHTING 16824246 16824247 ife_gtwo_wep 15 **** **** **** **** **** **** **** 20 **** 0 0 1 **** 1 **** 4316 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_GREATER_TWO_WEAPON_FIGHTING 6 **** **** **** **** **** 0 1
|
4315 GREATER_TWO_WEAPON_FIGHTING 16824246 16824247 ife_gtwo_wep 15 **** **** **** **** **** **** **** 20 **** 0 0 1 **** 1 **** 4316 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_GREATER_TWO_WEAPON_FIGHTING 6 **** **** **** **** **** 0 1
|
||||||
4316 SUPREME_TWO_WEAPON_FIGHTING 16824248 16824249 ife_gtwo_wep **** **** **** **** **** **** **** **** **** **** 0 0 0 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SUPREME_TWO_WEAPON_FIGHTING 6 **** **** **** **** **** 0 1
|
4316 SUPREME_TWO_WEAPON_FIGHTING 16824248 16824249 ife_gtwo_wep **** **** **** **** **** **** **** **** **** **** 0 0 0 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SUPREME_TWO_WEAPON_FIGHTING 6 **** **** **** **** **** 0 1
|
||||||
4317 FEAT_TWO_WEAPON_DEFENSE_1 16824250 16824251 ife_ohparry **** **** 15 **** **** **** **** **** 41 **** 0 0 0 **** 1 **** 4318 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_TWO_WEAPON_DEFENSE 1 **** **** **** **** **** 0 1
|
4317 FEAT_TWO_WEAPON_DEFENSE_1 16824250 16824251 ife_ohparry **** **** 15 **** **** **** **** **** 41 **** 0 0 1 **** 1 **** 4318 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_TWO_WEAPON_DEFENSE 1 **** **** **** **** **** 0 1
|
||||||
4318 FEAT_TWO_WEAPON_DEFENSE_2 16825529 16824251 ife_ohparry 6 **** 17 **** **** **** **** **** 4317 **** 0 0 0 **** 1 **** 4319 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_TWO_WEAPON_DEFENSE 1 **** **** **** **** **** 0 1
|
4318 FEAT_TWO_WEAPON_DEFENSE_2 16825529 16824251 ife_ohparry 6 **** 17 **** **** **** **** **** 4317 **** 0 0 0 **** 1 **** 4319 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_TWO_WEAPON_DEFENSE 1 **** **** **** **** **** 0 1
|
||||||
4319 FEAT_TWO_WEAPON_DEFENSE_3 16825530 16824251 ife_ohparry 11 **** 19 **** **** **** **** **** 4318 **** 0 0 0 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_TWO_WEAPON_DEFENSE 1 **** **** **** **** **** 0 1
|
4319 FEAT_TWO_WEAPON_DEFENSE_3 16825530 16824251 ife_ohparry 11 **** 19 **** **** **** **** **** 4318 **** 0 0 0 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_TWO_WEAPON_DEFENSE 1 **** **** **** **** **** 0 1
|
||||||
4320 PERFECT_TWO_WEAPON_FIGHTING 16824252 16824253 ife_gtwo_wep **** **** 25 **** **** **** **** **** 4315 **** 0 0 1 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_PERFECT_TWO_WEAPON_FIGHTING 6 **** **** **** **** **** 1 1
|
4320 PERFECT_TWO_WEAPON_FIGHTING 16824252 16824253 ife_gtwo_wep **** **** 25 **** **** **** **** **** 4315 **** 0 0 1 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_PERFECT_TWO_WEAPON_FIGHTING 6 **** **** **** **** **** 1 1
|
||||||
@@ -4375,12 +4375,12 @@
|
|||||||
4371 FEAT_SPELLFIRE_QUICKSELECT 16824658 16824663 ife_spellf_quick **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 3016 **** **** -1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_SPELLFIRE_QUICKSELECT **** **** **** **** **** **** **** 0
|
4371 FEAT_SPELLFIRE_QUICKSELECT 16824658 16824663 ife_spellf_quick **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 3016 **** **** -1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_SPELLFIRE_QUICKSELECT **** **** **** **** **** **** **** 0
|
||||||
4372 FEAT_WEAPON_FOCUS_SPELLFIRE 16824674 16824686 ife_wepfoc_spf 1 **** **** **** **** **** **** **** 4368 **** 0 0 1 **** **** **** **** 1 **** 1 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_FOCUS_SPELLFIRE 1 **** **** **** **** **** 0 1
|
4372 FEAT_WEAPON_FOCUS_SPELLFIRE 16824674 16824686 ife_wepfoc_spf 1 **** **** **** **** **** **** **** 4368 **** 0 0 1 **** **** **** **** 1 **** 1 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_FOCUS_SPELLFIRE 1 **** **** **** **** **** 0 1
|
||||||
4373 FEAT_EPIC_WEAPON_FOCUS_SPELLFIRE 16824685 16824687 ife_X2WFSpellf **** **** **** **** **** **** **** **** 4372 **** 0 0 1 **** **** **** **** 0.5 **** 10 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_FOCUS_SPELLFIRE 1 **** **** **** **** **** 1 1
|
4373 FEAT_EPIC_WEAPON_FOCUS_SPELLFIRE 16824685 16824687 ife_X2WFSpellf **** **** **** **** **** **** **** **** 4372 **** 0 0 1 **** **** **** **** 0.5 **** 10 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_FOCUS_SPELLFIRE 1 **** **** **** **** **** 1 1
|
||||||
4374 FEAT_SPELLFIRE_DRAIN_CHARGED 16824668 16824669 ife_spellf_drnc **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 3033 **** **** -1 **** **** **** **** **** **** **** **** **** **** **** FEAT_SPELLFIRE_DRAIN_CHARGED **** **** **** **** **** **** **** 1
|
4374 FEAT_SPELLFIRE_DRAIN_CHARGED 16824668 16824669 ife_spellf_drnc **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 3033 **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SPELLFIRE_DRAIN_CHARGED **** **** **** **** **** **** **** 1
|
||||||
4375 FEAT_SPELLFIRE_INCREASED_STORAGE 16824670 16824671 ife_spellf_store **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SPELLFIRE_INCREASED_STORAGE **** **** **** **** **** **** **** 1
|
4375 FEAT_SPELLFIRE_INCREASED_STORAGE 16824670 16824671 ife_spellf_store **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SPELLFIRE_INCREASED_STORAGE **** **** **** **** **** **** **** 1
|
||||||
4376 FEAT_SPELLFIRE_IMPROVED_HEALING 16824672 16824673 ife_spellf_heali **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SPELLFIRE_IMPROVED_HEALING **** **** **** **** **** **** **** 1
|
4376 FEAT_SPELLFIRE_IMPROVED_HEALING 16824672 16824673 ife_spellf_heali **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SPELLFIRE_IMPROVED_HEALING **** **** **** **** **** **** **** 1
|
||||||
4377 FEAT_SPELLFIRE_RAPID_BLAST 16824675 16824676 ife_spellf_rapid **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 3034 **** **** -1 **** **** **** **** **** **** **** **** **** **** **** FEAT_SPELLFIRE_RAPID_BLAST **** **** **** **** **** **** **** 1
|
4377 FEAT_SPELLFIRE_RAPID_BLAST 16824675 16824676 ife_spellf_rapid **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 3034 **** **** -1 **** **** **** **** **** **** **** **** **** **** **** FEAT_SPELLFIRE_RAPID_BLAST **** **** **** **** **** **** **** 1
|
||||||
4378 FEAT_SPELLFIRE_DRAIN_PERMANENT 16824677 16824678 ife_spellf_drnp **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 3037 **** **** -1 **** **** **** **** **** **** **** **** **** **** **** FEAT_SPELLFIRE_DRAIN_PERMANENT **** **** **** **** **** **** **** 1
|
4378 FEAT_SPELLFIRE_DRAIN_PERMANENT 16824677 16824678 ife_spellf_drnp **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 3037 **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SPELLFIRE_DRAIN_PERMANENT **** **** **** **** **** **** **** 1
|
||||||
4379 FEAT_SPELLFIRE_CHARGE_ITEM 16824679 16824680 ife_spellf_charg **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 3038 **** **** -1 **** **** **** **** **** **** **** **** **** **** **** FEAT_SPELLFIRE_CHARGE_ITEM **** **** **** **** **** **** **** 1
|
4379 FEAT_SPELLFIRE_CHARGE_ITEM 16824679 16824680 ife_spellf_charg **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 3038 **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SPELLFIRE_CHARGE_ITEM **** **** **** **** **** **** **** 1
|
||||||
4380 FEAT_SPELLFIRE_CROWN 16824681 16824682 ife_spellf_crown **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 3039 **** **** -1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_SPELLFIRE_CROWN **** **** **** **** **** **** **** 0
|
4380 FEAT_SPELLFIRE_CROWN 16824681 16824682 ife_spellf_crown **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 3039 **** **** -1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_SPELLFIRE_CROWN **** **** **** **** **** **** **** 0
|
||||||
4381 FEAT_SPELLFIRE_MAELSTROM 16824683 16824684 ife_spellf_maels **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 3040 **** **** -1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_SPELLFIRE_MAELSTROM **** **** **** **** **** **** **** 1
|
4381 FEAT_SPELLFIRE_MAELSTROM 16824683 16824684 ife_spellf_maels **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 3040 **** **** -1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_SPELLFIRE_MAELSTROM **** **** **** **** **** **** **** 1
|
||||||
4382 OotBI_RangedPrecision 16826378 16826379 ife_wepspec_Lbw **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2435 **** 1 -1 **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
|
4382 OotBI_RangedPrecision 16826378 16826379 ife_wepspec_Lbw **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2435 **** 1 -1 **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
|
||||||
@@ -4460,8 +4460,8 @@
|
|||||||
4456 minstrel_song_wisdom 16823470 16823487 ife_bardsong **** **** **** **** **** **** **** **** **** **** 0 0 0 23 **** 2154 **** 0.5 **** 105 1 **** **** **** **** **** **** **** **** **** FEAT_MINSTREL_SONG_WISDOM 5 **** **** **** **** **** 0 1
|
4456 minstrel_song_wisdom 16823470 16823487 ife_bardsong **** **** **** **** **** **** **** **** **** **** 0 0 0 23 **** 2154 **** 0.5 **** 105 1 **** **** **** **** **** **** **** **** **** FEAT_MINSTREL_SONG_WISDOM 5 **** **** **** **** **** 0 1
|
||||||
4457 minstrel_song_charisma 16823471 16823488 ife_bardsong **** **** **** **** **** **** **** **** **** **** 0 0 0 23 **** 2155 **** 0.5 **** 105 1 **** **** **** **** **** **** **** **** **** FEAT_MINSTREL_SONG_CHARISMA 5 **** **** **** **** **** 0 1
|
4457 minstrel_song_charisma 16823471 16823488 ife_bardsong **** **** **** **** **** **** **** **** **** **** 0 0 0 23 **** 2155 **** 0.5 **** 105 1 **** **** **** **** **** **** **** **** **** FEAT_MINSTREL_SONG_CHARISMA 5 **** **** **** **** **** 0 1
|
||||||
4458 minstrel_song_wound_whisp 16823111 16823489 ife_bardsong **** **** **** **** **** **** **** **** **** **** 0 0 0 23 **** 2156 **** 0.5 **** 105 1 **** **** **** **** **** **** **** **** **** FEAT_MINSTREL_SONG_WOUND_WHISP 5 **** **** **** **** **** 0 1
|
4458 minstrel_song_wound_whisp 16823111 16823489 ife_bardsong **** **** **** **** **** **** **** **** **** **** 0 0 0 23 **** 2156 **** 0.5 **** 105 1 **** **** **** **** **** **** **** **** **** FEAT_MINSTREL_SONG_WOUND_WHISP 5 **** **** **** **** **** 0 1
|
||||||
4459 Warlock_Imbue_Item 16827950 16827951 ife_imbueitem **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2082 **** 0.5 -1 **** **** **** **** **** **** **** **** **** **** **** FEAT_IMBUE_ITEM 6 1 **** **** **** **** 0 1
|
4459 Warlock_Imbue_Item 16827950 16827951 ife_imbueitem **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2082 **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_IMBUE_ITEM 6 1 **** **** **** **** 0 1
|
||||||
4460 Warlock_Eldritch_Blast 16827948 16827949 inv_eldrtchblast **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2083 **** 0.5 -1 **** **** **** **** **** **** **** **** **** **** **** FEAT_ELDRITCH_BLAST 6 1 **** **** **** **** 0 1
|
4460 Warlock_Eldritch_Blast 16827948 16827949 inv_eldrtchblast **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2083 **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ELDRITCH_BLAST 6 1 **** **** **** **** 0 1
|
||||||
4461 Warlock_Resist_Acid 16827938 16827943 ife_X2EnrRsA1 **** **** **** **** **** **** **** **** **** **** 0 0 0 23 **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_WARLOCK_RESIST_ACID 5 **** **** **** **** **** 0 1
|
4461 Warlock_Resist_Acid 16827938 16827943 ife_X2EnrRsA1 **** **** **** **** **** **** **** **** **** **** 0 0 0 23 **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_WARLOCK_RESIST_ACID 5 **** **** **** **** **** 0 1
|
||||||
4462 Warlock_Resist_Cold 16827939 16827943 ife_X2EnrRsC1 **** **** **** **** **** **** **** **** **** **** 0 0 0 23 **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_WARLOCK_RESIST_COLD 5 **** **** **** **** **** 0 1
|
4462 Warlock_Resist_Cold 16827939 16827943 ife_X2EnrRsC1 **** **** **** **** **** **** **** **** **** **** 0 0 0 23 **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_WARLOCK_RESIST_COLD 5 **** **** **** **** **** 0 1
|
||||||
4463 Warlock_Resist_Elec 16827940 16827943 ife_X2EnrRsE1 **** **** **** **** **** **** **** **** **** **** 0 0 0 23 **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_WARLOCK_RESIST_ELEC 5 **** **** **** **** **** 0 1
|
4463 Warlock_Resist_Elec 16827940 16827943 ife_X2EnrRsE1 **** **** **** **** **** **** **** **** **** **** 0 0 0 23 **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_WARLOCK_RESIST_ELEC 5 **** **** **** **** **** 0 1
|
||||||
@@ -4855,8 +4855,8 @@
|
|||||||
4851 Metamorphic_Transfer_7_UNFINISHED **** **** ife_metamtrans_7 99 **** **** **** 13 **** **** **** 4850 **** 0 0 **** **** **** **** **** 0.5 **** 80 **** **** **** **** **** **** **** **** **** **** FEAT_METAMORPHIC_TRANSFER_7 6 **** **** **** **** **** 0 1
|
4851 Metamorphic_Transfer_7_UNFINISHED **** **** ife_metamtrans_7 99 **** **** **** 13 **** **** **** 4850 **** 0 0 **** **** **** **** **** 0.5 **** 80 **** **** **** **** **** **** **** **** **** **** FEAT_METAMORPHIC_TRANSFER_7 6 **** **** **** **** **** 0 1
|
||||||
4852 Deep_Impact 16826514 16826515 ife_deep_impact 5 13 **** **** **** **** **** **** 4822 **** 0 0 1 **** **** 2827 **** 1 -1 80 **** **** **** **** **** **** **** **** **** **** FEAT_DEEP_IMPACT 2 1 **** **** **** **** 0 1
|
4852 Deep_Impact 16826514 16826515 ife_deep_impact 5 13 **** **** **** **** **** **** 4822 **** 0 0 1 **** **** 2827 **** 1 -1 80 **** **** **** **** **** **** **** **** **** **** FEAT_DEEP_IMPACT 2 1 **** **** **** **** 0 1
|
||||||
4853 Fell_Shot 16826516 16826517 ife_X1EnchArr 5 **** 13 **** **** **** **** **** 4824 27 0 0 1 **** **** 2828 **** 1 -1 80 **** **** **** **** **** **** **** **** **** **** FEAT_FELL_SHOT 2 1 **** **** **** **** 0 1
|
4853 Fell_Shot 16826516 16826517 ife_X1EnchArr 5 **** 13 **** **** **** **** **** 4824 27 0 0 1 **** **** 2828 **** 1 -1 80 **** **** **** **** **** **** **** **** **** **** FEAT_FELL_SHOT 2 1 **** **** **** **** 0 1
|
||||||
4854 Soulblade_Warrior 16828177 16828178 ife_sk_free_draw **** **** **** **** **** **** **** **** 4559 4796 0 0 0 **** **** 2403 **** 0.5 -1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_SOULBLADE_WARRIOR 5 **** **** **** **** **** 0 0
|
4854 Soulblade_Warrior 16828177 16828178 ife_sk_free_draw **** **** **** **** **** **** **** **** 4559 4796 0 0 1 **** **** 2403 **** 0.5 -1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_SOULBLADE_WARRIOR 5 **** **** **** **** **** 0 0
|
||||||
4855 Spiritual_Force 16828179 16828180 ife_psych_strike **** **** **** **** **** **** **** **** 4559 4796 0 0 0 **** **** 2399 **** 0.5 -1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_SPIRITUAL_FORCE 5 **** **** **** **** **** 0 0
|
4855 Spiritual_Force 16828179 16828180 ife_psych_strike **** **** **** **** **** **** **** **** 4559 4796 0 0 1 **** **** 2399 **** 0.5 -1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_SPIRITUAL_FORCE 5 **** **** **** **** **** 0 0
|
||||||
4856 RacialEnergyRay 16823693 16823694 is_RayFrost **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1984 **** 1 -1 **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
|
4856 RacialEnergyRay 16823693 16823694 is_RayFrost **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 1984 **** 1 -1 **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
|
||||||
4857 Epic_Psionic_Focus_1 16826551 16826519 ife_ep_psi_foc_1 **** **** **** **** **** **** **** **** 4818 **** 0 0 1 **** **** **** 4858 0.5 **** 80 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_PSIONIC_FOCUS_1 6 **** **** **** **** **** 1 1
|
4857 Epic_Psionic_Focus_1 16826551 16826519 ife_ep_psi_foc_1 **** **** **** **** **** **** **** **** 4818 **** 0 0 1 **** **** **** 4858 0.5 **** 80 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_PSIONIC_FOCUS_1 6 **** **** **** **** **** 1 1
|
||||||
4858 Epic_Psionic_Focus_2 16826552 16826519 ife_ep_psi_foc_2 **** **** **** **** **** **** **** **** 4857 **** 0 0 1 **** **** **** 4859 0.5 **** 80 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_PSIONIC_FOCUS_2 6 **** **** **** **** **** 1 1
|
4858 Epic_Psionic_Focus_2 16826552 16826519 ife_ep_psi_foc_2 **** **** **** **** **** **** **** **** 4857 **** 0 0 1 **** **** **** 4859 0.5 **** 80 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_PSIONIC_FOCUS_2 6 **** **** **** **** **** 1 1
|
||||||
@@ -5285,7 +5285,7 @@
|
|||||||
5281 SpiderfriendMagic 16834999 16835000 ife_web **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_BLADE_MEDITATION **** **** **** **** **** **** **** 1
|
5281 SpiderfriendMagic 16834999 16835000 ife_web **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_BLADE_MEDITATION **** **** **** **** **** **** **** 1
|
||||||
5282 ProfaneAgony 16834997 16834998 ife_prfnlflch **** **** **** **** **** **** **** **** 294 **** 0 0 1 **** **** 3792 **** 0.5 -1 **** **** 310 313 **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
5282 ProfaneAgony 16834997 16834998 ife_prfnlflch **** **** **** **** **** **** **** **** 294 **** 0 0 1 **** **** 3792 **** 0.5 -1 **** **** 310 313 **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
||||||
5283 DivineIntercession 16834995 16834996 ife_telep_manag **** **** **** **** **** **** **** **** 294 **** 0 0 1 **** **** 3791 **** 0.5 -1 **** **** 324 323 **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
5283 DivineIntercession 16834995 16834996 ife_telep_manag **** **** **** **** **** **** **** **** 294 **** 0 0 1 **** **** 3791 **** 0.5 -1 **** **** 324 323 **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
||||||
5284 InlindlSchool 16834993 16834994 ife_X2DCrtWhip **** **** **** 13 **** **** **** **** 389 42 **** **** 1 **** **** 2723 **** **** -1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_INLINDL_SCHOOL 2 **** **** **** **** **** 0 0
|
5284 InlindlSchool 16834993 16834994 ife_X2DCrtWhip **** **** **** 13 **** **** **** **** 389 42 **** **** 1 22 1 2723 **** 0.5 **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_INLINDL_SCHOOL 2 1 **** **** **** **** 0 1
|
||||||
5285 VaeSchool 16834991 16834992 ife_X2WpCh 7 **** **** **** **** **** **** **** 993 **** **** **** 1 **** **** **** **** **** **** **** **** 2807 4079 **** **** **** **** **** **** **** FEAT_SNAP_KICK **** **** **** **** **** **** **** 0
|
5285 VaeSchool 16834991 16834992 ife_X2WpCh 7 **** **** **** **** **** **** **** 993 **** **** **** 1 **** **** **** **** **** **** **** **** 2807 4079 **** **** **** **** **** **** **** FEAT_SNAP_KICK **** **** **** **** **** **** **** 0
|
||||||
5286 ThreeMountains 16834989 16834990 ife_X2DiviWrth **** 13 **** **** **** **** **** **** 2806 6 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SNAP_KICK **** **** **** **** **** **** **** 0
|
5286 ThreeMountains 16834989 16834990 ife_X2DiviWrth **** 13 **** **** **** **** **** **** 2806 6 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SNAP_KICK **** **** **** **** **** **** **** 0
|
||||||
5287 SpinningHalberd 16834987 16834988 ife_X2CritDHalb **** **** **** **** **** **** **** **** 112 **** 0 0 1 **** **** 2724 **** 0.5 -1 **** **** 41 374 **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
5287 SpinningHalberd 16834987 16834988 ife_X2CritDHalb **** **** **** **** **** **** **** **** 112 **** 0 0 1 **** **** 2724 **** 0.5 -1 **** **** 41 374 **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
||||||
@@ -5313,7 +5313,7 @@
|
|||||||
5309 BowmanAdeptFocus 16827863 16827864 ife_X2WFLBow **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 5310 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ADEPT_FOCUS 5 0 **** **** **** **** 0 0
|
5309 BowmanAdeptFocus 16827863 16827864 ife_X2WFLBow **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** 5310 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ADEPT_FOCUS 5 0 **** **** **** **** 0 0
|
||||||
5310 BowmanSupremeFocus 16827865 16827866 ife_X2WFLBow **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SUPREME_FOCUS 5 0 **** **** **** **** 0 0
|
5310 BowmanSupremeFocus 16827865 16827866 ife_X2WFLBow **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SUPREME_FOCUS 5 0 **** **** **** **** 0 0
|
||||||
5311 CrossbowSniper 16836399 16836400 ife_X2CritDHXB 1 **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** 92 93 **** **** **** **** **** **** **** FEAT_BLADE_MEDITATION **** **** **** **** **** **** **** 1
|
5311 CrossbowSniper 16836399 16836400 ife_X2CritDHXB 1 **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** 92 93 **** **** **** **** **** **** **** FEAT_BLADE_MEDITATION **** **** **** **** **** **** **** 1
|
||||||
5312 MasterWand 16836401 16836402 ife_X2CraftWand **** **** **** **** **** **** **** **** 946 **** 0 0 1 **** **** 3483 **** 0.5 -1 **** 1 **** **** **** **** **** 16 15 **** **** FEAT_SMITE_UNDEAD 6 **** **** **** **** **** 0 0
|
5312 MasterWand 16836401 16836402 ife_X2CraftWand **** **** **** **** **** **** **** **** 946 **** 0 0 1 **** **** 3483 **** 0.5 -1 **** 1 **** **** **** **** **** 16 15 **** **** FEAT_MASTER_WAND 6 **** **** **** **** **** 1 0
|
||||||
5313 RecklessWandWielder 16836403 16836404 ife_X2CraftWand **** **** **** **** **** **** **** **** 946 **** 0 0 1 **** **** 3484 **** 0.5 -1 **** 1 **** **** **** **** **** 19 1 **** **** FEAT_SMITE_UNDEAD 6 **** **** **** **** **** 0 0
|
5313 RecklessWandWielder 16836403 16836404 ife_X2CraftWand **** **** **** **** **** **** **** **** 946 **** 0 0 1 **** **** 3484 **** 0.5 -1 **** 1 **** **** **** **** **** 19 1 **** **** FEAT_SMITE_UNDEAD 6 **** **** **** **** **** 0 0
|
||||||
5314 WandMastery 16836405 16836406 ife_X2CraftWand **** **** **** **** **** **** **** **** 946 **** 0 0 1 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_HEX_SWIFT 5 0 **** **** **** **** 0 0
|
5314 WandMastery 16836405 16836406 ife_X2CraftWand **** **** **** **** **** **** **** **** 946 **** 0 0 1 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_HEX_SWIFT 5 0 **** **** **** **** 0 0
|
||||||
5315 DoubleWandWielder 16836407 16836408 ife_X2CraftWand **** **** **** **** **** **** **** **** 946 41 0 0 1 **** **** 3485 **** 0.5 -1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 **** **** **** **** **** 0 0
|
5315 DoubleWandWielder 16836407 16836408 ife_X2CraftWand **** **** **** **** **** **** **** **** 946 41 0 0 1 **** **** 3485 **** 0.5 -1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 **** **** **** **** **** 0 0
|
||||||
@@ -5350,18 +5350,18 @@
|
|||||||
5346 Font_Inspiration_8 16822324 16822316 ife_psitalent_8 **** **** **** 26 **** **** **** **** 5345 **** 0 0 1 **** **** **** 5347 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_PSIONIC_TALENT_8 6 **** **** **** **** **** 0 1
|
5346 Font_Inspiration_8 16822324 16822316 ife_psitalent_8 **** **** **** 26 **** **** **** **** 5345 **** 0 0 1 **** **** **** 5347 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_PSIONIC_TALENT_8 6 **** **** **** **** **** 0 1
|
||||||
5347 Font_Inspiration_9 16822360 16822316 ife_psitalent_9 **** **** **** 28 **** **** **** **** 5346 **** 0 0 1 **** **** **** 5348 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_PSIONIC_TALENT_9 6 **** **** **** **** **** 0 1
|
5347 Font_Inspiration_9 16822360 16822316 ife_psitalent_9 **** **** **** 28 **** **** **** **** 5346 **** 0 0 1 **** **** **** 5348 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_PSIONIC_TALENT_9 6 **** **** **** **** **** 0 1
|
||||||
5348 Font_Inspiration_10 16822361 16822316 ife_psitalent_10 **** **** **** 30 **** **** **** **** 5347 **** 0 0 1 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_PSIONIC_TALENT_10 6 **** **** **** **** **** 0 1
|
5348 Font_Inspiration_10 16822361 16822316 ife_psitalent_10 **** **** **** 30 **** **** **** **** 5347 **** 0 0 1 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_PSIONIC_TALENT_10 6 **** **** **** **** **** 0 1
|
||||||
5349 Factotum_Cunning_Insight_Attack 16822394 16822397 fot_magicaxe **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3895 **** 1 -1 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
5349 Factotum_Cunning_Insight_Attack 16822394 16822397 fot_magicaxe **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3895 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
||||||
5350 Factotum_Cunning_Insight_Damage 16822395 16822397 fot_rage **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3896 **** 1 -1 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
5350 Factotum_Cunning_Insight_Damage 16822395 16822397 fot_rage **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3896 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
||||||
5351 Factotum_Cunning_Insight_Saves 16822396 16822397 fot_shield **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3897 **** 1 -1 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
5351 Factotum_Cunning_Insight_Saves 16822396 16822397 fot_shield **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3897 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
||||||
5352 Factotum_Cunning_Defense 16822398 16822399 fot_ironskins **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3898 **** 1 -1 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
5352 Factotum_Cunning_Defense 16822398 16822399 fot_ironskins **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3898 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
||||||
5353 Factotum_Cunning_Strike 16822400 16822401 fot_blackblade **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3899 **** 1 -1 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
5353 Factotum_Cunning_Strike 16822400 16822401 fot_blackblade **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3899 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
||||||
5354 Factotum_Cunning_Surge 16822402 16822403 fot_haste **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3900 **** 1 -1 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
5354 Factotum_Cunning_Surge 16822402 16822403 fot_haste **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3900 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
||||||
5355 Factotum_Cunning_Breach 16822404 16822405 fot_feeblemind **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3901 **** 1 -1 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
5355 Factotum_Cunning_Breach 16822404 16822405 fot_feeblemind **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3901 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
||||||
5356 Factotum_Cunning_Dodge 16822406 16822453 fot_stoneflesh **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3902 **** 1 -1 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
5356 Factotum_Cunning_Dodge 16822406 16822453 fot_stoneflesh **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3902 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
||||||
5357 Factotum_Cunning_Knowledge 16824532 16826316 fot_oracle **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3903 **** 1 -1 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
5357 Factotum_Cunning_Knowledge 16824532 16826316 fot_oracle **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3903 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
||||||
5358 Factotum_Opportunistic_Piety_Heal 16826317 16826318 fot_regenerate **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3904 **** 1 10 **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
|
5358 Factotum_Opportunistic_Piety_Heal 16826317 16826318 fot_regenerate **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3904 **** 1 10 **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
|
||||||
5359 Factotum_Opportunistic_Piety_Turn 16826319 16826320 fot_contundead **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3905 **** 1 10 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
|
5359 Factotum_Opportunistic_Piety_Turn 16826319 16826320 fot_contundead **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3905 **** 1 10 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
|
||||||
5360 FEAT_VOW_PURITY 16826325 16826326 ife_sacredvow **** **** **** **** **** **** **** **** 3388 **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_VOW_PURITY 6 **** **** **** **** **** 0 1
|
5360 FEAT_VOW_PURITY 16826325 16826326 ife_sacredvow **** **** **** **** **** **** **** **** 3388 **** 0 0 1 **** **** **** **** 1 **** 97 **** **** **** **** **** **** **** **** **** **** FEAT_VOW_PURITY 6 **** **** **** **** **** 0 1
|
||||||
5361 Sharess_Fascinate 16826327 16826934 ife_X1SDaze **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3907 **** 1 10 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
|
5361 Sharess_Fascinate 16826327 16826934 ife_X1SDaze **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3907 **** 1 10 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
|
||||||
5362 Sharess_Confuse 16826935 16826936 ife_X1HTym **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3908 **** 1 10 **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
|
5362 Sharess_Confuse 16826935 16826936 ife_X1HTym **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3908 **** 1 10 **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
|
||||||
5363 Sharess_Dominate 16826937 16826938 ife_X1HLHrt **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3909 **** 1 10 **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
|
5363 Sharess_Dominate 16826937 16826938 ife_X1HLHrt **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3909 **** 1 10 **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
|
||||||
@@ -5371,7 +5371,7 @@
|
|||||||
5367 VremyonniTraining 16789650 16789651 ife_sk_mast **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 **** **** **** **** **** 0 1
|
5367 VremyonniTraining 16789650 16789651 ife_sk_mast **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 **** **** **** **** **** 0 1
|
||||||
5368 CultistShatteredPeak_SmiteMage 16789658 16789659 ife_X1ADAbj **** **** **** **** **** **** **** **** **** **** 0 0 **** **** **** 2339 **** 0.5 1 **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
5368 CultistShatteredPeak_SmiteMage 16789658 16789659 ife_X1ADAbj **** **** **** **** **** **** **** **** **** **** 0 0 **** **** **** 2339 **** 0.5 1 **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
||||||
5369 Forsaker_FastHealing 16824830 16847615 ife_divineheal **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3913 **** 1 1 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
5369 Forsaker_FastHealing 16824830 16847615 ife_divineheal **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3913 **** 1 1 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
|
||||||
5370 AwesomeBlow 16833142 16833143 ife_wepspec_Bax **** 25 **** **** **** **** **** **** 2806 28 0 0 1 **** **** 2340 **** 0.5 -1 **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
5370 AwesomeBlow 16833142 16833143 ife_wepspec_Bax **** 25 **** **** **** **** **** **** 2806 28 0 0 1 22 1 2340 **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
|
||||||
5371 OversizedTWF 16790149 16790150 ife_twoweap **** 13 **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 0.5 **** **** **** 41 374 **** **** **** **** **** **** **** FEAT_OTWF 6 1 **** **** **** **** 0 1
|
5371 OversizedTWF 16790149 16790150 ife_twoweap **** 13 **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 0.5 **** **** **** 41 374 **** **** **** **** **** **** **** FEAT_OTWF 6 1 **** **** **** **** 0 1
|
||||||
5372 FrostFolk_IceBlast 16790167 16790168 is_ConeCold **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3802 **** 1 -1 **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
|
5372 FrostFolk_IceBlast 16790167 16790168 is_ConeCold **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3802 **** 1 -1 **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
|
||||||
5373 Uldra_RayFrost 894 6238 is_RayFrost **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3804 **** 1 3 **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
|
5373 Uldra_RayFrost 894 6238 is_RayFrost **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3804 **** 1 3 **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
|
||||||
@@ -8194,7 +8194,7 @@
|
|||||||
8190 Crusader_BolsteringVoice 16837209 16830172 im_BolsterVoice **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 15993 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8190 Crusader_BolsteringVoice 16837209 16830172 im_BolsterVoice **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 15993 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
8191 Crusader_ClarionCall 16837210 16830174 im_ClarionCall **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 15994 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8191 Crusader_ClarionCall 16837210 16830174 im_ClarionCall **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 15994 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
8192 Crusader_CoveringStrike 16837211 16830176 im_CoverStrike **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 15995 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8192 Crusader_CoveringStrike 16837211 16830176 im_CoverStrike **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 15995 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
8193 Crusader_DouseTheFlames 16837212 16830178 im_DouseTheFlames **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 15996 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8193 Crusader_DouseTheFlames 16837212 16830178 im_douse_flames **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 15996 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
8194 Crusader_FlankingManeuver 16837213 16830180 im_FlankManeuver **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 15997 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8194 Crusader_FlankingManeuver 16837213 16830180 im_FlankManeuver **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 15997 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
8195 Crusader_LeadingTheAttack 16837214 16830182 im_LeadTheAttack **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 15998 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8195 Crusader_LeadingTheAttack 16837214 16830182 im_LeadTheAttack **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 15998 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
8196 Crusader_LeadingTheCharge 16837215 16830120 im_LeadTheCharge **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 15999 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8196 Crusader_LeadingTheCharge 16837215 16830120 im_LeadTheCharge **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 15999 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
@@ -8402,7 +8402,7 @@
|
|||||||
8398 Swordsage_BolsteringVoice 16837420 16830172 im_BolsterVoice **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 16204 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8398 Swordsage_BolsteringVoice 16837420 16830172 im_BolsterVoice **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 16204 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
8399 Swordsage_ClarionCall 16837421 16830174 im_ClarionCall **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 16205 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8399 Swordsage_ClarionCall 16837421 16830174 im_ClarionCall **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 16205 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
8400 Swordsage_CoveringStrike 16837422 16830176 im_CoverStrike **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 16206 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8400 Swordsage_CoveringStrike 16837422 16830176 im_CoverStrike **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 16206 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
8401 Swordsage_DouseTheFlames 16837423 16830178 im_DouseTheFlames **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 16207 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8401 Swordsage_DouseTheFlames 16837423 16830178 im_douse_flames **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 16207 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
8402 Swordsage_FlankingManeuver 16837424 16830180 im_FlankManeuver **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 16208 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8402 Swordsage_FlankingManeuver 16837424 16830180 im_FlankManeuver **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 16208 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
8403 Swordsage_LeadingTheAttack 16837425 16830182 im_LeadTheAttack **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 16209 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8403 Swordsage_LeadingTheAttack 16837425 16830182 im_LeadTheAttack **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 16209 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
8404 Swordsage_LeadingTheCharge 16837426 16830120 im_LeadTheCharge **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 16210 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8404 Swordsage_LeadingTheCharge 16837426 16830120 im_LeadTheCharge **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 16210 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
@@ -8610,7 +8610,7 @@
|
|||||||
8606 Warblade_BolsteringVoice 16837631 16830172 im_BolsterVoice **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 17637 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8606 Warblade_BolsteringVoice 16837631 16830172 im_BolsterVoice **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 17637 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
8607 Warblade_ClarionCall 16837632 16830174 im_ClarionCall **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 17638 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8607 Warblade_ClarionCall 16837632 16830174 im_ClarionCall **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 17638 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
8608 Warblade_CoveringStrike 16837633 16830176 im_CoverStrike **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 17639 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8608 Warblade_CoveringStrike 16837633 16830176 im_CoverStrike **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 17639 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
8609 Warblade_DouseTheFlames 16837634 16830178 im_DouseTheFlames **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 17640 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8609 Warblade_DouseTheFlames 16837634 16830178 im_douse_flames **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 17640 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
8610 Warblade_FlankingManeuver 16837635 16830180 im_FlankManeuver **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 17641 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8610 Warblade_FlankingManeuver 16837635 16830180 im_FlankManeuver **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 17641 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
8611 Warblade_LeadingTheAttack 16837636 16830182 im_LeadTheAttack **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 17642 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8611 Warblade_LeadingTheAttack 16837636 16830182 im_LeadTheAttack **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 17642 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
8612 Warblade_LeadingTheCharge 16837637 16830120 im_LeadTheCharge **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 17643 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
8612 Warblade_LeadingTheCharge 16837637 16830120 im_LeadTheCharge **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 17643 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
@@ -10594,38 +10594,38 @@
|
|||||||
10590 Harper_Clairaudience_and_Clairvoyance 16831262 16826976 is_ClairAdVo **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 4929 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10590 Harper_Clairaudience_and_Clairvoyance 16831262 16826976 is_ClairAdVo **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 4929 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
10591 Harper_NONDETECTION 16831263 16829183 is_undet_align **** **** **** **** **** **** **** **** **** **** **** **** **** 13 **** 4930 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10591 Harper_NONDETECTION 16831263 16829183 is_undet_align **** **** **** **** **** **** **** **** **** **** **** **** **** 13 **** 4930 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
10592 Harper_UndetectableAlignment 16831264 16831997 is_undet_align **** **** **** **** **** **** **** **** **** **** **** **** **** 13 **** 4931 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10592 Harper_UndetectableAlignment 16831264 16831997 is_undet_align **** **** **** **** **** **** **** **** **** **** **** **** **** 13 **** 4931 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
10593 Assassin_ADDICTION 16831265 16829697 is_addiction **** **** **** **** **** **** **** **** **** **** **** **** **** 3 **** 4932 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
|
10593 SORCERER_REPAIR_MINOR_DAMAGE 16831276 16976379 is_CurMinW **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 4940 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
|
||||||
10594 Assassin_ANGRY_ACHE 16831270 16829473 is_angry_ache **** **** **** **** **** **** **** **** **** **** **** **** **** 2 **** 4937 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
|
10594 SORCERER_REPAIR_LIGHT_DAMAGE 16831277 16976385 is_CurLgtW **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 4941 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
|
||||||
10595 Assassin_Blade_of_Blood 16831271 16826257 is_x2persblde **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 4938 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10595 SORCERER_REPAIR_MODERATE_DAMAGE 16831278 16976391 is_CurModW **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 4942 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
10596 Assassin_Disguise_Self_Radial_Master 16831274 16822661 is_Disguise **** **** **** **** **** **** **** **** **** **** **** **** **** 10 **** 4941 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10596 SORCERER_REPAIR_SERIOUS_DAMAGE 16831279 16976397 is_CurSerW **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 4943 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
10597 Assassin_Spell_Jump 16831280 16829170 is_jump **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 4947 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10597 SORCERER_REPAIR_CRITICAL_DAMAGE 16831280 16976403 is_CurCrWnds **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 4944 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
10598 Assassin_Obscuring_Mist 16831281 16832076 is_X2CldBwld **** **** **** **** **** **** **** **** **** **** **** **** **** 6 **** 4948 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10598 SORCERER_SPIRIT_WORM 16831281 16990523 is_GhoulTch **** **** **** **** **** **** **** **** **** **** **** **** **** 2 **** 4946 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
|
||||||
10599 Assassin_Sleep 16831282 6258 is_Sleep **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** 4949 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
|
10599 SORCERER_CHASING_PERFECTION 16831282 16990494 fot_strengthone **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 4947 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10600 Assassin_True_Strike 16831283 509 is_X1TruStr **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 4950 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10600 SORCERER_FORCE_MISSILES 16831283 16990489 is_X1LesMis **** **** **** **** **** **** **** **** **** **** **** **** **** 2 **** 4948 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
|
||||||
10601 Assassin_Alter_Self_Radial_Master 16831284 16827969 is_PolySelf **** **** **** **** **** **** **** **** **** **** **** **** **** 10 **** 4951 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10601 SORCERER_ADRENALINE_SURGE 16831284 16976361 is_mbullstr **** **** **** **** **** **** **** **** **** **** **** **** **** 10 **** 4949 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10602 Assassin_Cats_Grace 16831290 6109 is_CatGrace **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 4957 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10602 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10603 Assassin_Darkness 16831291 6132 is_Darkness **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 4958 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10603 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10604 Assassin_Foxs_Cunning 16831292 6528 is_FoxCunng **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 4959 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10604 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10605 Assassin_IceKnife 16831293 16832232 is_shiver_tch **** **** **** **** **** **** **** **** **** **** **** **** **** 2 **** 4960 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
|
10605 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10606 Assassin_Invisibility 16831294 6187 is_Invisib **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 4961 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10606 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10607 Assassin_UndetectableAlignment 16831295 16831997 is_undet_align **** **** **** **** **** **** **** **** **** **** **** **** **** 13 **** 4962 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10607 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10608 Assassin_DeeperDarkness 16831296 16832054 is_Darkness **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 4963 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10608 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10609 Assassin_DeepSlumber 16831297 16825813 is_sleep **** **** **** **** **** **** **** **** **** **** **** **** **** 11 **** 4964 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
|
10609 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10610 Assassin_FalseLife 16831298 16825807 is_auravital **** **** **** **** **** **** **** **** **** **** **** **** **** 10 **** 4965 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10610 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10611 Assassin_Magic_Circle_against_Good 16831299 6494 is_CircGood **** **** **** **** **** **** **** **** **** **** **** **** **** 8 **** 4966 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10611 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10612 Assassin_MASOCHISM 16831300 16829695 is_masochism **** **** **** **** **** **** **** **** **** **** **** **** **** 10 **** 4967 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10612 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10613 Assassin_NONDETECTION 16831301 16829183 is_undet_align **** **** **** **** **** **** **** **** **** **** **** **** **** 13 **** 4968 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10613 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10614 Assassin_Clairaudience_and_Clairvoyance 16831302 16826976 is_ClairAdVo **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 4969 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10614 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10615 Assassin_CursedBlade 16831303 16825823 is_x2blckblde **** **** **** **** **** **** **** **** **** **** **** **** **** 10 **** 4970 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10615 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10616 Assassin_DimensionDoor_RadialMaster 16831304 16825213 is_dimdoor **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 4971 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10616 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10617 Assassin_FLESH_ARMOR 16831309 16829547 is_flesh_armor **** **** **** **** **** **** **** **** **** **** **** **** **** 10 **** 4976 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10617 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10618 Assassin_Freedom_of_Movement 16831310 6159 is_FreeMove **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 4977 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10618 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10619 Assassin_GLIBNESS 16831311 16828716 is_glibness **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 4978 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10619 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10620 Assassin_HeartRipper 16831312 16832087 is_stop_hrt **** **** **** **** **** **** **** **** **** **** **** **** **** 2 **** 4979 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
|
10620 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10621 Assassin_Improved_Invisibility 16831313 6185 is_ImprInvis **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 4980 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10621 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10622 Assassin_LocateCreature 16831314 16826980 is_DomMon **** **** **** **** **** **** **** **** **** **** **** **** **** 6 **** 4981 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10622 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10623 Assassin_Poison 16831315 16826306 is_Poison **** **** **** **** **** **** **** **** **** **** **** **** **** 2 **** 4982 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
|
10623 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10624 Assassin_STOP_HEART 16831316 16829595 is_stop_hrt **** **** **** **** **** **** **** **** **** **** **** **** **** 3 **** 4983 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
|
10624 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
10625 Blackguard_Cure_Light_Wounds 16831317 6128 is_CurLgtW **** **** **** **** **** **** **** **** **** **** **** **** **** 5 **** 4984 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10625 Blackguard_Cure_Light_Wounds 16831317 6128 is_CurLgtW **** **** **** **** **** **** **** **** **** **** **** **** **** 5 **** 4984 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
10626 Blackguard_Empowered_Cure_Light_Wounds 16831318 6128 is_CurLgtW **** **** **** **** **** **** **** **** **** **** **** **** **** 5 **** 4985 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10626 Blackguard_Empowered_Cure_Light_Wounds 16831318 6128 is_CurLgtW **** **** **** **** **** **** **** **** **** **** **** **** **** 5 **** 4985 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
10627 Blackguard_Maximized_Cure_Light_Wounds 16831319 6128 is_CurLgtW **** **** **** **** **** **** **** **** **** **** **** **** **** 5 **** 4986 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
10627 Blackguard_Maximized_Cure_Light_Wounds 16831319 6128 is_CurLgtW **** **** **** **** **** **** **** **** **** **** **** **** **** 5 **** 4986 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
@@ -13248,7 +13248,7 @@
|
|||||||
13244 DreadNecromancer_Necrotic_Termination 16841609 16829213 is_Nec_Term **** **** **** **** **** **** **** **** **** **** **** **** **** 3 **** 7973 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
|
13244 DreadNecromancer_Necrotic_Termination 16841609 16829213 is_Nec_Term **** **** **** **** **** **** **** **** **** **** **** **** **** 3 **** 7973 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
|
||||||
13245 DreadNecromancer_PlagueOfUndead 16841610 16847585 is_AnimDead **** **** **** **** **** **** **** **** **** **** **** **** **** 15 **** 7974 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
13245 DreadNecromancer_PlagueOfUndead 16841610 16847585 is_AnimDead **** **** **** **** **** **** **** **** **** **** **** **** **** 15 **** 7974 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
13246 DreadNecromancer_Wail_of_the_Banshee 16841611 6521 is_WailBansh **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** 7975 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
|
13246 DreadNecromancer_Wail_of_the_Banshee 16841611 6521 is_WailBansh **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** 7975 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
|
||||||
13247 ****_Cure_Minor_Wounds 16841612 16827032 is_CurMinW **** **** **** **** **** **** **** **** **** **** **** **** **** 5 **** 7976 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
13247 DreadNecromancer_Spirit_Worm 16841612 is_GhoulTch is_GhoulTch **** **** **** **** **** **** **** **** **** **** **** **** **** 2 **** 7976 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
|
||||||
13248 ****_Inflict_Minor_Wounds 16841613 1570 is_X1InfMin **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 7977 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
|
13248 ****_Inflict_Minor_Wounds 16841613 1570 is_X1InfMin **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 7977 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** 0
|
||||||
13249 ****_Light 16841614 6197 is_Light **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 7978 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
13249 ****_Light 16841614 6197 is_Light **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 7978 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
13250 ****_Read_Magic 16841615 16789529 is_ReadMagic **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 7979 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
13250 ****_Read_Magic 16841615 16789529 is_ReadMagic **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 7979 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
@@ -17062,16 +17062,16 @@
|
|||||||
17058 Favoured_Soul_True_Resurrection 16846323 16828345 is_Resurrec **** **** **** **** **** **** **** **** **** **** **** **** **** 7 **** 12687 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
17058 Favoured_Soul_True_Resurrection 16846323 16828345 is_Resurrec **** **** **** **** **** **** **** **** **** **** **** **** **** 7 **** 12687 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
17059 Favoured_Soul_Undeaths_Eternal_Foe 16846324 2372 is_X1UndFoe **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 12688 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
17059 Favoured_Soul_Undeaths_Eternal_Foe 16846324 2372 is_X1UndFoe **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 12688 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
17060 Favoured_Soul_VileDeath 16846325 16847583 is_SlayLive **** **** **** **** **** **** **** **** **** **** **** **** **** 2 **** 12689 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
17060 Favoured_Soul_VileDeath 16846325 16847583 is_SlayLive **** **** **** **** **** **** **** **** **** **** **** **** **** 2 **** 12689 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
17061 Sohei_Bane 16846326 2664 is_X1Bane **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 12690 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
17061 Favoured_Soul_DetectMagic 16846326 16836771 is_detect_law **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 12690 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
17062 Sohei_Exteneded_Bane 16846327 2664 is_X1Bane **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 12691 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
17062 Favoured_Soul_Desecrate 16846327 16838055 is_PrEvil **** **** **** **** **** **** **** **** **** **** **** **** **** 2 **** 12691 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
17063 Sohei_Silent_Bane 16846328 2664 is_X1Bane **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 12692 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
17063 Favoured_Soul_Enthrall 16846328 16835171 is_Sleep **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** 12692 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
17064 Sohei_Still_Bane 16846329 2664 is_X1Bane **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 12693 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
17064 Favoured_Soul_SPIRITUAL_WEAPON 16846329 16990526 is_X2PersBlde **** **** **** **** **** **** **** **** **** **** **** **** **** 15 **** 12693 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
17065 Sohei_Bless 16846330 6102 is_Bless **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 12694 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
17065 Favoured_Soul_REGEN_LIGHT_WOUNDS 16846330 16990498 is_CurLgtW **** **** **** **** **** **** **** **** **** **** **** **** **** 5 **** 12694 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
17066 Sohei_Exteneded_Bless 16846331 6102 is_Bless **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 12695 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
17066 Favoured_Soul_REGEN_MODERATE_WOUNDS 16846331 16990503 is_CurModW **** **** **** **** **** **** **** **** **** **** **** **** **** 5 **** 12695 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
17067 Sohei_Silent_Bless 16846332 6102 is_Bless **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 12696 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
17067 Favoured_Soul_REGEN_SERIOUS_WOUNDS 16846332 16990508 is_CurSerW **** **** **** **** **** **** **** **** **** **** **** **** **** 5 **** 12696 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
17068 Sohei_Still_Bless 16846333 6102 is_Bless **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 12697 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
17068 Favoured_Soul_REGEN_CRITICAL_WOUNDS 16846333 16990513 is_CurCrWnds **** **** **** **** **** **** **** **** **** **** **** **** **** 5 **** 12697 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
17069 Sohei_Bless_Weapon 16846334 3754 is_X2BlssWeap **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 12698 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
17069 Favoured_Soul_Hallow 16846334 16838045 is_CircEvil **** **** **** **** **** **** **** **** **** **** **** **** **** 8 **** 12698 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
17070 Sohei_Exteneded_Bless_Weapon 16846335 3754 is_X2BlssWeap **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 12699 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
17070 Favoured_Soul_SPELL_CHASING_PERFECTION 16846335 16990494 fot_strengthone **** **** **** **** **** **** **** **** **** **** **** **** **** 7 **** 12699 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
17071 Sohei_Silent_Bless_Weapon 16846336 3754 is_X2BlssWeap **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 12700 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
17071 Sohei_Silent_Bless_Weapon 16846336 3754 is_X2BlssWeap **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 12700 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
17072 Sohei_Still_Bless_Weapon 16846337 3754 is_X2BlssWeap **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 12701 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
17072 Sohei_Still_Bless_Weapon 16846337 3754 is_X2BlssWeap **** **** **** **** **** **** **** **** **** **** **** **** **** 9 **** 12701 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
17073 Sohei_Detect_Chaos 16846338 16831995 is_detect_chaos **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 12702 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
17073 Sohei_Detect_Chaos 16846338 16831995 is_detect_chaos **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 12702 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0 **** **** **** **** **** 0
|
||||||
@@ -22701,7 +22701,7 @@
|
|||||||
22697 HalfDragonObscureSong 16838708 16838709 dradis_brass **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
22697 HalfDragonObscureSong 16838708 16838709 dradis_brass **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
||||||
22698 HalfDragonObscureStyx 16838710 16838711 dradis_blue **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
22698 HalfDragonObscureStyx 16838710 16838711 dradis_blue **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
||||||
22699 HalfDragonObscureTarterian 16838712 16838713 dradis_crystal **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
22699 HalfDragonObscureTarterian 16838712 16838713 dradis_crystal **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
||||||
22700 ArchlichMarker 16790395 16790396 ife_X2SpAniDed **** **** **** **** **** **** **** **** **** **** 0 0 0 5 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_TEMPLATE_ARCHLICH_MARKER 5 0 **** **** **** **** **** 1
|
22700 ArchlichMarker 16790405 16790406 ife_X2SpAniDed **** **** **** **** **** **** **** **** **** **** 0 0 0 5 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_TEMPLATE_ARCHLICH_MARKER 5 0 **** **** **** **** 0 1
|
||||||
22701 ArchlichTurnUndead 428 6085 ife_turn **** **** **** **** **** **** **** **** **** **** 0 0 0 **** 1 16381 **** 0.5 **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_TEMPLATE_ARCHLICH_TURN_UNDEAD 6 **** **** **** **** **** 0 0
|
22701 ArchlichTurnUndead 428 6085 ife_turn **** **** **** **** **** **** **** **** **** **** 0 0 0 **** 1 16381 **** 0.5 **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_TEMPLATE_ARCHLICH_TURN_UNDEAD 6 **** **** **** **** **** 0 0
|
||||||
22702 Saint_Bless 756 6102 is_Bless **** **** **** **** **** **** **** **** **** **** 0 0 0 9 **** 16382 **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_TEMPLATE_SAINT_SLA_BLESS 5 0 **** **** **** **** 0 0
|
22702 Saint_Bless 756 6102 is_Bless **** **** **** **** **** **** **** **** **** **** 0 0 0 9 **** 16382 **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_TEMPLATE_SAINT_SLA_BLESS 5 0 **** **** **** **** 0 0
|
||||||
22703 Saint_Guidance_Placeholder **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
22703 Saint_Guidance_Placeholder **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 0
|
||||||
@@ -22709,7 +22709,7 @@
|
|||||||
22705 Saint_Virtue 939 6520 is_Virtue **** **** **** **** **** **** **** **** **** **** 0 0 0 9 **** 16385 **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_TEMPLATE_SAINT_SLA_VIRTUE 5 0 **** **** **** **** 0 0
|
22705 Saint_Virtue 939 6520 is_Virtue **** **** **** **** **** **** **** **** **** **** 0 0 0 9 **** 16385 **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_TEMPLATE_SAINT_SLA_VIRTUE 5 0 **** **** **** **** 0 0
|
||||||
22706 Saint_Protective_Aura 16790401 16790402 ife_holyaura **** **** **** **** **** **** **** **** **** **** 0 0 0 9 **** 16386 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_TEMPLATE_SAINT_PROTECTIVE_AURA 5 0 **** **** **** **** 0 0
|
22706 Saint_Protective_Aura 16790401 16790402 ife_holyaura **** **** **** **** **** **** **** **** **** **** 0 0 0 9 **** 16386 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_TEMPLATE_SAINT_PROTECTIVE_AURA 5 0 **** **** **** **** 0 0
|
||||||
22707 Saint_Holy_Power 16790403 16790404 ife_holyaura **** **** **** **** **** **** **** **** **** **** 0 0 0 9 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_TEMPLATE_SAINT_HOLY_POWER 5 0 **** **** **** **** 0 1
|
22707 Saint_Holy_Power 16790403 16790404 ife_holyaura **** **** **** **** **** **** **** **** **** **** 0 0 0 9 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_TEMPLATE_SAINT_HOLY_POWER 5 0 **** **** **** **** 0 1
|
||||||
22708 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
22708 Baelnorn_Marker 16793769 16793770 ife_X2SpAniDed **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_TEMPLATE_BAELNORN_MARKER 5 0 **** **** **** **** 0 1
|
||||||
22709 **WeaponsOfLegacy** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
22709 **WeaponsOfLegacy** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
||||||
22710 BBB_Darkvision 16836478 16836479 is_DarkVis **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 16390 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HOUND_TELEPORT 5 0 **** **** **** **** 0 0
|
22710 BBB_Darkvision 16836478 16836479 is_DarkVis **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 16390 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HOUND_TELEPORT 5 0 **** **** **** **** 0 0
|
||||||
22711 BBB_Longstrider 16836480 16836481 is_longstrider **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 16391 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HOUND_TELEPORT 5 0 **** **** **** **** 0 0
|
22711 BBB_Longstrider 16836480 16836481 is_longstrider **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 16391 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HOUND_TELEPORT 5 0 **** **** **** **** 0 0
|
||||||
@@ -24002,7 +24002,7 @@
|
|||||||
23998 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
23998 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
||||||
23999 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
23999 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1
|
||||||
24000 SkillFocusAlchemy 16847243 424 ife_X2BrewPotion **** **** **** **** **** **** **** **** **** **** **** 1 1 4 **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** FEAT_SKILL_FOCUS_ALCHEMY **** 0 **** **** **** **** **** 1
|
24000 SkillFocusAlchemy 16847243 424 ife_X2BrewPotion **** **** **** **** **** **** **** **** **** **** **** 1 1 4 **** **** **** **** **** 4 **** **** **** **** **** **** **** **** **** **** FEAT_SKILL_FOCUS_ALCHEMY **** 0 **** **** **** **** **** 1
|
||||||
24001 EpicSkillFocusAlchemy 16847245 4063 ife_X2BrewPotion **** **** **** **** **** **** **** **** **** **** **** 1 1 15 **** **** **** **** **** **** **** **** **** **** **** **** 34 20 **** **** FEAT_EPIC_SKILL_FOCUS_ALCHEMY **** 0 **** **** **** **** 1 1
|
24001 EpicSkillFocusAlchemy 16847245 4063 ife_X2BrewPotion **** **** **** **** **** **** **** **** **** **** **** 1 1 15 **** **** **** **** **** 15 **** **** **** **** **** **** 34 20 **** **** FEAT_EPIC_SKILL_FOCUS_ALCHEMY **** 0 **** **** **** **** 1 1
|
||||||
24002 MagicalArtisanMagicArmsAndArmor 16847247 16847257 ife_crftarmarmor **** **** **** **** **** **** **** **** 2926 **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_MAGICAL_ARTISAN_CRAFT_MAGIC_ARMS **** 0 **** **** **** **** **** 1
|
24002 MagicalArtisanMagicArmsAndArmor 16847247 16847257 ife_crftarmarmor **** **** **** **** **** **** **** **** 2926 **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_MAGICAL_ARTISAN_CRAFT_MAGIC_ARMS **** 0 **** **** **** **** **** 1
|
||||||
24003 MagicalArtisanCraftRod 16847248 16847257 ife_craft_rod **** **** **** **** **** **** **** **** 2927 **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_MAGICAL_ARTISAN_CRAFT_ROD **** 0 **** **** **** **** **** 1
|
24003 MagicalArtisanCraftRod 16847248 16847257 ife_craft_rod **** **** **** **** **** **** **** **** 2927 **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_MAGICAL_ARTISAN_CRAFT_ROD **** 0 **** **** **** **** **** 1
|
||||||
24004 MagicalArtisanCraftStaff 16847249 16847257 ife_craft_staff **** **** **** **** **** **** **** **** 2928 **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_MAGICAL_ARTISAN_CRAFT_STAFF **** 0 **** **** **** **** **** 1
|
24004 MagicalArtisanCraftStaff 16847249 16847257 ife_craft_staff **** **** **** **** **** **** **** **** 2928 **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_MAGICAL_ARTISAN_CRAFT_STAFF **** 0 **** **** **** **** **** 1
|
||||||
@@ -24635,8 +24635,8 @@
|
|||||||
24631 FEAT_WEAPON_SPECIALIZATION_SAP 16834165 444 ife_wepspec_sap 4 **** **** **** **** **** **** **** 24607 24423 0 0 0 **** **** **** **** 1 **** 2 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_SPECIALIZATION_SAP 1 **** **** **** **** **** 0 1
|
24631 FEAT_WEAPON_SPECIALIZATION_SAP 16834165 444 ife_wepspec_sap 4 **** **** **** **** **** **** **** 24607 24423 0 0 0 **** **** **** **** 1 **** 2 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_SPECIALIZATION_SAP 1 **** **** **** **** **** 0 1
|
||||||
24632 FEAT_WEAPON_SPECIALIZATION_KATAR 16834174 444 ife_wepspec_ktr 4 **** **** **** **** **** **** **** 24608 24423 0 0 0 **** **** **** **** 1 **** 2 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_SPECIALIZATION_KATAR 1 **** **** **** **** **** 0 1
|
24632 FEAT_WEAPON_SPECIALIZATION_KATAR 16834174 444 ife_wepspec_ktr 4 **** **** **** **** **** **** **** 24608 24423 0 0 0 **** **** **** **** 1 **** 2 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_SPECIALIZATION_KATAR 1 **** **** **** **** **** 0 1
|
||||||
24633 FEAT_WEAPON_SPECIALIZATION_HEAVY_MACE 16834183 444 ife_wepspec_hmc 4 **** **** **** **** **** **** **** 24609 24423 0 0 0 **** **** **** **** 1 **** 2 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_SPECIALIZATION_HAEVY_MACE 1 **** **** **** **** **** 0 1
|
24633 FEAT_WEAPON_SPECIALIZATION_HEAVY_MACE 16834183 444 ife_wepspec_hmc 4 **** **** **** **** **** **** **** 24609 24423 0 0 0 **** **** **** **** 1 **** 2 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_SPECIALIZATION_HAEVY_MACE 1 **** **** **** **** **** 0 1
|
||||||
24634 FEAT_WEAPON_SPECIALIZATION_DBL_SCIMITAR 16834192 444 ife_wepspec_mau 4 **** **** **** **** **** **** **** 24610 24423 0 0 0 **** **** **** **** 1 **** 2 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_SPECIALIZATION_DBL_SCIMITAR 1 **** **** **** **** **** 0 1
|
24634 FEAT_WEAPON_SPECIALIZATION_MAUL 16834192 444 ife_wepspec_mau 4 **** **** **** **** **** **** **** 24610 24423 0 0 0 **** **** **** **** 1 **** 2 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_SPECIALIZATION_DBL_SCIMITAR 1 **** **** **** **** **** 0 1
|
||||||
24635 FEAT_WEAPON_SPECIALIZATION_LIGHT_LANCE 16834201 444 ife_wepspec_dsc 4 **** **** **** **** **** **** **** 24611 24423 0 0 0 **** **** **** **** 1 **** 2 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_SPECIALIZATION_LIGHT_LANCE 1 **** **** **** **** **** 0 1
|
24635 FEAT_WEAPON_SPECIALIZATION_DBL_SCIMITAR 16834201 444 ife_wepspec_dsc 4 **** **** **** **** **** **** **** 24611 24423 0 0 0 **** **** **** **** 1 **** 2 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_SPECIALIZATION_LIGHT_LANCE 1 **** **** **** **** **** 0 1
|
||||||
24636 FEAT_WEAPON_SPECIALIZATION_GOAD 16834210 444 ife_wepspec_goa 4 **** **** **** **** **** **** **** 24612 24423 0 0 0 **** **** **** **** 1 **** 2 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_SPECIALIZATION_GOAD 1 **** **** **** **** **** 0 1
|
24636 FEAT_WEAPON_SPECIALIZATION_GOAD 16834210 444 ife_wepspec_goa 4 **** **** **** **** **** **** **** 24612 24423 0 0 0 **** **** **** **** 1 **** 2 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_SPECIALIZATION_GOAD 1 **** **** **** **** **** 0 1
|
||||||
24637 FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_LANCE 16834112 8456 ife_ews_lnc **** **** **** **** **** **** **** **** 24625 24613 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_LANCE 1 **** **** **** **** **** 1 1
|
24637 FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_LANCE 16834112 8456 ife_ews_lnc **** **** **** **** **** **** **** **** 24625 24613 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_LANCE 1 **** **** **** **** **** 1 1
|
||||||
24638 FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_PICK 16834121 8456 ife_ews_hpck **** **** **** **** **** **** **** **** 24626 24614 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_PICK 1 **** **** **** **** **** 1 1
|
24638 FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_PICK 16834121 8456 ife_ews_hpck **** **** **** **** **** **** **** **** 24626 24614 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_PICK 1 **** **** **** **** **** 1 1
|
||||||
@@ -25601,47 +25601,47 @@
|
|||||||
25597 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25597 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
25598 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25598 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
25599 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25599 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
25600 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25600 FEAT_EPIC_LION_OF_TALISID 16855221 16855222 ife_x2epdruid **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_LION_OF_TALISID 6 **** **** **** **** **** 1 0
|
||||||
25601 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25601 FEAT_LION_OF_TALISID_SPELLCASTING_ARCHIVIST 16855223 16855236 IR_ARCHIVIST **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_LION_OF_TALISID_SPELLCASTING_ARCHIVIST 6 0 1 190 **** **** 0 0
|
||||||
25602 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25602 FEAT_LION_OF_TALISID_SPELLCASTING_CLERIC 16855224 16855236 IR_CLERIC **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_LION_OF_TALISID_SPELLCASTING_CLERIC 6 0 1 2 **** **** 0 0
|
||||||
25603 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25603 FEAT_LION_OF_TALISID_SPELLCASTING_DRUID 16855225 16855236 IR_DRUID **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_LION_OF_TALISID_SPELLCASTING_DRUID 6 0 1 3 **** **** 0 0
|
||||||
25604 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25604 FEAT_LION_OF_TALISID_SPELLCASTING_FAVOURED_SOUL 16855226 16855236 IR_SPELLFIRE **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_LION_OF_TALISID_SPELLCASTING_FAVOURED_SOUL 6 0 1 225 **** **** 0 0
|
||||||
25605 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25605 FEAT_LION_OF_TALISID_SPELLCASTING_HEALER 16855227 16855236 IR_CBTMEDIC **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_LION_OF_TALISID_SPELLCASTING_HEALER 6 0 1 64 **** **** 0 0
|
||||||
25606 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25606 FEAT_LION_OF_TALISID_SPELLCASTING_JOWAW 16855228 16855236 IR_RANGER **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_LION_OF_TALISID_SPELLCASTING_JOWAW 6 0 1 157 **** **** 0 0
|
||||||
25607 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25607 FEAT_LION_OF_TALISID_SPELLCASTING_KOTMC 16855229 16855236 IR_KOTMC **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_LION_OF_TALISID_SPELLCASTING_KOTMC 6 0 1 167 **** **** 0 0
|
||||||
25608 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25608 FEAT_LION_OF_TALISID_SPELLCASTING_NENTYAR_HUNTER 16855230 16855236 IR_RANGER **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_LION_OF_TALISID_SPELLCASTING_NENTYAR_HUNTER 6 0 1 246 **** **** 0 0
|
||||||
25609 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25609 FEAT_LION_OF_TALISID_SPELLCASTING_RANGER 16855231 16855236 IR_RANGER **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_LION_OF_TALISID_SPELLCASTING_RANGER 6 0 1 7 **** **** 0 0
|
||||||
25610 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25610 FEAT_LION_OF_TALISID_SPELLCASTING_OASHAMAN 16855232 16855236 IR_CLERIC **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_LION_OF_TALISID_SPELLCASTING_OASHAMAN 6 0 1 207 **** **** 0 0
|
||||||
25611 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25611 FEAT_LION_OF_TALISID_SPELLCASTING_SOHEI 16855233 16855236 IR_CLERIC **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_LION_OF_TALISID_SPELLCASTING_SOHEI 6 0 1 233 **** **** 0 0
|
||||||
25612 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25612 FEAT_LION_OF_TALISID_SPELLCASTING_SOL 16855234 16855236 IR_PALADIN **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_LION_OF_TALISID_SPELLCASTING_SOL 6 0 1 118 **** **** 0 0
|
||||||
25613 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25613 FEAT_LION_OF_TALISID_SPELLCASTING_SPSHAMAN 16855235 16855236 IR_CLERIC **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_LION_OF_TALISID_SPELLCASTING_SPSHAMAN 6 0 99 172 **** **** 0 0
|
||||||
25614 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25614 FEAT_LOT_LIONS_COURAGE 16855237 16855238 ife_fearless **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0.2 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_LOT_LIONS_COURAGE 6 **** **** **** **** **** 0 1
|
||||||
25615 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25615 FEAT_LOT_LIONS_POUNCE 16855239 16855240 ife_X2GWShp3 **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_LOT_LIONS_POUNCE 5 **** **** **** **** **** 0 1
|
||||||
25616 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25616 FEAT_LOT_LIONS_SWIFTNESS 16855241 16855242 ife_X2BldSpd **** **** **** **** **** **** **** **** **** **** 0 0 0 10 **** 17994 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_LOT_LIONS_SWIFTNESS 6 **** **** **** **** **** 0 0
|
||||||
25617 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25617 FEAT_LOT_LEONALS_ROAR 16855243 16855244 ife_shout **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 17993 **** 1 3 **** 1 **** **** **** **** **** **** **** **** **** FEAT_LOT_LEONALS_ROAR 4 **** **** **** **** **** 0 1
|
||||||
25618 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25618 FEAT_EPIC_VERDANT_LORD 16855251 16855252 ife_x2epdruid **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_VERDANT_LORD 6 **** **** **** **** **** 1 0
|
||||||
25619 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25619 FEAT_VERDANT_LORD_SPELLCASTING_ARCHIVIST 16855253 16855268 IR_ARCHIVIST **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_VERDANT_LORD_SPELLCASTING_ARCHIVIST 6 0 1 190 **** **** 0 0
|
||||||
25620 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25620 FEAT_VERDANT_LORD_SPELLCASTING_CLERIC 16855254 16855268 IR_CLERIC **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_VERDANT_LORD_SPELLCASTING_CLERIC 6 0 1 2 **** **** 0 0
|
||||||
25621 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25621 FEAT_VERDANT_LORD_SPELLCASTING_DRUID 16855255 16855268 IR_DRUID **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_VERDANT_LORD_SPELLCASTING_DRUID 6 0 1 3 **** **** 0 0
|
||||||
25622 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25622 FEAT_VERDANT_LORD_SPELLCASTING_FAVOURED_SOUL 16855256 16855268 IR_SPELLFIRE **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_VERDANT_LORD_SPELLCASTING_FAVOURED_SOUL 6 0 1 225 **** **** 0 0
|
||||||
25623 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25623 FEAT_VERDANT_LORD_SPELLCASTING_HEALER 16855257 16855268 IR_CBTMEDIC **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_VERDANT_LORD_SPELLCASTING_HEALER 6 0 1 64 **** **** 0 0
|
||||||
25624 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25624 FEAT_VERDANT_LORD_SPELLCASTING_JOWAW 16855258 16855268 IR_RANGER **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_VERDANT_LORD_SPELLCASTING_JOWAW 6 0 1 157 **** **** 0 0
|
||||||
25625 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25625 FEAT_VERDANT_LORD_SPELLCASTING_KOTC 16855259 16855268 IR_CHALICE **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_VERDANT_LORD_SPELLCASTING_KOTC 6 0 1 83 **** **** 0 0
|
||||||
25626 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25626 FEAT_VERDANT_LORD_SPELLCASTING_KOTMC 16855260 16855268 IR_KOTMC **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_VERDANT_LORD_SPELLCASTING_KOTMC 6 0 1 167 **** **** 0 0
|
||||||
25627 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25627 FEAT_VERDANT_LORD_SPELLCASTING_NENTYAR_HUNTER 16855261 16855268 IR_RANGER **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_VERDANT_LORD_SPELLCASTING_NENTYAR_HUNTER 6 0 1 246 **** **** 0 0
|
||||||
25628 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25628 FEAT_VERDANT_LORD_SPELLCASTING_PALADIN 16855262 16855268 IR_PALADIN **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_VERDANT_LORD_SPELLCASTING_PALADIN 6 0 1 6 **** **** 0 0
|
||||||
25629 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25629 FEAT_VERDANT_LORD_SPELLCASTING_RANGER 16855263 16855268 IR_RANGER **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_VERDANT_LORD_SPELLCASTING_RANGER 6 0 1 7 **** **** 0 0
|
||||||
25630 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25630 FEAT_VERDANT_LORD_SPELLCASTING_OASHAMAN 16855264 16855268 IR_CLERIC **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_VERDANT_LORD_SPELLCASTING_OASHAMAN 6 0 1 207 **** **** 0 0
|
||||||
25631 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25631 FEAT_VERDANT_LORD_SPELLCASTING_SOHEI 16855265 16855268 IR_CLERIC **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_VERDANT_LORD_SPELLCASTING_SOHEI 6 0 1 233 **** **** 0 0
|
||||||
25632 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25632 FEAT_VERDANT_LORD_SPELLCASTING_SOL 16855266 16855268 IR_PALADIN **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_VERDANT_LORD_SPELLCASTING_SOL 6 0 1 118 **** **** 0 0
|
||||||
25633 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25633 FEAT_VERDANT_LORD_SPELLCASTING_SPSHAMAN 16855267 16855268 IR_CLERIC **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** 125 **** **** **** **** **** **** **** **** **** **** FEAT_VERDANT_LORD_SPELLCASTING_SPSHAMAN 6 0 99 172 **** **** 0 0
|
||||||
25634 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25634 FEAT_VL_EXPERT_INFUSION 16855269 16855270 ife_X2BrewPotion **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_VL_EXPERT_INFUSION 6 0 **** **** **** **** 0 0
|
||||||
25635 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25635 FEAT_VL_SUN_SUSTENANCE 16855271 16855272 ife_sunsust **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_VL_SUN_SUSTENANCE 6 0 **** **** **** **** 0 0
|
||||||
25636 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25636 FEAT_VL_SPONTANEITY 16855273 16855274 IR_DRUID **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_VL_SPONTANEITY 6 0 **** **** **** **** 0 0
|
||||||
25637 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25637 FEAT_VL_PLANT_FACILITY 16855275 16855276 IR_DRUID **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_VL_PLANT_FACILITY 6 0 **** **** **** **** 0 0
|
||||||
25638 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25638 FEAT_VL_WILD_SHAPE_TREANT 16855277 16855278 is_treeshape **** **** **** **** **** **** **** **** **** **** 0 0 0 10 1 17989 **** 0.5 1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_VL_WILD_SHAPE_TREANT 6 0 **** **** **** **** 0 1
|
||||||
25639 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25639 FEAT_VL_ANIMATE_TREE 16855279 16855280 is_treeshape **** **** **** **** **** **** **** **** **** **** 0 0 0 15 1 17990 **** 0.5 1 **** **** **** **** **** **** **** **** **** **** **** FEAT_VL_ANIMATE_TREE 6 0 **** **** **** **** 0 1
|
||||||
25640 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25640 FEAT_VL_GAEAS_EMBRACE 16855281 16855282 IR_DRUID **** **** **** **** **** **** **** **** **** **** 0 0 0 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_VL_GAEAS_EMBRACE 6 0 **** **** **** **** 0 0
|
||||||
25641 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25641 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
25642 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25642 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
25643 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25643 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@@ -25901,53 +25901,53 @@
|
|||||||
25897 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25897 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
25898 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25898 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
25899 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25899 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
25900 "## START PRC8 HIDDEN TALENT FEATS ##" **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25900 FEAT_HIDDEN_TALENT 16990417 16990418 ife_psifeats **** **** **** **** **** **** 11 **** **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT 6 0 **** **** 1 **** 0 1
|
||||||
25901 FEAT_HIDDEN_TALENT_BIOFEEDBACK 16990419 16823714 fot_protmagweap 999 **** **** **** **** **** 11 **** **** **** 0 0 1 12 **** 14479 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_BIOFEEDBACK 6 0 **** **** 1 **** 0 0
|
25901 FEAT_HIDDEN_TALENT_BIOFEEDBACK 16990419 16823714 fot_protmagweap 999 **** **** **** **** **** 11 **** **** **** 0 0 0 12 **** 14479 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_BIOFEEDBACK 6 0 **** **** **** **** 0 0
|
||||||
25902 FEAT_HIDDEN_TALENT_BITE_WOLF 16990420 16824105 fot_bitewolf 999 **** **** **** **** **** 11 **** **** **** 0 0 1 10 **** 14421 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_BITE_WOLF 6 0 **** **** 1 **** 0 0
|
25902 FEAT_HIDDEN_TALENT_BITE_WOLF 16990420 16824105 fot_bitewolf 999 **** **** **** **** **** 11 **** **** **** 0 0 0 10 **** 14421 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_BITE_WOLF 6 0 **** **** **** **** 0 0
|
||||||
25903 FEAT_HIDDEN_TALENT_BOLT 16990421 16823684 fot_minorseq 999 **** **** **** **** **** 11 **** **** **** 0 0 1 12 **** 14422 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_BOLT 6 0 **** **** 1 **** 0 0
|
25903 FEAT_HIDDEN_TALENT_BOLT 16990421 16823684 fot_minorseq 999 **** **** **** **** **** 11 **** **** **** 0 0 0 12 **** 14422 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_BOLT 6 0 **** **** **** **** 0 0
|
||||||
25904 FEAT_HIDDEN_TALENT_BURST 16990422 16823921 fot_exped 999 **** **** **** **** **** 11 **** **** **** 0 0 1 10 **** 14423 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_BURST 6 0 **** **** 1 **** 0 0
|
25904 FEAT_HIDDEN_TALENT_BURST 16990422 16823921 fot_exped 999 **** **** **** **** **** 11 **** **** **** 0 0 0 10 **** 14423 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_BURST 6 0 **** **** **** **** 0 0
|
||||||
25905 FEAT_HIDDEN_TALENT_CALLTOMIND 16990423 16823630 fot_knowalign 999 **** **** **** **** **** 11 **** **** **** 0 0 1 **** **** 14424 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CALLTOMIND 6 0 **** **** 1 **** 0 0
|
25905 FEAT_HIDDEN_TALENT_CALLTOMIND 16990423 16823630 fot_knowalign 999 **** **** **** **** **** 11 **** **** **** 0 0 0 **** **** 14424 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CALLTOMIND 6 0 **** **** **** **** 0 0
|
||||||
25906 FEAT_HIDDEN_TALENT_CALL_WEAPONRY 16990424 16824111 fot_seeksword 999 **** **** **** **** **** 11 **** **** **** 0 0 1 9 **** 14425 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CALL_WEAPONRY 6 0 **** **** 1 **** 0 0
|
25906 FEAT_HIDDEN_TALENT_CALL_WEAPONRY 16990424 16824111 fot_seeksword 999 **** **** **** **** **** 11 **** **** **** 0 0 0 9 **** 14425 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CALL_WEAPONRY 6 0 **** **** **** **** 0 0
|
||||||
25907 FEAT_HIDDEN_TALENT_CHAMELEON 16990425 16823642 fot_chameleon 999 **** **** **** **** **** 11 **** **** **** 0 0 1 10 **** 14482 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CHAMELEON 6 0 **** **** 1 **** 0 0
|
25907 FEAT_HIDDEN_TALENT_CHAMELEON 16990425 16823642 fot_chameleon 999 **** **** **** **** **** 11 **** **** **** 0 0 0 10 **** 14482 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CHAMELEON 6 0 **** **** **** **** 0 0
|
||||||
25908 FEAT_HIDDEN_TALENT_CLAWS_BEAST 16990426 16824107 fot_clawbeast 999 **** **** **** **** **** 11 **** **** **** 0 0 1 10 **** 14427 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CLAWS_BEAST 6 0 **** **** 1 **** 0 0
|
25908 FEAT_HIDDEN_TALENT_CLAWS_BEAST 16990426 16824107 fot_clawbeast 999 **** **** **** **** **** 11 **** **** **** 0 0 0 10 **** 14427 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CLAWS_BEAST 6 0 **** **** **** **** 0 0
|
||||||
25909 FEAT_HIDDEN_TALENT_COMPRESSION 16990427 16824120 fot_compress 999 **** **** **** **** **** 11 **** **** **** 0 0 1 9 **** 14428 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_COMPRESSION 6 0 **** **** 1 **** 0 0
|
25909 FEAT_HIDDEN_TALENT_COMPRESSION 16990427 16824120 fot_compress 999 **** **** **** **** **** 11 **** **** **** 0 0 0 9 **** 14428 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_COMPRESSION 6 0 **** **** **** **** 0 0
|
||||||
25910 FEAT_HIDDEN_TALENT_CONCEALTHOUGHT 16990428 16823759 fot_nondetect 999 **** **** **** **** **** 11 **** **** **** 0 0 1 7 **** 14429 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CONCEALTHOUGHT 6 0 **** **** 1 **** 0 0
|
25910 FEAT_HIDDEN_TALENT_CONCEALTHOUGHT 16990428 16823759 fot_nondetect 999 **** **** **** **** **** 11 **** **** **** 0 0 0 7 **** 14429 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CONCEALTHOUGHT 6 0 **** **** **** **** 0 0
|
||||||
25911 FEAT_HIDDEN_TALENT_CREATESOUND 16990429 16823869 fot_vocal 999 **** **** **** **** **** 11 **** **** **** 0 0 1 11 **** 14431 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CREATESOUND 6 1 **** **** 1 **** 0 0
|
25911 FEAT_HIDDEN_TALENT_CREATESOUND 16990429 16823869 fot_vocal 999 **** **** **** **** **** 11 **** **** **** 0 0 0 11 **** 14431 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CREATESOUND 6 1 **** **** **** **** 0 0
|
||||||
25912 FEAT_HIDDEN_TALENT_CRYSTALSHARD 16990430 16823632 fot_icestorm 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14432 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CRYSTALSHARD 6 1 **** **** 1 **** 0 0
|
25912 FEAT_HIDDEN_TALENT_CRYSTALSHARD 16990430 16823632 fot_icestorm 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14432 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_CRYSTALSHARD 6 1 **** **** **** **** 0 0
|
||||||
25913 FEAT_HIDDEN_TALENT_DAZE 16990431 16823650 fot_invisstalk 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14433 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DAZE 6 1 **** **** 1 **** 0 0
|
25913 FEAT_HIDDEN_TALENT_DAZE 16990431 16823650 fot_invisstalk 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14433 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DAZE 6 1 **** **** **** **** 0 0
|
||||||
25914 FEAT_HIDDEN_TALENT_DECELERATION 16990432 16823652 fot_Slow 999 **** **** **** **** **** 11 **** **** **** 0 0 1 1 **** 14434 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DECELERATION 6 1 **** **** 1 **** 0 0
|
25914 FEAT_HIDDEN_TALENT_DECELERATION 16990432 16823652 fot_Slow 999 **** **** **** **** **** 11 **** **** **** 0 0 0 1 **** 14434 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DECELERATION 6 1 **** **** **** **** 0 0
|
||||||
25915 FEAT_HIDDEN_TALENT_DEFPRECOG 16990433 16823708 fot_shield 999 **** **** **** **** **** 11 **** **** **** 0 0 1 13 **** 14435 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DEFPRECOG 6 0 **** **** 1 **** 0 0
|
25915 FEAT_HIDDEN_TALENT_DEFPRECOG 16990433 16823708 fot_shield 999 **** **** **** **** **** 11 **** **** **** 0 0 0 13 **** 14435 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DEFPRECOG 6 0 **** **** **** **** 0 0
|
||||||
25916 FEAT_HIDDEN_TALENT_DEMORALIZE 16990434 16823686 fot_lowerres 999 **** **** **** **** **** 11 **** **** **** 0 0 1 8 **** 14436 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DEMORALIZE 6 0 **** **** 1 **** 0 0
|
25916 FEAT_HIDDEN_TALENT_DEMORALIZE 16990434 16823686 fot_lowerres 999 **** **** **** **** **** 11 **** **** **** 0 0 0 8 **** 14436 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DEMORALIZE 6 0 **** **** **** **** 0 0
|
||||||
25917 FEAT_HIDDEN_TALENT_DISABLE 16990435 16823688 fot_enfeeble 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14438 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DISABLE 6 1 **** **** 1 **** 0 0
|
25917 FEAT_HIDDEN_TALENT_DISABLE 16990435 16823688 fot_enfeeble 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14438 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DISABLE 6 1 **** **** **** **** 0 0
|
||||||
25918 FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH 16990436 16823656 fot_chilltouch 999 **** **** **** **** **** 11 **** **** **** 0 0 1 3 **** 14439 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH 6 1 **** **** 1 **** 0 0
|
25918 FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH 16990436 16823656 fot_chilltouch 999 **** **** **** **** **** 11 **** **** **** 0 0 0 3 **** 14439 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH 6 1 **** **** **** **** 0 0
|
||||||
25919 FEAT_HIDDEN_TALENT_DISTRACT 16990437 16823690 fot_powerblind 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14440 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DISTRACT 6 1 **** **** 1 **** 0 0
|
25919 FEAT_HIDDEN_TALENT_DISTRACT 16990437 16823690 fot_powerblind 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14440 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_DISTRACT 6 1 **** **** **** **** 0 0
|
||||||
25920 FEAT_HIDDEN_TALENT_ELF_SIGHT 16990438 16823720 fot_infravis 999 **** **** **** **** **** 11 **** **** **** 0 0 1 10 **** 14370 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_ELF_SIGHT 6 0 **** **** 1 **** 0 0
|
25920 FEAT_HIDDEN_TALENT_ELF_SIGHT 16990438 16823720 fot_infravis 999 **** **** **** **** **** 11 **** **** **** 0 0 0 10 **** 14370 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_ELF_SIGHT 6 0 **** **** **** **** 0 0
|
||||||
25921 FEAT_HIDDEN_TALENT_EMPATHY 16990439 16823761 fot_friends 999 **** **** **** **** **** 11 **** **** **** 0 0 1 **** **** 14441 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_EMPATHY 6 0 **** **** 1 **** 0 0
|
25921 FEAT_HIDDEN_TALENT_EMPATHY 16990439 16823761 fot_friends 999 **** **** **** **** **** 11 **** **** **** 0 0 0 **** **** 14441 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_EMPATHY 6 0 **** **** **** **** 0 0
|
||||||
25922 FEAT_HIDDEN_TALENT_EMPTYMIND 16990440 16823692 fot_detillusion 999 **** **** **** **** **** 11 **** **** **** 0 0 1 9 **** 14442 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_EMPTYMIND 6 0 **** **** 1 **** 0 0
|
25922 FEAT_HIDDEN_TALENT_EMPTYMIND 16990440 16823692 fot_detillusion 999 **** **** **** **** **** 11 **** **** **** 0 0 0 9 **** 14442 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_EMPTYMIND 6 0 **** **** **** **** 0 0
|
||||||
25923 FEAT_HIDDEN_TALENT_ENERGYRAY 16990441 16823694 fot_flamearrow 999 **** **** **** **** **** 11 **** **** **** 0 0 1 **** **** 14443 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_ENERGYRAY 6 1 **** **** 1 **** 0 0
|
25923 FEAT_HIDDEN_TALENT_ENERGYRAY 16990441 16823694 fot_flamearrow 999 **** **** **** **** **** 11 **** **** **** 0 0 0 **** **** 14443 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_ENERGYRAY 6 1 **** **** **** **** 0 0
|
||||||
25924 FEAT_HIDDEN_TALENT_ENTANGLE 16990442 16823700 fot_entangle 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14448 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_ENTANGLE 6 1 **** **** 1 **** 0 0
|
25924 FEAT_HIDDEN_TALENT_ENTANGLE 16990442 16823700 fot_entangle 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14448 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_ENTANGLE 6 1 **** **** **** **** 0 0
|
||||||
25925 FEAT_HIDDEN_TALENT_EXPANSION 16990443 16824128 fot_strength 999 **** **** **** **** **** 11 **** **** **** 0 0 1 9 **** 14449 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_EXPANSION 6 0 **** **** 1 **** 0 0
|
25925 FEAT_HIDDEN_TALENT_EXPANSION 16990443 16824128 fot_strength 999 **** **** **** **** **** 11 **** **** **** 0 0 0 9 **** 14449 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_EXPANSION 6 0 **** **** **** **** 0 0
|
||||||
25926 FEAT_HIDDEN_TALENT_FARHAND 16990444 16823763 fot_magicshort 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14450 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_FARHAND 6 0 **** **** 1 **** 0 0
|
25926 FEAT_HIDDEN_TALENT_FARHAND 16990444 16823763 fot_magicshort 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14450 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_FARHAND 6 0 **** **** **** **** 0 0
|
||||||
25927 FEAT_HIDDEN_TALENT_FORCESCREEN 16990445 16823658 fot_polyself 999 **** **** **** **** **** 11 **** **** **** 0 0 1 13 **** 14451 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_FORCESCREEN 6 0 **** **** 1 **** 0 0
|
25927 FEAT_HIDDEN_TALENT_FORCESCREEN 16990445 16823658 fot_polyself 999 **** **** **** **** **** 11 **** **** **** 0 0 0 13 **** 14451 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_FORCESCREEN 6 0 **** **** **** **** 0 0
|
||||||
25928 FEAT_HIDDEN_TALENT_GREASE 16990446 16823702 fot_Grease 999 **** **** **** **** **** 11 **** **** **** 0 0 1 11 **** 14452 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_GREASE 6 1 **** **** 1 **** 0 0
|
25928 FEAT_HIDDEN_TALENT_GREASE 16990446 16823702 fot_Grease 999 **** **** **** **** **** 11 **** **** **** 0 0 0 11 **** 14452 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_GREASE 6 1 **** **** **** **** 0 0
|
||||||
25929 FEAT_HIDDEN_TALENT_HAMMER 16990447 16823704 fot_hammer 999 **** **** **** **** **** 11 **** **** **** 0 0 1 10 **** 14453 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_HAMMER 6 1 **** **** 1 **** 0 0
|
25929 FEAT_HIDDEN_TALENT_HAMMER 16990447 16823704 fot_hammer 999 **** **** **** **** **** 11 **** **** **** 0 0 0 10 **** 14453 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_HAMMER 6 1 **** **** **** **** 0 0
|
||||||
25930 FEAT_HIDDEN_TALENT_INERTIALARMOUR 16990448 16823660 fot_armor 999 **** **** **** **** **** 11 **** **** **** 0 0 1 9 **** 14454 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_INERTIALARMOUR 6 0 **** **** 1 **** 0 0
|
25930 FEAT_HIDDEN_TALENT_INERTIALARMOUR 16990448 16823660 fot_armor 999 **** **** **** **** **** 11 **** **** **** 0 0 0 9 **** 14454 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_INERTIALARMOUR 6 0 **** **** **** **** 0 0
|
||||||
25931 FEAT_HIDDEN_TALENT_MATTERAGITATION 16990449 16823765 fot_elementfire 999 **** **** **** **** **** 11 **** **** **** 0 0 1 3 **** 14455 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_MATTERAGITATION 6 1 **** **** 1 **** 0 0
|
25931 FEAT_HIDDEN_TALENT_MATTERAGITATION 16990449 16823765 fot_elementfire 999 **** **** **** **** **** 11 **** **** **** 0 0 0 3 **** 14455 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_MATTERAGITATION 6 1 **** **** **** **** 0 0
|
||||||
25932 FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW 16990450 16824134 fot_metaclaw 999 **** **** **** **** **** 11 **** **** **** 0 0 1 9 **** 14456 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW 6 0 **** **** 1 **** 0 0
|
25932 FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW 16990450 16824134 fot_metaclaw 999 **** **** **** **** **** 11 **** **** **** 0 0 0 9 **** 14456 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW 6 0 **** **** **** **** 0 0
|
||||||
25933 FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON 16990451 16824136 fot_protnormal 999 **** **** **** **** **** 11 **** **** **** 0 0 1 9 **** 14457 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON 6 0 **** **** 1 **** 0 0
|
25933 FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON 16990451 16824136 fot_protnormal 999 **** **** **** **** **** 11 **** **** **** 0 0 0 9 **** 14457 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON 6 0 **** **** **** **** 0 0
|
||||||
25934 FEAT_HIDDEN_TALENT_MINDTHRUST 16990452 16823615 fot_skulltrap 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14458 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_MINDTHRUST 6 1 **** **** 1 **** 0 0
|
25934 FEAT_HIDDEN_TALENT_MINDTHRUST 16990452 16823615 fot_skulltrap 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14458 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_MINDTHRUST 6 1 **** **** **** **** 0 0
|
||||||
25935 FEAT_HIDDEN_TALENT_MYLIGHT 16990453 16823706 fot_dawn 999 **** **** **** **** **** 11 **** **** **** 0 0 1 **** **** 14459 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_MYLIGHT 6 0 **** **** 1 **** 0 0
|
25935 FEAT_HIDDEN_TALENT_MYLIGHT 16990453 16823706 fot_dawn 999 **** **** **** **** **** 11 **** **** **** 0 0 0 **** **** 14459 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_MYLIGHT 6 0 **** **** **** **** 0 0
|
||||||
25936 FEAT_HIDDEN_TALENT_OFFPRECOG 16990454 16823710 fot_snare 999 **** **** **** **** **** 11 **** **** **** 0 0 1 9 **** 14460 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_OFFPRECOG 6 0 **** **** 1 **** 0 0
|
25936 FEAT_HIDDEN_TALENT_OFFPRECOG 16990454 16823710 fot_snare 999 **** **** **** **** **** 11 **** **** **** 0 0 0 9 **** 14460 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_OFFPRECOG 6 0 **** **** **** **** 0 0
|
||||||
25937 FEAT_HIDDEN_TALENT_OFFPRESC 16990455 16823712 fot_sols 999 **** **** **** **** **** 11 **** **** **** 0 0 1 9 **** 14461 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_OFFPRESC 6 0 **** **** 1 **** 0 0
|
25937 FEAT_HIDDEN_TALENT_OFFPRESC 16990455 16823712 fot_sols 999 **** **** **** **** **** 11 **** **** **** 0 0 0 9 **** 14461 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_OFFPRESC 6 0 **** **** **** **** 0 0
|
||||||
25938 FEAT_HIDDEN_TALENT_PREVENOM 16990456 16824142 fot_grmalison 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14468 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_PREVENOM 6 0 **** **** 1 **** 0 0
|
25938 FEAT_HIDDEN_TALENT_PREVENOM 16990456 16824142 fot_grmalison 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14468 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_PREVENOM 6 0 **** **** **** **** 0 0
|
||||||
25939 FEAT_HIDDEN_TALENT_PREVENOM_WEAPON 16990457 16824144 fot_prevnmw 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14469 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_PREVENOM_WEAPON 6 0 **** **** 1 **** 0 0
|
25939 FEAT_HIDDEN_TALENT_PREVENOM_WEAPON 16990457 16824144 fot_prevnmw 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14469 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_PREVENOM_WEAPON 6 0 **** **** **** **** 0 0
|
||||||
25940 FEAT_HIDDEN_TALENT_SKATE 16990458 16823767 fot_haste 999 **** **** **** **** **** 11 **** **** **** 0 0 1 10 **** 14470 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_SKATE 6 0 **** **** 1 **** 0 0
|
25940 FEAT_HIDDEN_TALENT_SKATE 16990458 16823767 fot_haste 999 **** **** **** **** **** 11 **** **** **** 0 0 0 10 **** 14470 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_SKATE 6 0 **** **** **** **** 0 0
|
||||||
25941 FEAT_HIDDEN_TALENT_STOMP 16990459 16823682 fot_stomp 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14471 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_STOMP 6 1 **** **** 1 **** 0 0
|
25941 FEAT_HIDDEN_TALENT_STOMP 16990459 16823682 fot_stomp 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14471 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_STOMP 6 1 **** **** **** **** 0 0
|
||||||
25942 FEAT_HIDDEN_TALENT_SYNESTHETE 16990460 16823755 fot_physmirror 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14472 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_SYNESTHETE 6 0 **** **** 1 **** 0 0
|
25942 FEAT_HIDDEN_TALENT_SYNESTHETE 16990460 16823755 fot_physmirror 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14472 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_SYNESTHETE 6 0 **** **** **** **** 0 0
|
||||||
25943 FEAT_HIDDEN_TALENT_TELEMPATHICPRO 16990461 16823769 fot_charmanim 999 **** **** **** **** **** 11 **** **** **** 0 0 1 2 **** 14473 **** **** **** 120 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_TELEMPATHICPRO 6 0 **** **** 1 **** 0 0
|
25943 FEAT_HIDDEN_TALENT_TELEMPATHICPRO 16990461 16823769 fot_charmanim 999 **** **** **** **** **** 11 **** **** **** 0 0 0 2 **** 14473 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_TELEMPATHICPRO 6 0 **** **** **** **** 0 0
|
||||||
25944 FEAT_HIDDEN_TALENT_THICKSKIN 16990462 16823670 fot_barkskin 999 **** **** **** **** **** 11 **** **** **** 0 0 1 13 **** 14474 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_THICKSKIN 6 0 **** **** 1 **** 0 0
|
25944 FEAT_HIDDEN_TALENT_THICKSKIN 16990462 16823670 fot_barkskin 999 **** **** **** **** **** 11 **** **** **** 0 0 0 13 **** 14474 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_THICKSKIN 6 0 **** **** **** **** 0 0
|
||||||
25945 FEAT_HIDDEN_TALENT_VIGOR 16990463 16823672 fot_horror 999 **** **** **** **** **** 11 **** **** **** 0 0 1 9 **** 14475 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_VIGOR 6 0 **** **** 1 **** 0 0
|
25945 FEAT_HIDDEN_TALENT_VIGOR 16990463 16823672 fot_horror 999 **** **** **** **** **** 11 **** **** **** 0 0 0 9 **** 14475 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_VIGOR 6 0 **** **** **** **** 0 0
|
||||||
25946 FEAT_HIDDEN_TALENT_GRIP_IRON 16990464 16790301 fot_metaclaw 999 **** **** **** **** **** 11 **** **** **** 0 0 1 10 **** 15686 **** **** **** 120 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_GRIP_IRON 6 0 **** **** 1 **** 0 0
|
25946 FEAT_HIDDEN_TALENT_GRIP_IRON 16990464 16790301 fot_metaclaw 999 **** **** **** **** **** 11 **** **** **** 0 0 0 10 **** 15686 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_HIDDEN_TALENT_GRIP_IRON 6 0 **** **** **** **** 0 0
|
||||||
25947 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25947 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
25948 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25948 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
25949 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25949 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@@ -25961,10 +25961,10 @@
|
|||||||
25957 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25957 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
25958 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25958 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
25959 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25959 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
25960 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25960 FEAT_CREATE_INFUSION 16989216 16989217 ife_X2BrewPotion **** **** **** **** **** **** **** 3 **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** 7 4 **** **** FEAT_CREATE_INFUSION 4 0 **** **** **** **** 0 1
|
||||||
25961 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25961 FEAT_MAGICAL_ARTISAN_CREATE_INFUSION 16989218 16847257 ife_X2BrewPotion **** **** **** **** **** **** **** **** 25960 **** 0 0 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_MAGICAL_ARTISAN_CREATE_INFUSION **** 0 **** **** **** **** 0 1
|
||||||
25962 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25962 FEAT_CRAFT_SCEPTER 16989396 16989397 ife_craft_sceptr **** **** **** **** **** **** **** 9 **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** 7 4 **** **** FEAT_CRAFT_SCEPTER 4 0 **** **** **** **** 0 1
|
||||||
25963 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25963 FEAT_MAGICAL_ARTISAN_CRAFT_SCEPTER 16989398 16847257 ife_craft_sceptr **** **** **** **** **** **** **** **** 25962 **** 0 0 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_MAGICAL_ARTISAN_CRAFT_SCEPTER **** 0 **** **** **** **** 0 1
|
||||||
25964 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25964 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
25965 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25965 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
25966 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25966 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@@ -25991,11 +25991,11 @@
|
|||||||
25987 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25987 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
25988 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25988 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
25989 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25989 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
25990 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25990 FEAT_INTRINSIC_ARMOR 16854438 16854439 ife_darkvis **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_INTRINSIC_ARMOR 6 **** **** **** **** **** 0 1
|
||||||
25991 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25991 FEAT_INTRINSIC_WEAPON 16854440 16854441 ife_darkvis **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 0 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_INTRINSIC_WEAPON 6 **** **** **** **** **** 0 1
|
||||||
25992 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25992 FEAT_PLANT_DEFIANCE 16990318 16990319 id_plant **** **** **** **** **** **** **** **** **** **** 0 0 1 **** 1 17991 **** 0.5 -1 **** 1 198 374 23580 **** **** **** **** **** **** FEAT_PLANT_DEFIANCE 6 **** **** **** **** **** 0 1
|
||||||
25993 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25993 FEAT_PLANT_CONTROL 16990320 16990321 id_plant **** **** **** **** **** **** **** **** 25992 **** 0 0 1 **** 1 17992 **** 0.5 -1 **** 1 198 374 23580 **** **** **** **** **** **** FEAT_PLANT_CONTROL 6 **** **** **** **** **** 0 1
|
||||||
25994 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
25994 FEAT_FAV_COMPANIONS 16990316 16990317 ife_servheaven **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** 17995 **** **** 1 97 1 **** **** **** **** **** **** **** **** **** FEAT_FAV_COMPANIONS 2 **** **** **** **** **** 0 1
|
||||||
25995 FEAT_EPIC_SWARM_OF_ARROWS 16990308 16990309 ife_X1HailArr **** **** 23 **** **** **** **** **** 27 30 0 0 1 2 **** 17996 **** 1 **** **** 1 101 102 **** **** **** **** **** **** **** FEAT_EPIC_SWARM_OF_ARROWS 5 0 **** **** **** **** 1 1
|
25995 FEAT_EPIC_SWARM_OF_ARROWS 16990308 16990309 ife_X1HailArr **** **** 23 **** **** **** **** **** 27 30 0 0 1 2 **** 17996 **** 1 **** **** 1 101 102 **** **** **** **** **** **** **** FEAT_EPIC_SWARM_OF_ARROWS 5 0 **** **** **** **** 1 1
|
||||||
25996 FEAT_EPIC_UP_PRIEST 16835620 16835621 ife_X2EpicChar **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_UR_PRIEST 6 **** **** **** **** **** 1 0
|
25996 FEAT_EPIC_UP_PRIEST 16835620 16835621 ife_X2EpicChar **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_UR_PRIEST 6 **** **** **** **** **** 1 0
|
||||||
25997 FEAT_INVESTIGATOR 16990414 16990415 ife_alertness **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_INVESTIGATOR 5 **** **** **** **** **** 0 1
|
25997 FEAT_INVESTIGATOR 16990414 16990415 ife_alertness **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_INVESTIGATOR 5 **** **** **** **** **** 0 1
|
||||||
@@ -26003,13 +26003,13 @@
|
|||||||
25999 FEAT_MARTIAL_STALKER 16990314 16990315 IR_NINJA **** **** **** **** **** **** **** **** 2488 45 0 0 1 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_MARTIAL_STALKER 5 0 **** **** **** **** 0 0
|
25999 FEAT_MARTIAL_STALKER 16990314 16990315 IR_NINJA **** **** **** **** **** **** **** **** 2488 45 0 0 1 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_MARTIAL_STALKER 5 0 **** **** **** **** 0 0
|
||||||
26000 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
26000 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
26001 Bullybasher_GiantBearing 16977316 16977317 is_giantbearing **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 16553 **** 0.5 **** **** 1 **** **** **** **** **** **** **** **** **** WOL_BULLY_GIANT 6 0 **** **** **** **** 0 0
|
26001 Bullybasher_GiantBearing 16977316 16977317 is_giantbearing **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 16553 **** 0.5 **** **** 1 **** **** **** **** **** **** **** **** **** WOL_BULLY_GIANT 6 0 **** **** **** **** 0 0
|
||||||
26002 FEAT_VOWOFPOVERTY 16977318 16977319 ife_sacredvow **** **** **** **** **** **** **** **** 3388 **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_VOWOFPOVERTY 6 **** **** **** **** **** 0 0
|
26002 FEAT_VOWOFPOVERTY 16977318 16977319 ife_sacredvow **** **** **** **** **** **** **** **** 3388 **** 0 0 1 **** **** **** **** 1 **** 97 **** **** **** **** **** **** **** **** **** **** FEAT_VOWOFPOVERTY 6 **** **** **** **** **** 0 0
|
||||||
26003 FEAT_SANCTIFYKISTRIKE 16990535 16990536 ife_kistrike **** **** **** **** **** **** 15 **** 21 213 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SANCTIFYKISTRIKE 6 **** **** **** **** **** 0 0
|
26003 FEAT_SANCTIFYKISTRIKE 16990535 16990536 ife_kistrike **** **** **** **** **** **** 15 **** 21 213 0 0 1 **** **** **** **** 1 **** 97 **** **** **** **** **** **** **** **** **** **** FEAT_SANCTIFYKISTRIKE 6 **** **** **** **** **** 0 0
|
||||||
26004 FEAT_HOLYKISTRIKE 16990537 16990538 ife_kistrike **** **** **** **** **** **** 15 **** 21 26002 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_HOLYKISTRIKE 6 **** **** **** **** **** 0 0
|
26004 FEAT_HOLYKISTRIKE 16990537 16990538 ife_kistrike **** **** **** **** **** **** 15 **** 21 26003 0 0 1 **** **** **** **** 1 **** 97 **** **** **** **** **** **** **** **** **** **** FEAT_HOLYKISTRIKE 6 **** **** **** **** **** 0 0
|
||||||
26005 FEAT_FISTOFHEAVENS 16990539 16990540 ife_kistrike **** **** **** **** 15 **** **** **** 21 26002 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_FISTOFHEAVENS 6 **** **** **** **** **** 0 0
|
26005 FEAT_FISTOFHEAVENS 16990539 16990540 ife_kistrike **** **** **** **** 15 **** **** **** 39 26003 0 0 1 **** **** **** **** 1 **** 97 **** **** **** **** **** **** **** **** **** **** FEAT_FISTOFHEAVENS 6 **** **** **** **** **** 0 0
|
||||||
26006 FEAT_VOWABSTINENCE 16990541 16990542 ife_sacredvow **** **** **** **** **** **** **** **** 3388 **** 0 0 1 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_VOWABSTINENCE 6 **** **** **** **** **** 0 0
|
26006 FEAT_VOWABSTINENCE 16990541 16990542 ife_sacredvow **** **** **** **** **** **** **** **** 3388 **** 0 0 1 **** **** **** **** 0.5 **** 97 **** **** **** **** **** **** **** **** **** **** FEAT_VOWABSTINENCE 6 **** **** **** **** **** 0 0
|
||||||
26007 FEAT_VOWCHASTITY 16990543 16990544 ife_sacredvow **** **** **** **** **** **** **** **** 3388 **** 0 0 1 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_VOWCHASTITY 6 **** **** **** **** **** 0 0
|
26007 FEAT_VOWCHASTITY 16990543 16990544 ife_sacredvow **** **** **** **** **** **** **** **** 3388 **** 0 0 1 **** **** **** **** 0.5 **** 97 **** **** **** **** **** **** **** **** **** **** FEAT_VOWCHASTITY 6 **** **** **** **** **** 0 0
|
||||||
26008 FEAT_GIFTOFFAITH 16990545 16990546 ife_sacredvow **** **** **** **** 13 **** **** **** **** **** 0 0 1 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_GIFTOFFAITH 6 **** **** **** **** **** 0 0
|
26008 FEAT_GIFTOFFAITH 16990545 16990546 ife_sacredvow **** **** **** **** 13 **** **** **** **** **** 0 0 1 **** **** **** **** 0.5 **** 97 **** **** **** **** **** **** **** **** **** **** FEAT_GIFTOFFAITH 6 **** **** **** **** **** 0 0
|
||||||
26009 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
26009 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
26010 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
26010 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
26011 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
26011 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
|||||||
@@ -137,3 +137,866 @@
|
|||||||
133 Fighter_Epic_Fiend_Vrock 90428 90429 4 STR 1000 **** **** 0 0 **** PackFTSumEFS PackSKSumEFS **** **** ****
|
133 Fighter_Epic_Fiend_Vrock 90428 90429 4 STR 1000 **** **** 0 0 **** PackFTSumEFS PackSKSumEFS **** **** ****
|
||||||
134 Fighter_Epic_Fiend_Cornugon 17027206 17027207 4 STR 1000 **** **** 0 0 **** PackFTSumEFS PackSKSumEFS **** **** ****
|
134 Fighter_Epic_Fiend_Cornugon 17027206 17027207 4 STR 1000 **** **** 0 0 **** PackFTSumEFS PackSKSumEFS **** **** ****
|
||||||
135 Fighter_Epic_Fiend_Yugoloth 17027208 17027209 4 STR 1000 **** **** 0 0 **** PackFTSumEFS PackSKSumEFS **** **** ****
|
135 Fighter_Epic_Fiend_Yugoloth 17027208 17027209 4 STR 1000 **** **** 0 0 **** PackFTSumEFS PackSKSumEFS **** **** ****
|
||||||
|
136 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
137 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
138 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
139 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
140 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
141 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
142 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
143 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
144 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
145 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
146 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
147 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
148 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
149 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
150 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
151 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
152 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
153 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
154 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
155 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
156 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
157 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
158 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
159 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
160 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
161 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
162 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
163 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
164 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
165 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
166 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
167 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
168 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
169 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
170 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
171 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
172 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
173 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
174 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
175 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
176 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
177 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
178 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
179 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
180 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
181 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
182 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
183 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
184 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
185 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
186 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
187 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
188 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
189 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
190 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
191 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
192 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
193 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
194 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
195 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
196 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
197 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
198 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
199 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
200 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
201 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
202 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
203 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
204 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
205 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
206 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
207 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
208 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
209 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
210 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
211 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
212 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
213 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
214 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
215 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
216 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
217 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
218 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
219 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
220 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
221 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
222 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
223 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
224 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
225 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
226 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
227 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
228 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
229 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
230 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
231 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
232 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
233 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
234 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
235 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
236 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
237 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
238 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
239 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
240 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
241 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
242 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
243 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
244 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
245 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
246 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
247 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
248 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
249 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
250 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
251 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
252 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
253 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
254 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
255 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
256 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
257 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
258 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
259 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
260 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
261 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
262 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
263 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
264 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
265 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
266 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
267 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
268 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
269 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
270 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
271 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
272 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
273 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
274 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
275 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
276 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
277 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
278 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
279 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
280 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
281 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
282 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
283 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
284 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
285 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
286 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
287 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
288 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
289 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
290 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
291 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
292 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
293 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
294 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
295 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
296 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
297 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
298 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
299 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
300 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
301 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
302 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
303 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
304 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
305 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
306 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
307 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
308 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
309 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
310 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
311 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
312 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
313 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
314 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
315 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
316 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
317 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
318 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
319 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
320 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
321 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
322 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
323 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
324 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
325 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
326 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
327 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
328 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
329 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
330 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
331 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
332 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
333 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
334 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
335 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
336 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
337 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
338 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
339 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
340 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
341 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
342 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
343 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
344 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
345 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
346 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
347 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
348 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
349 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
350 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
351 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
352 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
353 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
354 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
355 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
356 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
357 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
358 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
359 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
360 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
361 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
362 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
363 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
364 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
365 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
366 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
367 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
368 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
369 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
370 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
371 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
372 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
373 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
374 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
375 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
376 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
377 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
378 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
379 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
380 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
381 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
382 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
383 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
384 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
385 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
386 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
387 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
388 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
389 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
390 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
391 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
392 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
393 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
394 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
395 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
396 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
397 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
398 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
399 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
400 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
401 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
402 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
403 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
404 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
405 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
406 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
407 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
408 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
409 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
410 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
411 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
412 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
413 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
414 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
415 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
416 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
417 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
418 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
419 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
420 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
421 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
422 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
423 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
424 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
425 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
426 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
427 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
428 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
429 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
430 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
431 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
432 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
433 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
434 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
435 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
436 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
437 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
438 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
439 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
440 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
441 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
442 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
443 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
444 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
445 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
446 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
447 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
448 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
449 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
450 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
451 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
452 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
453 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
454 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
455 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
456 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
457 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
458 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
459 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
460 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
461 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
462 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
463 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
464 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
465 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
466 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
467 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
468 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
469 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
470 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
471 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
472 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
473 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
474 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
475 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
476 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
477 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
478 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
479 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
480 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
481 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
482 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
483 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
484 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
485 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
486 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
487 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
488 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
489 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
490 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
491 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
492 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
493 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
494 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
495 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
496 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
497 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
498 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
499 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
500 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
501 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
502 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
503 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
504 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
505 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
506 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
507 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
508 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
509 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
510 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
511 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
512 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
513 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
514 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
515 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
516 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
517 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
518 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
519 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
520 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
521 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
522 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
523 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
524 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
525 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
526 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
527 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
528 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
529 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
530 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
531 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
532 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
533 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
534 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
535 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
536 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
537 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
538 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
539 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
540 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
541 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
542 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
543 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
544 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
545 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
546 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
547 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
548 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
549 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
550 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
551 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
552 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
553 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
554 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
555 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
556 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
557 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
558 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
559 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
560 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
561 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
562 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
563 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
564 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
565 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
566 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
567 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
568 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
569 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
570 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
571 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
572 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
573 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
574 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
575 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
576 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
577 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
578 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
579 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
580 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
581 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
582 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
583 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
584 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
585 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
586 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
587 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
588 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
589 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
590 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
591 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
592 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
593 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
594 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
595 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
596 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
597 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
598 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
599 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
600 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
601 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
602 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
603 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
604 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
605 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
606 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
607 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
608 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
609 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
610 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
611 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
612 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
613 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
614 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
615 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
616 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
617 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
618 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
619 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
620 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
621 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
622 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
623 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
624 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
625 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
626 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
627 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
628 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
629 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
630 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
631 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
632 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
633 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
634 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
635 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
636 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
637 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
638 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
639 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
640 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
641 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
642 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
643 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
644 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
645 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
646 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
647 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
648 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
649 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
650 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
651 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
652 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
653 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
654 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
655 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
656 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
657 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
658 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
659 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
660 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
661 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
662 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
663 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
664 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
665 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
666 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
667 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
668 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
669 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
670 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
671 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
672 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
673 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
674 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
675 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
676 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
677 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
678 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
679 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
680 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
681 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
682 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
683 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
684 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
685 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
686 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
687 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
688 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
689 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
690 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
691 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
692 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
693 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
694 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
695 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
696 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
697 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
698 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
699 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
700 Beguiler_Controller 16988617 16988618 79 INT 1000 **** **** **** **** **** packftbeg1 packskbeg1 packeqbeg1 0 1
|
||||||
|
701 Beguiler_Investigator 16988619 16988620 79 INT 1000 **** **** **** **** **** packftbeg2 packskbeg2 packeqbeg2 0 1
|
||||||
|
702 Beguiler_Trickster 16988621 16988622 79 INT 1000 **** **** **** **** **** packftbeg3 packskbeg3 packeqbeg3 0 1
|
||||||
|
703 BeguilerReserve4 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
704 BeguilerReserve5 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
705 DragonShaman_Defender 16988627 16988628 143 CON 1000 **** **** **** **** **** packftdrgshm1 packskdrgshm1 packeqdrgshm1 0 1
|
||||||
|
706 DragonShaman_Destroyer 16988629 16988630 143 STR 1000 **** **** **** **** **** packftdrgshm2 packskdrgshm2 packeqdrgshm2 0 1
|
||||||
|
707 DragonShaman_SecondRank 16988631 16988632 143 CHA 1000 **** **** **** **** **** packftdrgshm3 packskdrgshm3 packeqdrgshm3 0 1
|
||||||
|
708 DragonShamanReserve4 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
709 DragonShamanReserve5 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
710 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
711 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
712 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
713 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
714 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
715 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
716 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
717 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
718 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
719 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
720 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
721 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
722 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
723 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
724 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
725 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
726 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
727 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
728 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
729 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
730 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
731 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
732 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
733 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
734 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
735 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
736 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
737 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
738 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
739 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
740 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
741 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
742 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
743 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
744 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
745 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
746 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
747 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
748 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
749 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
750 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
751 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
752 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
753 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
754 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
755 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
756 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
757 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
758 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
759 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
760 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
761 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
762 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
763 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
764 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
765 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
766 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
767 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
768 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
769 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
770 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
771 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
772 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
773 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
774 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
775 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
776 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
777 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
778 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
779 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
780 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
781 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
782 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
783 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
784 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
785 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
786 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
787 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
788 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
789 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
790 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
791 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
792 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
793 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
794 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
795 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
796 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
797 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
798 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
799 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
800 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
801 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
802 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
803 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
804 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
805 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
806 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
807 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
808 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
809 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
810 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
811 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
812 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
813 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
814 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
815 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
816 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
817 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
818 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
819 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
820 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
821 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
822 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
823 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
824 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
825 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
826 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
827 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
828 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
829 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
830 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
831 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
832 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
833 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
834 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
835 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
836 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
837 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
838 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
839 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
840 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
841 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
842 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
843 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
844 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
845 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
846 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
847 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
848 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
849 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
850 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
851 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
852 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
853 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
854 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
855 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
856 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
857 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
858 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
859 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
860 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
861 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
862 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
863 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
864 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
865 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
866 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
867 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
868 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
869 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
870 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
871 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
872 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
873 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
874 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
875 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
876 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
877 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
878 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
879 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
880 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
881 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
882 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
883 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
884 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
885 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
886 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
887 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
888 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
889 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
890 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
891 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
892 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
893 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
894 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
895 Healer_Default 16988709 16988710 64 WIS 1000 **** **** **** **** packpsheal1 packftheal1 packskheal1 packeqheal1 0 1
|
||||||
|
896 Healer_Reserve2 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
897 Healer_Reserve3 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
898 Healer_Reserve4 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
899 Healer_Reserve5 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
900 Warlock_Blaster_Default 16988717 16988718 112 CHA 1000 **** **** **** **** **** packftwr1 packftwr1 packeqwr1 0 1
|
||||||
|
901 Warlock_RESERVE2 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
902 Warlock_RESERVE3 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
903 Warlock_RESERVE4 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
904 Warlock_RESERVE5 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
905 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
906 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
907 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
908 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
909 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
910 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
911 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
912 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
913 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
914 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
915 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
916 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
917 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
918 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
919 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
920 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
921 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
922 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
923 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
924 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
925 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
926 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
927 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
928 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
929 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
930 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
931 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
932 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
933 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
934 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
935 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
936 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
937 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
938 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
939 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
940 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
941 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
942 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
943 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
944 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
945 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
946 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
947 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
948 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
949 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
950 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
951 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
952 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
953 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
954 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
955 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
956 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
957 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
958 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
959 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
960 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
961 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
962 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
963 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
964 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
965 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
966 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
967 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
968 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
969 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
970 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
971 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
972 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
973 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
974 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
975 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
976 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
977 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
978 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
979 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
980 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
981 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
982 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
983 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
984 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
985 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
986 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
987 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
988 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
989 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
990 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
991 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
992 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
993 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
994 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
995 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
996 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
997 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
998 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
|||||||
@@ -79,7 +79,7 @@
|
|||||||
75 Aranea 158 159 160 161 162 158 159 160 161 162 **** **** **** **** **** ****
|
75 Aranea 158 159 160 161 162 158 159 160 161 162 **** **** **** **** **** ****
|
||||||
76 Chitine 2 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
76 Chitine 2 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
77 SpiretopDragon 3580 3631 3712 **** **** 3580 3631 3712 **** **** **** **** **** **** **** ****
|
77 SpiretopDragon 3580 3631 3712 **** **** 3580 3631 3712 **** **** **** **** **** **** **** ****
|
||||||
78 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
78 Jaebrin 6 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
79 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
79 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
80 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
80 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
81 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
81 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@@ -155,7 +155,7 @@
|
|||||||
151 Arctic_Dwarf 2 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
151 Arctic_Dwarf 2 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
152 Gold_Dwarf 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
152 Gold_Dwarf 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
153 Gray_Dwarf 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
153 Gray_Dwarf 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
154 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
154 EmptyVessel 6 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
155 Urdunnir 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
155 Urdunnir 0 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
156 Wild_Dwarf 2 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
156 Wild_Dwarf 2 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
157 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
157 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@@ -170,7 +170,7 @@
|
|||||||
166 Sun_Elf 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
166 Sun_Elf 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
167 Wild_Elf 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
167 Wild_Elf 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
168 Wood_Elf 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
168 Wood_Elf 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
169 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
169 Grey_Elf 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
170 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
170 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
171 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
171 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
172 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
172 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@@ -186,7 +186,7 @@
|
|||||||
182 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
182 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
183 Half_Drow 4 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
183 Half_Drow 4 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
184 Gray_Orc 5 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
184 Gray_Orc 5 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
185 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
185 Gargoyle 73 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
186 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
186 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
187 Orog 5 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
187 Orog 5 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
188 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
188 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
@@ -234,7 +234,7 @@
|
|||||||
230 Deep_Imaskari 6 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
230 Deep_Imaskari 6 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
231 Troll 167 164 1058 1254 2500 165 2501 2502 2503 2504 **** **** **** **** **** ****
|
231 Troll 167 164 1058 1254 2500 165 2501 2502 2503 2504 **** **** **** **** **** ****
|
||||||
232 Varag 390 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
232 Varag 390 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
233 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
233 HobgoblinWarsoul 391 390 **** **** **** 391 390 **** **** **** **** **** **** **** **** ****
|
||||||
234 Troglodyte 452 451 453 869 870 451 452 453 869 870 **** **** **** **** **** ****
|
234 Troglodyte 452 451 453 869 870 451 452 453 869 870 **** **** **** **** **** ****
|
||||||
235 Neraphim 155 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
235 Neraphim 155 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
236 Shadowswyft 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
236 Shadowswyft 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
|||||||
@@ -53,7 +53,7 @@
|
|||||||
49 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 4 30 3 1 **** ****
|
49 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 4 30 3 1 **** ****
|
||||||
50 Drider Dr 3063 3063 16833081 108146 16833083 **** 406 4 4 4 6 6 6 30 9 RACE_FEAT_DRIDER 16833082 1 RACIAL_TYPE_DRIDER 110 9 1 drow **** **** **** 4 30 3 1 INT 268
|
50 Drider Dr 3063 3063 16833081 108146 16833083 **** 406 4 4 4 6 6 6 30 9 RACE_FEAT_DRIDER 16833082 1 RACIAL_TYPE_DRIDER 110 9 1 drow **** **** **** 4 30 3 1 INT 268
|
||||||
51 Wemic Wm 16826957 16826958 16826958 16826959 16826960 **** 467 8 2 0 -2 0 2 40 0 RACE_FEAT_WEMIC 16826961 1 RACIAL_TYPE_WEMIC 6 0 1 wemic **** **** **** 4 30 3 1 INT 274
|
51 Wemic Wm 16826957 16826958 16826958 16826959 16826960 **** 467 8 2 0 -2 0 2 40 0 RACE_FEAT_WEMIC 16826961 1 RACIAL_TYPE_WEMIC 6 0 1 wemic **** **** **** 4 30 3 1 INT 274
|
||||||
52 Plant Pl 16833077 16833077 16833078 16833079 16833080 **** 51 0 -2 0 0 0 2 0 **** **** 0 0 RACIAL_TYPE_PLANT 4 15 0.95 plant **** **** **** 4 30 3 1 INT 2355
|
52 Plant Pl 16833077 16833077 16833078 16833079 16833080 **** 51 0 0 0 0 0 0 0 **** **** 0 0 RACIAL_TYPE_PLANT 4 15 0.95 plant **** **** **** 4 30 3 1 INT 2355
|
||||||
53 Brownie Bw 16826962 16826962 16826963 16826964 16826965 **** 55 -6 10 2 2 2 2 30 8 RACE_FEAT_BROWNI 8160 1 RACIAL_TYPE_BROWNIE 20 8 1 brownie **** **** **** 4 30 3 1 INT 278
|
53 Brownie Bw 16826962 16826962 16826963 16826964 16826965 **** 55 -6 10 2 2 2 2 30 8 RACE_FEAT_BROWNI 8160 1 RACIAL_TYPE_BROWNIE 20 8 1 brownie **** **** **** 4 30 3 1 INT 278
|
||||||
54 Krinth Kr 16833149 16833149 16833150 16833149 16833151 **** 5 0 0 0 -2 0 2 30 4 RACE_FEAT_KRINTH 16833149 1 RACIAL_TYPE_KRINTH 20 4 1 krinth **** **** **** 4 30 3 1 INT 267
|
54 Krinth Kr 16833149 16833149 16833150 16833149 16833151 **** 5 0 0 0 -2 0 2 30 4 RACE_FEAT_KRINTH 16833149 1 RACIAL_TYPE_KRINTH 20 4 1 krinth **** **** **** 4 30 3 1 INT 267
|
||||||
55 Goliath Go 16833166 16833166 16833167 16833170 16833171 **** 5 4 -2 0 0 0 2 30 0 RACE_FEAT_GOL 16833166 1 RACIAL_TYPE_GOLIATH 20 0 1 goliath **** **** **** 4 30 3 1 INT 274
|
55 Goliath Go 16833166 16833166 16833167 16833170 16833171 **** 5 4 -2 0 0 0 2 30 0 RACE_FEAT_GOL 16833166 1 RACIAL_TYPE_GOLIATH 20 0 1 goliath **** **** **** 4 30 3 1 INT 274
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
74 Muckdweller Mr 16836018 16836018 16836019 16836020 16836021 **** 206 -6 6 0 -2 -2 0 20 8 RACE_FEAT_MUCKD 8163 1 RACIAL_TYPE_MUCKDWELLER 15 8 1 muckdweller **** **** **** 4 30 3 1 INT 276
|
74 Muckdweller Mr 16836018 16836018 16836019 16836020 16836021 **** 206 -6 6 0 -2 -2 0 20 8 RACE_FEAT_MUCKD 8163 1 RACIAL_TYPE_MUCKDWELLER 15 8 1 muckdweller **** **** **** 4 30 3 1 INT 276
|
||||||
75 Aranea Ae 16836006 16836006 16836007 16836008 16836009 **** 158 0 4 4 4 2 4 50 9 RACE_FEAT_ARANEA 8163 1 RACIAL_TYPE_ARANEA 15 9 1 aranea **** **** **** 4 30 3 1 INT 284
|
75 Aranea Ae 16836006 16836006 16836007 16836008 16836009 **** 158 0 4 4 4 2 4 50 9 RACE_FEAT_ARANEA 8163 1 RACIAL_TYPE_ARANEA 15 9 1 aranea **** **** **** 4 30 3 1 INT 284
|
||||||
76 Chitine Ch 16832294 16832294 16832295 16832296 16832297 **** 2 **** 2 2 -4 **** 2 30 8 RACE_FEAT_CHIT 16832294 1 RACIAL_TYPE_CHITINE 15 8 1 chitine **** **** **** 4 30 3 1 INT 274
|
76 Chitine Ch 16832294 16832294 16832295 16832296 16832297 **** 2 **** 2 2 -4 **** 2 30 8 RACE_FEAT_CHIT 16832294 1 RACIAL_TYPE_CHITINE 15 8 1 chitine **** **** **** 4 30 3 1 INT 274
|
||||||
77 SpiretopDragon Sd 16835965 16835966 16835967 16835968 16835969 **** 375 -4 8 -4 -2 0 2 60 8 RACE_FEAT_SPDRAG 16835970 1 RACIAL_TYPE_SPIRETOPDRAGON 25 8 1 dragon **** **** **** 4 30 3 1 INT 272
|
77 SpiretopDragon Sd 16835965 16835966 16835967 16835968 16835969 **** 375 -4 8 -4 -2 0 2 60 8 RACE_FEAT_SPDRAG 16835970 0 RACIAL_TYPE_SPIRETOPDRAGON 25 8 1 dragon **** **** **** 4 30 3 1 INT 272
|
||||||
78 Jaebrin Ja 16852286 16852286 16852287 16852288 16852289 **** 6 -2 0 0 2 0 0 30 79 RACE_FEAT_JAEBRN 8163 1 RACIAL_TYPE_JAEBRIN 15 79 1 fey human **** **** 4 30 3 1 INT 278
|
78 Jaebrin Ja 16852286 16852286 16852287 16852288 16852289 **** 6 -2 0 0 2 0 0 30 79 RACE_FEAT_JAEBRN 8163 1 RACIAL_TYPE_JAEBRIN 15 79 1 fey human **** **** 4 30 3 1 INT 278
|
||||||
79 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
79 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
80 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
80 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -12,6 +12,7 @@
|
|||||||
//:://////////////////////////////////////////////
|
//:://////////////////////////////////////////////
|
||||||
//:://////////////////////////////////////////////
|
//:://////////////////////////////////////////////
|
||||||
|
|
||||||
|
//PRC8 Token pre-fix = 161838
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Constant definitions */
|
/* Constant definitions */
|
||||||
@@ -21,23 +22,23 @@ const int DYNCONV_EXITED = -2;
|
|||||||
const int DYNCONV_ABORTED = -3;
|
const int DYNCONV_ABORTED = -3;
|
||||||
const int DYNCONV_SETUP_STAGE = -1;
|
const int DYNCONV_SETUP_STAGE = -1;
|
||||||
|
|
||||||
const int DYNCONV_TOKEN_HEADER = 99;
|
const int DYNCONV_TOKEN_HEADER = 16183899;
|
||||||
const int DYNCONV_TOKEN_REPLY_0 = 100;
|
const int DYNCONV_TOKEN_REPLY_0 = 161838100;
|
||||||
const int DYNCONV_TOKEN_REPLY_1 = 101;
|
const int DYNCONV_TOKEN_REPLY_1 = 161838101;
|
||||||
const int DYNCONV_TOKEN_REPLY_2 = 102;
|
const int DYNCONV_TOKEN_REPLY_2 = 161838102;
|
||||||
const int DYNCONV_TOKEN_REPLY_3 = 103;
|
const int DYNCONV_TOKEN_REPLY_3 = 161838103;
|
||||||
const int DYNCONV_TOKEN_REPLY_4 = 104;
|
const int DYNCONV_TOKEN_REPLY_4 = 161838104;
|
||||||
const int DYNCONV_TOKEN_REPLY_5 = 105;
|
const int DYNCONV_TOKEN_REPLY_5 = 161838105;
|
||||||
const int DYNCONV_TOKEN_REPLY_6 = 106;
|
const int DYNCONV_TOKEN_REPLY_6 = 161838106;
|
||||||
const int DYNCONV_TOKEN_REPLY_7 = 107;
|
const int DYNCONV_TOKEN_REPLY_7 = 161838107;
|
||||||
const int DYNCONV_TOKEN_REPLY_8 = 108;
|
const int DYNCONV_TOKEN_REPLY_8 = 161838108;
|
||||||
const int DYNCONV_TOKEN_REPLY_9 = 109;
|
const int DYNCONV_TOKEN_REPLY_9 = 161838109;
|
||||||
const int DYNCONV_TOKEN_EXIT = 110;
|
const int DYNCONV_TOKEN_EXIT = 161838110;
|
||||||
const int DYNCONV_TOKEN_WAIT = 111;
|
const int DYNCONV_TOKEN_WAIT = 161838111;
|
||||||
const int DYNCONV_TOKEN_NEXT = 112;
|
const int DYNCONV_TOKEN_NEXT = 161838112;
|
||||||
const int DYNCONV_TOKEN_PREV = 113;
|
const int DYNCONV_TOKEN_PREV = 161838113;
|
||||||
const int DYNCONV_MIN_TOKEN = 99;
|
const int DYNCONV_MIN_TOKEN = 16183899;
|
||||||
const int DYNCONV_MAX_TOKEN = 113;
|
const int DYNCONV_MAX_TOKEN = 161838113;
|
||||||
|
|
||||||
const int DYNCONV_STRREF_PLEASE_WAIT = 16824202; // "Please wait"
|
const int DYNCONV_STRREF_PLEASE_WAIT = 16824202; // "Please wait"
|
||||||
const int DYNCONV_STRREF_PREVIOUS = 16824203; // "Previous"
|
const int DYNCONV_STRREF_PREVIOUS = 16824203; // "Previous"
|
||||||
@@ -477,9 +478,28 @@ void _DynConvInternal_ExitedConvo(object oPC, int bAbort)
|
|||||||
DeleteLocalInt(oPC, DYNCONV_STAGE);
|
DeleteLocalInt(oPC, DYNCONV_STAGE);
|
||||||
DeleteLocalString(oPC, DYNCONV_SCRIPT);
|
DeleteLocalString(oPC, DYNCONV_SCRIPT);
|
||||||
DeleteLocalString(oPC, "DynConv_HeaderText");
|
DeleteLocalString(oPC, "DynConv_HeaderText");
|
||||||
int i;
|
|
||||||
for(i = DYNCONV_MIN_TOKEN; i <= DYNCONV_MAX_TOKEN; i++)
|
DeleteLocalString(oPC, GetTokenIDString(DYNCONV_TOKEN_HEADER));
|
||||||
DeleteLocalString(oPC, GetTokenIDString(i));
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,66 +58,67 @@ const int SPELL_EPIC_ARMY_UN = 7;//4006;
|
|||||||
const int SPELL_EPIC_BATTLEB = 999;//4008;
|
const int SPELL_EPIC_BATTLEB = 999;//4008;
|
||||||
const int SPELL_EPIC_CELCOUN = 8;//4009;
|
const int SPELL_EPIC_CELCOUN = 8;//4009;
|
||||||
const int SPELL_EPIC_CHAMP_V = 9;//4010;
|
const int SPELL_EPIC_CHAMP_V = 9;//4010;
|
||||||
const int SPELL_EPIC_CON_RES =10;//4011;
|
const int SPELL_EPIC_CON_RES = 10;//4011;
|
||||||
const int SPELL_EPIC_CON_REU =11;//4012;
|
const int SPELL_EPIC_CON_REU = 11;//4012;
|
||||||
const int SPELL_EPIC_DEADEYE =12;//4013;
|
const int SPELL_EPIC_DEADEYE = 12;//4013;
|
||||||
const int SPELL_EPIC_DIREWIN =13;//4015;
|
const int SPELL_EPIC_DIREWIN = 13;//4015;
|
||||||
const int SPELL_EPIC_DREAMSC =14;//4017;
|
const int SPELL_EPIC_DREAMSC = 14;//4017;
|
||||||
const int SPELL_EPIC_DRG_KNI =15;//4016;
|
const int SPELL_EPIC_DRG_KNI = 15;//4016;
|
||||||
const int SPELL_EPIC_DTHMARK =1000;//4014;
|
const int SPELL_EPIC_DTHMARK = 1000;//4014;
|
||||||
const int SPELL_EPIC_DULBLAD =16;//4018;
|
const int SPELL_EPIC_DULBLAD = 16;//4018;
|
||||||
const int SPELL_EPIC_DWEO_TH =17;//4019;
|
const int SPELL_EPIC_DWEO_TH = 17;//4019;
|
||||||
const int SPELL_EPIC_ENSLAVE =18;//4020;
|
const int SPELL_EPIC_ENSLAVE = 18;//4020;
|
||||||
const int SPELL_EPIC_EP_M_AR =19;//4021;
|
const int SPELL_EPIC_EP_M_AR = 19;//4021;
|
||||||
const int SPELL_EPIC_EP_RPLS =20;//4022;
|
const int SPELL_EPIC_EP_RPLS = 20;//4022;
|
||||||
const int SPELL_EPIC_EP_SP_R =21;//4023;
|
const int SPELL_EPIC_EP_SP_R = 21;//4023;
|
||||||
const int SPELL_EPIC_EP_WARD =22;//4024;
|
const int SPELL_EPIC_EP_WARD = 22;//4024;
|
||||||
const int SPELL_EPIC_ET_FREE =23;//4025;
|
const int SPELL_EPIC_ET_FREE = 23;//4025;
|
||||||
const int SPELL_EPIC_FIEND_W =24;//4026;
|
const int SPELL_EPIC_FIEND_W = 24;//4026;
|
||||||
const int SPELL_EPIC_FLEETNS =25;//4027;
|
const int SPELL_EPIC_FLEETNS = 25;//4027;
|
||||||
const int SPELL_EPIC_GEMCAGE =26;//4028;
|
const int SPELL_EPIC_GEMCAGE = 26;//4028;
|
||||||
const int SPELL_EPIC_GODSMIT =27;//4029;
|
const int SPELL_EPIC_GODSMIT = 27;//4029;
|
||||||
const int SPELL_EPIC_GR_RUIN =28;//4030;
|
const int SPELL_EPIC_GR_RUIN = 28;//4030;
|
||||||
const int SPELL_EPIC_GR_SP_RE=29;//4031;
|
const int SPELL_EPIC_GR_SP_RE = 29;//4031;
|
||||||
const int SPELL_EPIC_GR_TIME =30;//4032;
|
const int SPELL_EPIC_GR_TIME = 30;//4032;
|
||||||
const int SPELL_EPIC_HELBALL =31;//4034;
|
const int SPELL_EPIC_HELBALL = 31;//4034;
|
||||||
const int SPELL_EPIC_HELSEND =1001;//4033;
|
const int SPELL_EPIC_HELSEND = 1001;//4033;
|
||||||
const int SPELL_EPIC_HERCALL =32;//4035;
|
const int SPELL_EPIC_HERCALL = 32;//4035;
|
||||||
const int SPELL_EPIC_HERCEMP =33;//4036;
|
const int SPELL_EPIC_HERCEMP = 33;//4036;
|
||||||
const int SPELL_EPIC_IMPENET =34;//4037;
|
const int SPELL_EPIC_IMPENET = 34;//4037;
|
||||||
const int SPELL_EPIC_LEECH_F =35;//4038;
|
const int SPELL_EPIC_LEECH_F = 35;//4038;
|
||||||
const int SPELL_EPIC_LEG_ART =1002;//4039;
|
const int SPELL_EPIC_LEG_ART = 1002;//4039;
|
||||||
const int SPELL_EPIC_LIFE_FT =1003;//4040;
|
const int SPELL_EPIC_LIFE_FT = 1003;//4040;
|
||||||
const int SPELL_EPIC_MAGMA_B =36;//4041;
|
const int SPELL_EPIC_MAGMA_B = 36;//4041;
|
||||||
const int SPELL_EPIC_MASSPEN =37;//4042;
|
const int SPELL_EPIC_MASSPEN = 37;//4042;
|
||||||
const int SPELL_EPIC_MORI = 38;//4043;
|
const int SPELL_EPIC_MORI = 38;//4043;
|
||||||
const int SPELL_EPIC_MUMDUST =39;//4044;
|
const int SPELL_EPIC_MUMDUST = 39;//4044;
|
||||||
const int SPELL_EPIC_NAILSKY =40;//4045;
|
const int SPELL_EPIC_NAILSKY = 40;//4045;
|
||||||
const int SPELL_EPIC_NIGHTSU =1004;//4046;
|
const int SPELL_EPIC_NIGHTSU = 1004;//4046;
|
||||||
const int SPELL_EPIC_ORDER_R =41;//4047;
|
const int SPELL_EPIC_ORDER_R = 41;//4047;
|
||||||
const int SPELL_EPIC_PATHS_B =42;//4048;
|
const int SPELL_EPIC_PATHS_B = 42;//4048;
|
||||||
const int SPELL_EPIC_PEERPEN =43;//4049;
|
const int SPELL_EPIC_PEERPEN = 43;//4049;
|
||||||
const int SPELL_EPIC_PESTIL = 44;//4050;
|
const int SPELL_EPIC_PESTIL = 44;//4050;
|
||||||
const int SPELL_EPIC_PIOUS_P =45;//4051;
|
const int SPELL_EPIC_PIOUS_P = 45;//4051;
|
||||||
const int SPELL_EPIC_PLANCEL =46;//4052;
|
const int SPELL_EPIC_PLANCEL = 46;//4052;
|
||||||
const int SPELL_EPIC_PSION_S =47;//4053;
|
const int SPELL_EPIC_PSION_S = 47;//4053;
|
||||||
const int SPELL_EPIC_RAINFIR =48;//4054;
|
const int SPELL_EPIC_RAINFIR = 48;//4054;
|
||||||
const int SPELL_EPIC_RISEN_R =1005;//4055;
|
//const int SPELL_EPIC_RISEN_R =1005;//4055;
|
||||||
const int SPELL_EPIC_RUINN = 49;//4056; //NON_STANDARD
|
const int SPELL_EPIC_RISEN_R = 49;//4055;
|
||||||
const int SPELL_EPIC_SINGSUN =50;//4057;
|
const int SPELL_EPIC_RUINN = 50;//4056; //NON_STANDARD
|
||||||
const int SPELL_EPIC_SP_WORM =51;//4058;
|
const int SPELL_EPIC_SINGSUN = 51;//4057;
|
||||||
const int SPELL_EPIC_STORM_M =52;//4059;
|
const int SPELL_EPIC_SP_WORM = 52;//4058;
|
||||||
const int SPELL_EPIC_SUMABER =53;//4060;
|
const int SPELL_EPIC_STORM_M = 53;//4059;
|
||||||
const int SPELL_EPIC_SUP_DIS =54;//4061;
|
const int SPELL_EPIC_SUMABER = 54;//4060;
|
||||||
const int SPELL_EPIC_SYMRUST =1006;//4062;
|
const int SPELL_EPIC_SUP_DIS = 55;//4061;
|
||||||
const int SPELL_EPIC_THEWITH =55;//4063;
|
const int SPELL_EPIC_SYMRUST = 1006;//4062;
|
||||||
const int SPELL_EPIC_TOLO_KW =56;//4064;
|
const int SPELL_EPIC_THEWITH = 56;//4063;
|
||||||
const int SPELL_EPIC_TRANVIT =57;//4065;
|
const int SPELL_EPIC_TOLO_KW = 57;//4064;
|
||||||
const int SPELL_EPIC_TWINF = 58;//4066;
|
const int SPELL_EPIC_TRANVIT = 58;//4065;
|
||||||
const int SPELL_EPIC_UNHOLYD =59;//4067;
|
const int SPELL_EPIC_TWINF = 59;//4066;
|
||||||
const int SPELL_EPIC_UNIMPIN =60;//4068;
|
const int SPELL_EPIC_UNHOLYD = 60;//4067;
|
||||||
const int SPELL_EPIC_UNSEENW =61;//4069;
|
const int SPELL_EPIC_UNIMPIN = 61;//4068;
|
||||||
const int SPELL_EPIC_WHIP_SH =62;//4070;
|
const int SPELL_EPIC_UNSEENW = 62;//4069;
|
||||||
|
const int SPELL_EPIC_WHIP_SH = 63;//4070;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ int GetSpellFromAbrev(string sAbrev);
|
|||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "inc_utility"
|
#include "inc_utility"
|
||||||
//#include "inc_epicspelldef"
|
#include "inc_epicspells"
|
||||||
|
|
||||||
// SEED FUNCTIONS
|
// SEED FUNCTIONS
|
||||||
|
|
||||||
@@ -246,7 +246,7 @@ int GetSpellFromAbrev(string sAbrev)
|
|||||||
sAbrev = GetStringLowerCase(sAbrev);
|
sAbrev = GetStringLowerCase(sAbrev);
|
||||||
if(GetStringLeft(sAbrev, 8) == "epic_sp_")
|
if(GetStringLeft(sAbrev, 8) == "epic_sp_")
|
||||||
sAbrev = GetStringRight(sAbrev, GetStringLength(sAbrev)-8);
|
sAbrev = GetStringRight(sAbrev, GetStringLength(sAbrev)-8);
|
||||||
if(DEBUG) DoDebug("sAbrew to check vs: " + sAbrev);
|
if(DEBUG) DoDebug("sAbrev to check vs: " + sAbrev);
|
||||||
int i = 0;
|
int i = 0;
|
||||||
string sLabel = GetStringLowerCase(Get2DACache("epicspells", "LABEL", i));
|
string sLabel = GetStringLowerCase(Get2DACache("epicspells", "LABEL", i));
|
||||||
while(sLabel != "")
|
while(sLabel != "")
|
||||||
|
|||||||
@@ -305,10 +305,17 @@ int GetIsEpicShaman(object oPC)
|
|||||||
|
|
||||||
int GetIsEpicSorcerer(object oPC)
|
int GetIsEpicSorcerer(object oPC)
|
||||||
{
|
{
|
||||||
return GetPrCAdjustedCasterLevel(CLASS_TYPE_SORCERER, oPC, FALSE) > 17
|
return GetHitDice(oPC) >= 21
|
||||||
|
&& GetCasterLvl(CLASS_TYPE_SORCERER, oPC) > 17
|
||||||
&& GetAbilityScore(oPC, ABILITY_CHARISMA) > 18;
|
&& 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)
|
int GetIsEpicSublimeChord(object oPC)
|
||||||
{
|
{
|
||||||
return GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oPC) > 8
|
return GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oPC) > 8
|
||||||
|
|||||||
481
src/include/inc_infusion.nss
Normal file
481
src/include/inc_infusion.nss
Normal file
@@ -0,0 +1,481 @@
|
|||||||
|
//:://////////////////////////////////////////////
|
||||||
|
//:: ;-. ,-. ,-. ,-.
|
||||||
|
//:: | ) | ) / ( )
|
||||||
|
//:: |-' |-< | ;-:
|
||||||
|
//:: | | \ \ ( )
|
||||||
|
//:: ' ' ' `-' `-'
|
||||||
|
//::///////////////////////////////////////////////
|
||||||
|
//::
|
||||||
|
/*
|
||||||
|
Script: inc_infusion
|
||||||
|
Author: Jaysyn
|
||||||
|
Created: 2025-08-11 17:01:26
|
||||||
|
|
||||||
|
Description:
|
||||||
|
Contains most functions related to the Create
|
||||||
|
Infusion feat.
|
||||||
|
|
||||||
|
*/
|
||||||
|
//::
|
||||||
|
//:://////////////////////////////////////////////
|
||||||
|
#include "prc_inc_spells"
|
||||||
|
|
||||||
|
int GetMaxDivineSpellLevel(object oCaster, int nClass);
|
||||||
|
int GetCastSpellCasterLevelFromItem(object oItem, int nSpellID);
|
||||||
|
int GetIsClassSpell(object oCaster, int nSpellID, int nClass);
|
||||||
|
int GetHasSpellOnClassList(object oCaster, int nSpellID);
|
||||||
|
void InfusionSecondSave(object oUser, int nDC);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Finds the class index for which the given spell is available to the specified caster.
|
||||||
|
*
|
||||||
|
* This function iterates through all possible classes and returns the first class
|
||||||
|
* index for which the specified spell is on the caster's spell list.
|
||||||
|
*
|
||||||
|
* @param oCaster The creature object to check.
|
||||||
|
* @param nSpellID The spell ID to find the class for.
|
||||||
|
*
|
||||||
|
* @return The class index that has the spell on its class spell list for the caster,
|
||||||
|
* or -1 if no matching class is found.
|
||||||
|
*/
|
||||||
|
int FindSpellCastingClass(object oCaster, int nSpellID)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
int nClassFound = -1;
|
||||||
|
int nClass;
|
||||||
|
|
||||||
|
// Only loop through caster's classes
|
||||||
|
for (i = 0; i <= 8; i++)
|
||||||
|
{
|
||||||
|
nClass = GetClassByPosition(i, oCaster);
|
||||||
|
if (nClass == CLASS_TYPE_INVALID) continue;
|
||||||
|
|
||||||
|
if (GetIsClassSpell(oCaster, nSpellID, nClass))
|
||||||
|
{
|
||||||
|
nClassFound = nClass;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nClassFound;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Performs validation checks to determine if the caster can use a spell infusion from the specified item.
|
||||||
|
*
|
||||||
|
* This function verifies that the item is a valid infused herb, checks the caster's relevant class and ability scores,
|
||||||
|
* confirms the caster is a divine spellcaster with the necessary caster level, and ensures the spell is on the caster's class spell list.
|
||||||
|
*
|
||||||
|
* @param oCaster The creature attempting to use the infusion.
|
||||||
|
* @param oItem The infused herb item containing the spell.
|
||||||
|
* @param nSpellID The spell ID of the infusion spell being cast.
|
||||||
|
*
|
||||||
|
* @return TRUE if all infusion use checks pass and the caster can use the infusion; FALSE otherwise.
|
||||||
|
*/
|
||||||
|
int DoInfusionUseChecks(object oCaster, object oItem, int nSpellID)
|
||||||
|
{
|
||||||
|
int bPnPHerbs = GetPRCSwitch(PRC_CREATE_INFUSION_OPTIONAL_HERBS);
|
||||||
|
|
||||||
|
if(GetBaseItemType(oItem) != BASE_ITEM_INFUSED_HERB)
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("Not casting from an Infused Herb", oCaster);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int nItemSpellLvl = GetCastSpellCasterLevelFromItem(oItem, nSpellID);
|
||||||
|
if (bPnPHerbs && nItemSpellLvl == -1)
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("Item has no spellcaster level.", oCaster);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// **CRITICAL: Find the correct class that actually has the spell on its list**
|
||||||
|
int nClassCaster = FindSpellCastingClass(oCaster, nSpellID);
|
||||||
|
|
||||||
|
if(DEBUG) DoDebug("nClassCaster is: " + IntToString(nClassCaster) + ".");
|
||||||
|
|
||||||
|
// Check for valid class
|
||||||
|
if (nClassCaster == -1)
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("No valid class found for this spell.", oCaster);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(GetMaxDivineSpellLevel(oCaster, nClassCaster) < 1 )
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("You must be a divine spellcaster to activate an infusion.", oCaster);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Must have spell on class list - (This will also double-check via the class)
|
||||||
|
if (!GetHasSpellOnClassList(oCaster, nSpellID))
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("You must have a spell on one of your class spell lists to cast it from an infusion.", oCaster);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Must meet ability requirement: Ability score >= 10 + spell level
|
||||||
|
int nSpellLevel = PRCGetSpellLevelForClass(nSpellID, nClassCaster);
|
||||||
|
int nClassAbility = GetAbilityScoreForClass(nClassCaster, oCaster);
|
||||||
|
|
||||||
|
if(DEBUG) DoDebug("inc_infusion >> DoInfusionUseChecks: nClassCaster is "+IntToString(nClassCaster)+".");
|
||||||
|
if(DEBUG) DoDebug("inc_infusion >> DoInfusionUseChecks: Class nSpellLevel is "+IntToString(nSpellLevel)+".");
|
||||||
|
if(DEBUG) DoDebug("inc_infusion >> DoInfusionUseChecks: nClassAbility is "+IntToString(nClassAbility)+".");
|
||||||
|
|
||||||
|
if (nClassAbility < 10 + nSpellLevel)
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("You must meet ability score requirement to cast spell from infusion.", oCaster);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Must have a divine caster level at least equal to infusion's caster level
|
||||||
|
int nDivineLvl = GetPrCAdjustedCasterLevelByType(TYPE_DIVINE, oCaster);
|
||||||
|
|
||||||
|
if(DEBUG) DoDebug("inc_infusion >> DoInfusionUseChecks: nDivineLvl is "+IntToString(nDivineLvl)+".");
|
||||||
|
|
||||||
|
if (nDivineLvl < nItemSpellLvl)
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("Your divine caster level is too low to cast this spell from an infusion.", oCaster);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* int DoInfusionUseChecks(object oCaster, object oItem, int nSpellID)
|
||||||
|
{
|
||||||
|
int bPnPHerbs = GetPRCSwitch(PRC_CREATE_INFUSION_OPTIONAL_HERBS);
|
||||||
|
|
||||||
|
if(GetBaseItemType(oItem) != BASE_ITEM_INFUSED_HERB)
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("Not casting from an Infused Herb", oCaster);
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int nItemSpellLvl = GetCastSpellCasterLevelFromItem(oItem, nSpellID);
|
||||||
|
if (bPnPHerbs && nItemSpellLvl == -1)
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("Item has no spellcaster level.", oCaster);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find relevant class for the spell
|
||||||
|
int nClassCaster = FindSpellCastingClass(oCaster, nSpellID);
|
||||||
|
|
||||||
|
if(DEBUG) DoDebug("nClassCaster is: "+IntToString(nClassCaster)+".");
|
||||||
|
|
||||||
|
if(GetMaxDivineSpellLevel(oCaster, nClassCaster) < 1 )
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("You must be a divine spellcaster to activate an infusion.", oCaster);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Must have spell on class list
|
||||||
|
if (!GetHasSpellOnClassList(oCaster, nSpellID))
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("You must have a spell on one of your class spell lists to cast it from an infusion.", oCaster);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Must meet ability requirement: Ability score >= 10 + spell level
|
||||||
|
int nSpellLevel = PRCGetSpellLevelForClass(nSpellID, nClassCaster);
|
||||||
|
int nClassAbility = GetAbilityScoreForClass(nClassCaster, oCaster);
|
||||||
|
|
||||||
|
if(DEBUG) DoDebug("inc_infusion >> DoInfusionUseChecks: nClassCaster is "+IntToString(nClassCaster)+".");
|
||||||
|
if(DEBUG) DoDebug("inc_infusion >> DoInfusionUseChecks: Class nSpellLevel is "+IntToString(nSpellLevel)+".");
|
||||||
|
if(DEBUG) DoDebug("inc_infusion >> DoInfusionUseChecks: nClassAbility is "+IntToString(nClassAbility)+".");
|
||||||
|
|
||||||
|
if (nClassAbility < 10 + nSpellLevel)
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("You must meet ability score requirement to cast spell from infusion.", oCaster);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Must have a divine caster level at least equal to infusion's caster level
|
||||||
|
int nDivineLvl = GetPrCAdjustedCasterLevelByType(TYPE_DIVINE, oCaster);
|
||||||
|
|
||||||
|
if(DEBUG) DoDebug("inc_infusion >> DoInfusionUseChecks: nDivineLvl is "+IntToString(nDivineLvl)+".");
|
||||||
|
|
||||||
|
if (nDivineLvl < nItemSpellLvl)
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("Your divine caster level is too low to cast this spell from an infusion.", oCaster);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @brief Retrieves the maximum divine spell level known by the caster for a given class.
|
||||||
|
*
|
||||||
|
* This function checks the caster's local integers named "PRC_DivSpell1" through "PRC_DivSpell9"
|
||||||
|
* in descending order to determine the highest divine spell level available.
|
||||||
|
* It returns the highest spell level for which the corresponding local int is false (zero).
|
||||||
|
*
|
||||||
|
* @param oCaster The creature whose divine spell levels are being checked.
|
||||||
|
* @param nClass The class index for which to check the divine spell level (currently unused).
|
||||||
|
*
|
||||||
|
* @return The highest divine spell level known by the caster (1 to 9).
|
||||||
|
*/
|
||||||
|
int GetMaxDivineSpellLevel(object oCaster, int nClass)
|
||||||
|
{
|
||||||
|
int i = 9;
|
||||||
|
for (i; i > 0; i--)
|
||||||
|
{
|
||||||
|
if(!GetLocalInt(oCaster, "PRC_DivSpell"+IntToString(i)))
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Retrieves the spell school of an herb based on its resref by looking it up in the craft_infusion.2da file.
|
||||||
|
*
|
||||||
|
* This function searches the "craft_infusion" 2DA for a row matching the herb's resref.
|
||||||
|
* If found, it returns the corresponding spell school as an integer constant.
|
||||||
|
* If not found or the SpellSchool column is missing/invalid, it returns -1.
|
||||||
|
*
|
||||||
|
* @param oHerb The herb object to check.
|
||||||
|
*
|
||||||
|
* @return The spell school constant corresponding to the herb's infusion spell school,
|
||||||
|
* or -1 if the herb is invalid, not found, or the data is missing.
|
||||||
|
*/
|
||||||
|
int GetHerbsSpellSchool(object oHerb)
|
||||||
|
{
|
||||||
|
if (!GetIsObjectValid(oHerb)) return -1;
|
||||||
|
|
||||||
|
string sResref = GetResRef(oHerb);
|
||||||
|
int nRow = 0;
|
||||||
|
string sRowResref;
|
||||||
|
|
||||||
|
while (nRow < 200)
|
||||||
|
{
|
||||||
|
sRowResref = Get2DACache("craft_infusion", "Resref", nRow);
|
||||||
|
if (sRowResref == "") break;
|
||||||
|
if (sRowResref == sResref)
|
||||||
|
{
|
||||||
|
string sHerbSpellSchool = Get2DAString("craft_infusion", "SpellSchool", nRow);
|
||||||
|
|
||||||
|
if (sHerbSpellSchool == "A") return SPELL_SCHOOL_ABJURATION;
|
||||||
|
else if (sHerbSpellSchool == "C") return SPELL_SCHOOL_CONJURATION;
|
||||||
|
else if (sHerbSpellSchool == "D") return SPELL_SCHOOL_DIVINATION;
|
||||||
|
else if (sHerbSpellSchool == "E") return SPELL_SCHOOL_ENCHANTMENT;
|
||||||
|
else if (sHerbSpellSchool == "V") return SPELL_SCHOOL_EVOCATION;
|
||||||
|
else if (sHerbSpellSchool == "I") return SPELL_SCHOOL_ILLUSION;
|
||||||
|
else if (sHerbSpellSchool == "N") return SPELL_SCHOOL_NECROMANCY;
|
||||||
|
else if (sHerbSpellSchool == "T") return SPELL_SCHOOL_TRANSMUTATION;
|
||||||
|
else return SPELL_SCHOOL_GENERAL;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
nRow++;
|
||||||
|
}
|
||||||
|
return -1; // Not found
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Retrieves the infusion spell level of an herb by matching its resref in the craft_infusion.2da file.
|
||||||
|
*
|
||||||
|
* This function searches the "craft_infusion" 2DA for a row matching the herb's resref.
|
||||||
|
* If found, it returns the spell level from the SpellLevel column as an integer.
|
||||||
|
* If not found or the column is missing, it returns -1.
|
||||||
|
*
|
||||||
|
* @param oHerb The herb object whose infusion spell level is to be retrieved.
|
||||||
|
*
|
||||||
|
* @return The spell level as an integer if found, or -1 if the herb is invalid, not found, or the column is missing.
|
||||||
|
*/
|
||||||
|
int GetHerbsInfusionSpellLevel(object oHerb)
|
||||||
|
{
|
||||||
|
if (!GetIsObjectValid(oHerb)) return -1;
|
||||||
|
|
||||||
|
string sResref = GetResRef(oHerb);
|
||||||
|
int nRow = 0;
|
||||||
|
string sRowResref;
|
||||||
|
|
||||||
|
// Brute-force loop <20> adjust limit if your 2DA has more than 500 rows
|
||||||
|
while (nRow < 200)
|
||||||
|
{
|
||||||
|
sRowResref = Get2DACache("craft_infusion", "Resref", nRow);
|
||||||
|
if (sRowResref == "") break; // End of valid rows
|
||||||
|
if (sRowResref == sResref)
|
||||||
|
{
|
||||||
|
string sSpellLevelStr = Get2DAString("craft_infusion", "SpellLevel", nRow);
|
||||||
|
return StringToInt(sSpellLevelStr);
|
||||||
|
}
|
||||||
|
nRow++;
|
||||||
|
}
|
||||||
|
return -1; // Not found
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Retrieves the caster level of a specific cast-spell item property from an item.
|
||||||
|
*
|
||||||
|
* This function iterates through the item properties of the given item, searching for an
|
||||||
|
* ITEM_PROPERTY_CAST_SPELL_CASTER_LEVEL property that matches the specified spell ID.
|
||||||
|
* If found, it returns the caster level value stored in the item property.
|
||||||
|
*
|
||||||
|
* @param oItem The item object to check.
|
||||||
|
* @param nSpellID The spell ID to match against the item property.
|
||||||
|
*
|
||||||
|
* @return The caster level associated with the matching cast-spell item property,
|
||||||
|
* or -1 if no matching property is found.
|
||||||
|
*/
|
||||||
|
int GetCastSpellCasterLevelFromItem(object oItem, int nSpellID)
|
||||||
|
{
|
||||||
|
int nFoundCL = -1;
|
||||||
|
|
||||||
|
itemproperty ip = GetFirstItemProperty(oItem);
|
||||||
|
while (GetIsItemPropertyValid(ip))
|
||||||
|
{
|
||||||
|
int nType = GetItemPropertyType(ip);
|
||||||
|
|
||||||
|
// First preference: PRC's CASTER_LEVEL itemprop
|
||||||
|
if (nType == ITEM_PROPERTY_CAST_SPELL_CASTER_LEVEL)
|
||||||
|
{
|
||||||
|
int nSubType = GetItemPropertySubType(ip);
|
||||||
|
string sSpellIDStr = Get2DAString("iprp_spells", "SpellIndex", nSubType);
|
||||||
|
int nSubSpellID = StringToInt(sSpellIDStr);
|
||||||
|
|
||||||
|
if (nSubSpellID == nSpellID)
|
||||||
|
{
|
||||||
|
return GetItemPropertyCostTableValue(ip); // Found exact CL
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback: vanilla CAST_SPELL property
|
||||||
|
if (nType == ITEM_PROPERTY_CAST_SPELL && nFoundCL == -1)
|
||||||
|
{
|
||||||
|
int nSubType = GetItemPropertySubType(ip);
|
||||||
|
string sSpellIDStr = Get2DAString("iprp_spells", "SpellIndex", nSubType);
|
||||||
|
int nSubSpellID = StringToInt(sSpellIDStr);
|
||||||
|
|
||||||
|
if (nSubSpellID == nSpellID)
|
||||||
|
{
|
||||||
|
// Vanilla uses CostTableValue for *number of uses*, not CL,
|
||||||
|
// so we<77>ll assume default caster level = spell level * 2 - 1
|
||||||
|
int nSpellLevel = StringToInt(Get2DAString("spells", "Innate", nSubSpellID));
|
||||||
|
nFoundCL = nSpellLevel * 2 - 1; // default NWN caster level rule
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ip = GetNextItemProperty(oItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
return nFoundCL; // -1 if not found
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Checks if a given spell ID is present on the specified class's spell list for the caster.
|
||||||
|
*
|
||||||
|
* This function determines the spell level of the spell for the given class using PRCGetSpellLevelForClass.
|
||||||
|
* If the spell level is -1, the spell is not on the class's spell list.
|
||||||
|
* Otherwise, the spell is considered to be on the class spell list.
|
||||||
|
*
|
||||||
|
* @param oCaster The creature object casting or querying the spell.
|
||||||
|
* @param nSpellID The spell ID to check.
|
||||||
|
* @param nClass The class index to check the spell list against.
|
||||||
|
*
|
||||||
|
* @return TRUE if the spell is on the class's spell list; FALSE otherwise.
|
||||||
|
*/
|
||||||
|
int GetIsClassSpell(object oCaster, int nSpellID, int nClass)
|
||||||
|
{
|
||||||
|
if(DEBUG) DoDebug("inc_infusion >> GetIsClassSpell: nSpellID is: "+IntToString(nSpellID)+".");
|
||||||
|
if(DEBUG) DoDebug("inc_infusion >> GetIsClassSpell: nClass is: "+IntToString(nClass)+".");
|
||||||
|
|
||||||
|
int nSpellLevel = PRCGetSpellLevelForClass(nSpellID, nClass);
|
||||||
|
if (nSpellLevel == -1)
|
||||||
|
{
|
||||||
|
if(DEBUG) DoDebug("inc_infusion >> GetIsClassSpell: SpellLevel is "+IntToString(nSpellLevel)+".");
|
||||||
|
if(DEBUG) DoDebug("inc_infusion >> GetIsClassSpell: Spell "+IntToString(nSpellID)+" is not in spelllist of "+IntToString(nClass)+".");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Checks if the caster has the specified spell on any of their class spell lists.
|
||||||
|
*
|
||||||
|
* This function iterates through all classes the caster has (up to position 8),
|
||||||
|
* and returns TRUE if the spell is found on any class's spell list.
|
||||||
|
*
|
||||||
|
* @param oCaster The creature object to check.
|
||||||
|
* @param nSpellID The spell ID to search for.
|
||||||
|
*
|
||||||
|
* @return TRUE if the spell is present on at least one of the caster's class spell lists;
|
||||||
|
* FALSE otherwise.
|
||||||
|
*/
|
||||||
|
int GetHasSpellOnClassList(object oCaster, int nSpellID)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i <= 8; i++)
|
||||||
|
{
|
||||||
|
int nClass = GetClassByPosition(i, oCaster);
|
||||||
|
if (nClass == CLASS_TYPE_INVALID) continue;
|
||||||
|
|
||||||
|
if (GetIsClassSpell(oCaster, nSpellID, nClass))
|
||||||
|
{
|
||||||
|
if(DEBUG) DoDebug("inc_infusion >> GetHasSpellOnClassList: Class spell found.");
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(DEBUG) DoDebug("inc_infusion >> GetHasSpellOnClassList: Class spell not found.");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Applies a poison nausea effect to the user when infusion use fails.
|
||||||
|
*
|
||||||
|
* This function performs an immediate Fortitude saving throw against poison DC based on infusion caster level.
|
||||||
|
* If the user fails and is not immune to poison, an infusion nausea effect is applied, replacing any existing one.
|
||||||
|
* A second saving throw is scheduled after 1 minute to attempt to remove the effect.
|
||||||
|
*
|
||||||
|
* @param oUser The creature who used the infusion and may be poisoned.
|
||||||
|
* @param nInfusionCL The caster level of the infusion used, affecting the DC of the saving throw.
|
||||||
|
*/
|
||||||
|
void ApplyInfusionPoison(object oUser, int nInfusionCL)
|
||||||
|
{
|
||||||
|
int nDC = 10 + (nInfusionCL / 2);
|
||||||
|
int bImmune = GetIsImmune(oUser, IMMUNITY_TYPE_POISON);
|
||||||
|
|
||||||
|
// First save immediately
|
||||||
|
if (!bImmune && !PRCMySavingThrow(SAVING_THROW_FORT, oUser, nDC, SAVING_THROW_TYPE_POISON))
|
||||||
|
{
|
||||||
|
// Remove existing infusion poison nausea effect before applying new
|
||||||
|
effect eOld = GetFirstEffect(oUser);
|
||||||
|
while (GetIsEffectValid(eOld))
|
||||||
|
{
|
||||||
|
if (GetEffectTag(eOld) == "INFUSION_POISON_TAG")
|
||||||
|
{
|
||||||
|
RemoveEffect(oUser, eOld);
|
||||||
|
break; // Assuming only one effect with this tag
|
||||||
|
}
|
||||||
|
eOld = GetNextEffect(oUser);
|
||||||
|
}
|
||||||
|
|
||||||
|
effect eNausea = EffectNausea(oUser, 60.0f);
|
||||||
|
|
||||||
|
TagEffect(eNausea, "INFUSION_POISON_TAG");
|
||||||
|
FloatingTextStringOnCreature("The infusion has made you nauseous.", oUser);
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eNausea, oUser, RoundsToSeconds(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Second save 1 minute later
|
||||||
|
if (!bImmune)
|
||||||
|
{
|
||||||
|
DelayCommand(60.0, InfusionSecondSave(oUser, nDC));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void InfusionSecondSave(object oUser, int nDC)
|
||||||
|
{
|
||||||
|
if (!PRCMySavingThrow(SAVING_THROW_FORT, oUser, nDC, SAVING_THROW_TYPE_POISON))
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("The infusion has made you nauseous.", oUser);
|
||||||
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectNausea(oUser, 60.0f), oUser, RoundsToSeconds(10));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//:: void main (){}
|
||||||
@@ -1643,7 +1643,60 @@ int GetIsMagicItem(object oItem)
|
|||||||
int FeatToIprop(int nFeat)
|
int FeatToIprop(int nFeat)
|
||||||
{
|
{
|
||||||
switch(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_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_BATTLE_AXE: return IP_CONST_FEAT_WEAPON_FOCUS_BATTLE_AXE;
|
||||||
case FEAT_WEAPON_FOCUS_CLUB: return IP_CONST_FEAT_WEAPON_FOCUS_CLUB;
|
case FEAT_WEAPON_FOCUS_CLUB: return IP_CONST_FEAT_WEAPON_FOCUS_CLUB;
|
||||||
|
|||||||
@@ -242,25 +242,27 @@ void SetupLookupStage(object oMod, int n)
|
|||||||
case 11: SetLkupStage(n, oMod, CLASS_TYPE_DRAGON_SHAMAN, "cls_inv_drgshm"); break;
|
case 11: SetLkupStage(n, oMod, CLASS_TYPE_DRAGON_SHAMAN, "cls_inv_drgshm"); break;
|
||||||
case 12: SetLkupStage(n, oMod, CLASS_TYPE_WARLOCK, "cls_inv_warlok"); break;
|
case 12: SetLkupStage(n, oMod, CLASS_TYPE_WARLOCK, "cls_inv_warlok"); break;
|
||||||
case 13: SetLkupStage(n, oMod, CLASS_TYPE_ARCHIVIST, "cls_spell_archv"); break;
|
case 13: SetLkupStage(n, oMod, CLASS_TYPE_ARCHIVIST, "cls_spell_archv"); break;
|
||||||
case 14: SetLkupStage(n, oMod, CLASS_TYPE_ASSASSIN, "cls_spell_asasin"); break;
|
case 14: SetLkupStage(n, oMod, CLASS_TYPE_BARD, "cls_spell_bard"); break;
|
||||||
case 15: SetLkupStage(n, oMod, CLASS_TYPE_BARD, "cls_spell_bard"); break;
|
case 15: SetLkupStage(n, oMod, CLASS_TYPE_BEGUILER, "cls_spell_beguil"); break;
|
||||||
case 16: SetLkupStage(n, oMod, CLASS_TYPE_BEGUILER, "cls_spell_beguil"); break;
|
case 16: SetLkupStage(n, oMod, CLASS_TYPE_DREAD_NECROMANCER, "cls_spell_dnecro"); break;
|
||||||
case 17: SetLkupStage(n, oMod, CLASS_TYPE_DREAD_NECROMANCER, "cls_spell_dnecro"); break;
|
case 17: SetLkupStage(n, oMod, CLASS_TYPE_DUSKBLADE, "cls_spell_duskbl"); break;
|
||||||
case 18: SetLkupStage(n, oMod, CLASS_TYPE_DUSKBLADE, "cls_spell_duskbl"); break;
|
case 18: SetLkupStage(n, oMod, CLASS_TYPE_FAVOURED_SOUL, "cls_spell_favsol"); break;
|
||||||
case 19: SetLkupStage(n, oMod, CLASS_TYPE_FAVOURED_SOUL, "cls_spell_favsol"); break;
|
case 19: SetLkupStage(n, oMod, CLASS_TYPE_HARPER, "cls_spell_harper"); break;
|
||||||
case 20: SetLkupStage(n, oMod, CLASS_TYPE_HARPER, "cls_spell_harper"); break;
|
case 20: SetLkupStage(n, oMod, CLASS_TYPE_HEXBLADE, "cls_spell_hexbl"); break;
|
||||||
case 21: SetLkupStage(n, oMod, CLASS_TYPE_HEXBLADE, "cls_spell_hexbl"); break;
|
case 21: SetLkupStage(n, oMod, CLASS_TYPE_JUSTICEWW, "cls_spell_justww"); break;
|
||||||
case 22: SetLkupStage(n, oMod, CLASS_TYPE_JUSTICEWW, "cls_spell_justww"); break;
|
case 22: SetLkupStage(n, oMod, CLASS_TYPE_SORCERER, "cls_spell_sorc"); break;
|
||||||
case 23: SetLkupStage(n, oMod, CLASS_TYPE_SORCERER, "cls_spell_sorc"); break;
|
case 23: SetLkupStage(n, oMod, CLASS_TYPE_SUBLIME_CHORD, "cls_spell_schord"); break;
|
||||||
case 24: SetLkupStage(n, oMod, CLASS_TYPE_SUBLIME_CHORD, "cls_spell_schord"); break;
|
case 24: SetLkupStage(n, oMod, CLASS_TYPE_SUEL_ARCHANAMACH, "cls_spell_suel"); break;
|
||||||
case 25: SetLkupStage(n, oMod, CLASS_TYPE_SUEL_ARCHANAMACH, "cls_spell_suel"); break;
|
case 25: SetLkupStage(n, oMod, CLASS_TYPE_VIGILANT, "cls_spell_vigil"); break;
|
||||||
case 26: SetLkupStage(n, oMod, CLASS_TYPE_VIGILANT, "cls_spell_vigil"); break;
|
case 26: SetLkupStage(n, oMod, CLASS_TYPE_WARMAGE, "cls_spell_wrmage"); break;
|
||||||
case 27: SetLkupStage(n, oMod, CLASS_TYPE_WARMAGE, "cls_spell_wrmage"); break;
|
case 27: SetLkupStage(n, oMod, CLASS_TYPE_KNIGHT_WEAVE, "cls_spell_kngtwv"); break;
|
||||||
case 28: SetLkupStage(n, oMod, CLASS_TYPE_KNIGHT_WEAVE, "cls_spell_kngtwv"); break;
|
case 28: SetLkupStage(n, oMod, CLASS_TYPE_PSYCHIC_ROGUE, "cls_psipw_psyrog"); break;
|
||||||
case 29: SetLkupStage(n, oMod, CLASS_TYPE_PSYCHIC_ROGUE, "cls_psipw_psyrog"); break;
|
case 29: SetLkupStage(n, oMod, CLASS_TYPE_SHADOWCASTER, "cls_myst_shdcst"); break;
|
||||||
case 30: SetLkupStage(n, oMod, CLASS_TYPE_SHADOWCASTER, "cls_myst_shdcst"); break;
|
case 30: SetLkupStage(n, oMod, CLASS_TYPE_SHADOWSMITH, "cls_myst_shdsmt"); break;
|
||||||
case 31: SetLkupStage(n, oMod, CLASS_TYPE_SHADOWSMITH, "cls_myst_shdsmt"); break;
|
case 31: SetLkupStage(n, oMod, CLASS_TYPE_CELEBRANT_SHARESS, "cls_spell_sharss"); break;
|
||||||
case 32: SetLkupStage(n, oMod, CLASS_TYPE_CELEBRANT_SHARESS, "cls_spell_sharss"); break;
|
|
||||||
|
//:: These were all moved to the Bioware spellbooks -Jaysyn
|
||||||
|
//case 14: SetLkupStage(n, oMod, CLASS_TYPE_ASSASSIN, "cls_spell_asasin"); break;
|
||||||
//case 46: SetLkupStage(n, oMod, CLASS_TYPE_CULTIST_SHATTERED_PEAK, "cls_spell_cultst"); break;
|
//case 46: SetLkupStage(n, oMod, CLASS_TYPE_CULTIST_SHATTERED_PEAK, "cls_spell_cultst"); break;
|
||||||
//case 40: SetLkupStage(n, oMod, CLASS_TYPE_NENTYAR_HUNTER, "cls_spell_hunter"); break;
|
//case 40: SetLkupStage(n, oMod, CLASS_TYPE_NENTYAR_HUNTER, "cls_spell_hunter"); break;
|
||||||
//case 28: SetLkupStage(n, oMod, CLASS_TYPE_SHADOWLORD, "cls_spell_tfshad"); break;
|
//case 28: SetLkupStage(n, oMod, CLASS_TYPE_SHADOWLORD, "cls_spell_tfshad"); break;
|
||||||
@@ -528,7 +530,7 @@ int SpellToSpellbookID(int nSpell)
|
|||||||
int nOutSpellID = GetLocalInt(oWP, /*"PRC_GetRowFromSpellID_" + */IntToString(nSpell));
|
int nOutSpellID = GetLocalInt(oWP, /*"PRC_GetRowFromSpellID_" + */IntToString(nSpell));
|
||||||
if(nOutSpellID == 0)
|
if(nOutSpellID == 0)
|
||||||
nOutSpellID = -1;
|
nOutSpellID = -1;
|
||||||
//if(DEBUG) DoDebug("SpellToSpellbookID(" + IntToString(nSpell) + ", " + sFile + ") = " + IntToString(nOutSpellID));
|
if(DEBUG) DoDebug("inc_lookup >> SpellToSpellbookID: (nSpell: " + IntToString(nSpell) + ") = nOutSpellID: " + IntToString(nOutSpellID));
|
||||||
return nOutSpellID;
|
return nOutSpellID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ Make cls_spcr_*.2da
|
|||||||
Make blank cls_spell_*.2da
|
Make blank cls_spell_*.2da
|
||||||
Add cls_spgn_*.2da to classes.2da
|
Add cls_spgn_*.2da to classes.2da
|
||||||
Add class entry in prc_classes.2da
|
Add class entry in prc_classes.2da
|
||||||
Add the spellbook feat (#1999) to cls_feat_*.2da at the appropriate level
|
Add the spellbook feat (#1999) to cls_feat_*.2da at the appropriate level (not needed for NWN:EE)
|
||||||
Add class to PRCGetSpellSaveDC() in prc_add_spell_dc
|
Add class to PRCGetSpellSaveDC() in prc_add_spell_dc
|
||||||
Add class to GetSpellbookTypeForClass() below
|
Add class to GetSpellbookTypeForClass() below
|
||||||
Add class to GetAbilityScoreForClass() below
|
Add class to GetAbilityScoreForClass() below
|
||||||
@@ -20,6 +20,8 @@ Add class to GetCasterLvl() in prc_inc_spells
|
|||||||
Add Practiced Spellcaster feat to feat.2da and to PracticedSpellcasting() in prc_inc_castlvl
|
Add Practiced Spellcaster feat to feat.2da and to PracticedSpellcasting() in prc_inc_castlvl
|
||||||
Run the assemble_spellbooks.bat file
|
Run the assemble_spellbooks.bat file
|
||||||
Make the prc_* scripts in newspellbook. The filenames can be found under the spell entries for the class in spells.2da.
|
Make the prc_* scripts in newspellbook. The filenames can be found under the spell entries for the class in spells.2da.
|
||||||
|
Update the fileends for all relevant files in inc_switch_setup
|
||||||
|
Delete prc_data in the \database\ folder before testing new spells.
|
||||||
|
|
||||||
Spont:
|
Spont:
|
||||||
Make cls_spgn_*.2da
|
Make cls_spgn_*.2da
|
||||||
@@ -41,6 +43,8 @@ Add class to prc_amagsys_gain if(CheckMissingSpells(oPC, CLASS_TYPE_SORCERER, Mi
|
|||||||
Add class to ExecuteScript("prc_amagsys_gain", oPC) list in EvalPRCFeats in prc_inc_function
|
Add class to ExecuteScript("prc_amagsys_gain", oPC) list in EvalPRCFeats in prc_inc_function
|
||||||
Run the assemble_spellbooks.bat file
|
Run the assemble_spellbooks.bat file
|
||||||
Make the prc_* scripts in newspellbook
|
Make the prc_* scripts in newspellbook
|
||||||
|
Update the fileends for all relevant files in inc_switch_setup
|
||||||
|
Delete prc_data in the \database\ folder before testing new spells.
|
||||||
|
|
||||||
prc_classes.2da entry:
|
prc_classes.2da entry:
|
||||||
Label - name for the class
|
Label - name for the class
|
||||||
@@ -104,11 +108,10 @@ void ProcessPreparedSpellLevel(object oPC, int nClass, int nSpellLevel, int nLev
|
|||||||
//#include "prc_effect_inc" //access via prc_inc_core
|
//#include "prc_effect_inc" //access via prc_inc_core
|
||||||
//#include "inc_lookups" //access via prc_inc_core
|
//#include "inc_lookups" //access via prc_inc_core
|
||||||
#include "prc_inc_core"
|
#include "prc_inc_core"
|
||||||
#include "inc_sp_gain_mem" //providing child access to prc_inc_core
|
#include "inc_sp_gain_mem"
|
||||||
//Must load in this order.
|
|
||||||
//#include "prc_inc_castlvl" //access via prc_inc_core
|
//#include "prc_inc_castlvl" //access via prc_inc_core
|
||||||
//#include "prc_inc_descrptr" //access via prc_inc_core
|
//#include "prc_inc_descrptr" //access via prc_inc_core
|
||||||
|
#include "inc_item_props"
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Function definitions */
|
/* Function definitions */
|
||||||
@@ -119,6 +122,7 @@ int GetSpellbookTypeForClass(int nClass)
|
|||||||
switch(nClass)
|
switch(nClass)
|
||||||
{
|
{
|
||||||
case CLASS_TYPE_ARCHIVIST:
|
case CLASS_TYPE_ARCHIVIST:
|
||||||
|
case CLASS_TYPE_ASSASSIN:
|
||||||
case CLASS_TYPE_BLACKGUARD:
|
case CLASS_TYPE_BLACKGUARD:
|
||||||
case CLASS_TYPE_BLIGHTER:
|
case CLASS_TYPE_BLIGHTER:
|
||||||
case CLASS_TYPE_CLERIC:
|
case CLASS_TYPE_CLERIC:
|
||||||
@@ -141,7 +145,6 @@ int GetSpellbookTypeForClass(int nClass)
|
|||||||
case CLASS_TYPE_VIGILANT:
|
case CLASS_TYPE_VIGILANT:
|
||||||
case CLASS_TYPE_WIZARD:
|
case CLASS_TYPE_WIZARD:
|
||||||
return SPELLBOOK_TYPE_PREPARED;
|
return SPELLBOOK_TYPE_PREPARED;
|
||||||
case CLASS_TYPE_ASSASSIN:
|
|
||||||
case CLASS_TYPE_BARD:
|
case CLASS_TYPE_BARD:
|
||||||
case CLASS_TYPE_BEGUILER:
|
case CLASS_TYPE_BEGUILER:
|
||||||
case CLASS_TYPE_CELEBRANT_SHARESS:
|
case CLASS_TYPE_CELEBRANT_SHARESS:
|
||||||
@@ -559,7 +562,7 @@ int bKnowsAllClassSpells(int nClass)
|
|||||||
{
|
{
|
||||||
//case CLASS_TYPE_WIZARD:
|
//case CLASS_TYPE_WIZARD:
|
||||||
case CLASS_TYPE_ARCHIVIST:
|
case CLASS_TYPE_ARCHIVIST:
|
||||||
case CLASS_TYPE_ASSASSIN:
|
//case CLASS_TYPE_ASSASSIN:
|
||||||
case CLASS_TYPE_BARD:
|
case CLASS_TYPE_BARD:
|
||||||
case CLASS_TYPE_CELEBRANT_SHARESS:
|
case CLASS_TYPE_CELEBRANT_SHARESS:
|
||||||
case CLASS_TYPE_CULTIST_SHATTERED_PEAK:
|
case CLASS_TYPE_CULTIST_SHATTERED_PEAK:
|
||||||
@@ -580,7 +583,79 @@ int bKnowsAllClassSpells(int nClass)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int GetSpellKnownMaxCount(int nLevel, int nSpellLevel, int nClass, object oPC)
|
int GetSpellKnownMaxCount(int nLevel, int nSpellLevel, int nClass, object oPC)
|
||||||
|
{
|
||||||
|
// If the character doesn't have any spell slots available on for this level, it can't know any spells of that level either
|
||||||
|
if(!GetSlotCount(nLevel, nSpellLevel, GetAbilityScoreForClass(nClass, oPC), nClass))
|
||||||
|
{
|
||||||
|
if(DEBUG) DoDebug("GetSpellKnownMaxCount: No slots available for " + IntToString(nClass) + " level " + IntToString(nLevel) + " circle " + IntToString(nSpellLevel));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int nKnown;
|
||||||
|
string sFile = Get2DACache("classes", "SpellKnownTable", nClass);
|
||||||
|
string sKnown = Get2DACache(sFile, "SpellLevel" + IntToString(nSpellLevel), nLevel - 1);
|
||||||
|
|
||||||
|
if(DEBUG)
|
||||||
|
{
|
||||||
|
DoDebug("GetSpellKnownMaxCount Details:");
|
||||||
|
DoDebug("- Class: " + IntToString(nClass));
|
||||||
|
DoDebug("- Passed Level: " + IntToString(nLevel));
|
||||||
|
DoDebug("- Base Class Level: " + IntToString(GetLevelByClass(nClass, oPC)));
|
||||||
|
DoDebug("- Effective Level: " + IntToString(GetSpellslotLevel(nClass, oPC)));
|
||||||
|
DoDebug("- Spell Level: " + IntToString(nSpellLevel));
|
||||||
|
DoDebug("- SpellKnownTable: " + sFile);
|
||||||
|
DoDebug("- MaxKnown from 2DA: " + sKnown);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(sKnown == "")
|
||||||
|
{
|
||||||
|
nKnown = -1;
|
||||||
|
if(DEBUG) DoDebug("GetSpellKnownMaxCount: Problem getting known numbers");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
nKnown = StringToInt(sKnown);
|
||||||
|
|
||||||
|
if(nKnown == -1)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// COMPLETELY REWROTE THIS SECTION
|
||||||
|
// Bard and Sorcerer logic for prestige class advancement
|
||||||
|
if(nClass == CLASS_TYPE_SORCERER || nClass == CLASS_TYPE_BARD)
|
||||||
|
{
|
||||||
|
int baseClassLevel = GetLevelByClass(nClass, oPC);
|
||||||
|
int effectiveLevel = GetSpellslotLevel(nClass, oPC);
|
||||||
|
|
||||||
|
// Debug the values we're checking
|
||||||
|
if(DEBUG)
|
||||||
|
{
|
||||||
|
DoDebug("Spont caster check - Base level: " + IntToString(baseClassLevel) +
|
||||||
|
", Effective level: " + IntToString(effectiveLevel));
|
||||||
|
}
|
||||||
|
|
||||||
|
// If they have prestige class advancement OR special feats, they should get spells
|
||||||
|
if(effectiveLevel > baseClassLevel ||
|
||||||
|
GetHasFeat(FEAT_DRACONIC_GRACE, oPC) ||
|
||||||
|
GetHasFeat(FEAT_DRACONIC_BREATH, oPC))
|
||||||
|
{
|
||||||
|
// Allow them to get spells - do nothing here, return nKnown at the end
|
||||||
|
if(DEBUG) DoDebug("Spontaneous caster eligible for new spells");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// No advancement, no special feats - no new spells
|
||||||
|
if(DEBUG) DoDebug("Spontaneous caster NOT eligible for new spells");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(DEBUG) DoDebug("Final spell known count: " + IntToString(nKnown));
|
||||||
|
return nKnown;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* int GetSpellKnownMaxCount(int nLevel, int nSpellLevel, int nClass, object oPC)
|
||||||
{
|
{
|
||||||
// If the character doesn't have any spell slots available on for this level, it can't know any spells of that level either
|
// If the character doesn't have any spell slots available on for this level, it can't know any spells of that level either
|
||||||
// @todo Check rules. There might be cases where this doesn't hold
|
// @todo Check rules. There might be cases where this doesn't hold
|
||||||
@@ -588,22 +663,9 @@ int GetSpellKnownMaxCount(int nLevel, int nSpellLevel, int nClass, object oPC)
|
|||||||
return 0;
|
return 0;
|
||||||
int nKnown;
|
int nKnown;
|
||||||
string sFile;
|
string sFile;
|
||||||
// Bioware casters use their classes.2da-specified tables
|
|
||||||
/*if( nClass == CLASS_TYPE_WIZARD
|
|
||||||
|| nClass == CLASS_TYPE_SORCERER
|
|
||||||
|| nClass == CLASS_TYPE_BARD
|
|
||||||
|| nClass == CLASS_TYPE_CLERIC
|
|
||||||
|| nClass == CLASS_TYPE_DRUID
|
|
||||||
|| nClass == CLASS_TYPE_PALADIN
|
|
||||||
|| nClass == CLASS_TYPE_RANGER)
|
|
||||||
{*/
|
|
||||||
sFile = Get2DACache("classes", "SpellKnownTable", nClass);
|
sFile = Get2DACache("classes", "SpellKnownTable", nClass);
|
||||||
/*}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sFile = Get2DACache("classes", "FeatsTable", nClass);
|
|
||||||
sFile = "cls_spkn" + GetStringRight(sFile, GetStringLength(sFile) - 8); // Hardcoded the cls_ part. It's not as if any class uses some other prefix - Ornedan, 20061231
|
|
||||||
}*/
|
|
||||||
|
|
||||||
string sKnown = Get2DACache(sFile, "SpellLevel" + IntToString(nSpellLevel), nLevel - 1);
|
string sKnown = Get2DACache(sFile, "SpellLevel" + IntToString(nSpellLevel), nLevel - 1);
|
||||||
if(DEBUG) DoDebug("GetSpellKnownMaxCount(" + IntToString(nLevel) + ", " + IntToString(nSpellLevel) + ", " + IntToString(nClass) + ", " + GetName(oPC) + ") = " + sKnown);
|
if(DEBUG) DoDebug("GetSpellKnownMaxCount(" + IntToString(nLevel) + ", " + IntToString(nSpellLevel) + ", " + IntToString(nClass) + ", " + GetName(oPC) + ") = " + sKnown);
|
||||||
@@ -626,6 +688,7 @@ int GetSpellKnownMaxCount(int nLevel, int nSpellLevel, int nClass, object oPC)
|
|||||||
}
|
}
|
||||||
return nKnown;
|
return nKnown;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
int GetSpellKnownCurrentCount(object oPC, int nSpellLevel, int nClass)
|
int GetSpellKnownCurrentCount(object oPC, int nSpellLevel, int nClass)
|
||||||
{
|
{
|
||||||
@@ -693,6 +756,44 @@ int GetSpellKnownCurrentCount(object oPC, int nSpellLevel, int nClass)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int GetSpellUnknownCurrentCount(object oPC, int nSpellLevel, int nClass)
|
int GetSpellUnknownCurrentCount(object oPC, int nSpellLevel, int nClass)
|
||||||
|
{
|
||||||
|
// Get the lookup token created by MakeSpellbookLevelLoop()
|
||||||
|
string sTag = "SpellLvl_" + IntToString(nClass) + "_Level_" + IntToString(nSpellLevel);
|
||||||
|
object oCache = GetObjectByTag(sTag);
|
||||||
|
if(!GetIsObjectValid(oCache))
|
||||||
|
{
|
||||||
|
if(DEBUG) DoDebug("GetSpellUnknownCurrentCount: " + sTag + " is not valid");
|
||||||
|
|
||||||
|
// Add code to create the missing lookup object
|
||||||
|
if(DEBUG) DoDebug("Attempting to create missing spell lookup token");
|
||||||
|
ExecuteScript("prc_create_spellb", oPC);
|
||||||
|
|
||||||
|
// Try again after creating it
|
||||||
|
oCache = GetObjectByTag(sTag);
|
||||||
|
if(!GetIsObjectValid(oCache))
|
||||||
|
{
|
||||||
|
if(DEBUG) DoDebug("Still couldn't create spell lookup token");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(DEBUG) DoDebug("Successfully created spell lookup token");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read the total number of spells on the given level and determine how many are already known
|
||||||
|
int nTotal = array_get_size(oCache, "Lkup");
|
||||||
|
int nKnown = GetSpellKnownCurrentCount(oPC, nSpellLevel, nClass);
|
||||||
|
int nUnknown = nTotal - nKnown;
|
||||||
|
|
||||||
|
if(DEBUG) DoDebug("GetSpellUnknownCurrentCount(" + GetName(oPC) + ", " + IntToString(nSpellLevel) + ", " + IntToString(nClass) + ") = " + IntToString(nUnknown));
|
||||||
|
if(DEBUG) DoDebug(" Total spells in lookup: " + IntToString(nTotal) + ", Known spells: " + IntToString(nKnown));
|
||||||
|
|
||||||
|
return nUnknown;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* int GetSpellUnknownCurrentCount(object oPC, int nSpellLevel, int nClass)
|
||||||
{
|
{
|
||||||
// Get the lookup token created by MakeSpellbookLevelLoop()
|
// Get the lookup token created by MakeSpellbookLevelLoop()
|
||||||
string sTag = "SpellLvl_" + IntToString(nClass) + "_Level_" + IntToString(nSpellLevel);
|
string sTag = "SpellLvl_" + IntToString(nClass) + "_Level_" + IntToString(nSpellLevel);
|
||||||
@@ -709,7 +810,7 @@ int GetSpellUnknownCurrentCount(object oPC, int nSpellLevel, int nClass)
|
|||||||
|
|
||||||
if(DEBUG) DoDebug("GetSpellUnknownCurrentCount(" + GetName(oPC) + ", " + IntToString(nSpellLevel) + ", " + IntToString(nClass) + ") = " + IntToString(nUnknown));
|
if(DEBUG) DoDebug("GetSpellUnknownCurrentCount(" + GetName(oPC) + ", " + IntToString(nSpellLevel) + ", " + IntToString(nClass) + ") = " + IntToString(nUnknown));
|
||||||
return nUnknown;
|
return nUnknown;
|
||||||
}
|
} */
|
||||||
|
|
||||||
void AddSpellUse(object oPC, int nSpellbookID, int nClass, string sFile, string sArrayName, int nSpellbookType, object oSkin, int nFeatID, int nIPFeatID, string sIDX = "")
|
void AddSpellUse(object oPC, int nSpellbookID, int nClass, string sFile, string sArrayName, int nSpellbookType, object oSkin, int nFeatID, int nIPFeatID, string sIDX = "")
|
||||||
{
|
{
|
||||||
@@ -850,7 +951,7 @@ void SetupSpells(object oPC, int nClass)
|
|||||||
int nAbility = GetAbilityScoreForClass(nClass, oPC);
|
int nAbility = GetAbilityScoreForClass(nClass, oPC);
|
||||||
int nSpellbookType = GetSpellbookTypeForClass(nClass);
|
int nSpellbookType = GetSpellbookTypeForClass(nClass);
|
||||||
|
|
||||||
if(DEBUG) DoDebug("SetupSpells\n"
|
if(DEBUG) DoDebug("SetupSpells()\n"
|
||||||
+ "nClass = " + IntToString(nClass) + "\n"
|
+ "nClass = " + IntToString(nClass) + "\n"
|
||||||
+ "nSpellslotLevel = " + IntToString(nLevel) + "\n"
|
+ "nSpellslotLevel = " + IntToString(nLevel) + "\n"
|
||||||
+ "nAbility = " + IntToString(nAbility) + "\n"
|
+ "nAbility = " + IntToString(nAbility) + "\n"
|
||||||
@@ -1178,7 +1279,7 @@ void CastSpontaneousSpell(int nClass, int bInstantSpell = FALSE)
|
|||||||
else if(GetLocalInt(OBJECT_SELF, "PRC_metamagic_state") == 1)
|
else if(GetLocalInt(OBJECT_SELF, "PRC_metamagic_state") == 1)
|
||||||
SetLocalInt(OBJECT_SELF, "MetamagicFeatAdjust", 0);
|
SetLocalInt(OBJECT_SELF, "MetamagicFeatAdjust", 0);
|
||||||
}
|
}
|
||||||
|
if (DEBUG) DoDebug("CastSpontaneousSpell(): nSpellLevel is: "+IntToString(nSpellLevel)+".");
|
||||||
CheckSpontSlots(nClass, nSpellID, nSpellLevel);
|
CheckSpontSlots(nClass, nSpellID, nSpellLevel);
|
||||||
if(GetLocalInt(OBJECT_SELF, "NSB_Cast"))
|
if(GetLocalInt(OBJECT_SELF, "NSB_Cast"))
|
||||||
ActionDoCommand(CheckSpontSlots(nClass, nSpellID, nSpellLevel, TRUE));
|
ActionDoCommand(CheckSpontSlots(nClass, nSpellID, nSpellLevel, TRUE));
|
||||||
@@ -1331,6 +1432,8 @@ void NewSpellbookSpell(int nClass, int nSpellbookType, int nMetamagic = METAMAGI
|
|||||||
string sFile = GetFileForClass(nClass);
|
string sFile = GetFileForClass(nClass);
|
||||||
int nSpellLevel = StringToInt(Get2DACache(sFile, "Level", nSpellbookID));
|
int nSpellLevel = StringToInt(Get2DACache(sFile, "Level", nSpellbookID));
|
||||||
|
|
||||||
|
if (DEBUG) DoDebug("inc_newspellbook >> NewSpellbookSpell(): nSpellbookType is: "+IntToString(nSpellbookType)+".");
|
||||||
|
|
||||||
// Make sure the caster has uses of this spell remaining
|
// Make sure the caster has uses of this spell remaining
|
||||||
// 2009-9-20: Add metamagic feat abilities. -N-S
|
// 2009-9-20: Add metamagic feat abilities. -N-S
|
||||||
if(nSpellbookType == SPELLBOOK_TYPE_PREPARED)
|
if(nSpellbookType == SPELLBOOK_TYPE_PREPARED)
|
||||||
@@ -1371,13 +1474,14 @@ void NewSpellbookSpell(int nClass, int nSpellbookType, int nMetamagic = METAMAGI
|
|||||||
else if(nSpellLevel > 9)//now test the spell level
|
else if(nSpellLevel > 9)//now test the spell level
|
||||||
{
|
{
|
||||||
nMetamagic = METAMAGIC_NONE;
|
nMetamagic = METAMAGIC_NONE;
|
||||||
ActionDoCommand(SendMessageToPC(oPC, "Modified spell level is to high! Casting spell without metamagic"));
|
ActionDoCommand(SendMessageToPC(oPC, "Modified spell level is too high! Casting spell without metamagic"));
|
||||||
nSpellLevel = nSpellSlotLevel;
|
nSpellLevel = nSpellSlotLevel;
|
||||||
}
|
}
|
||||||
else if(GetLocalInt(oPC, "PRC_metamagic_state") == 1)
|
else if(GetLocalInt(oPC, "PRC_metamagic_state") == 1)
|
||||||
SetLocalInt(oPC, "MetamagicFeatAdjust", 0);
|
SetLocalInt(oPC, "MetamagicFeatAdjust", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (DEBUG) DoDebug("inc_newspellbook >> NewSpellbookSpell(): nSpellLevel is: "+IntToString(nSpellLevel)+".");
|
||||||
CheckSpontSlots(nClass, nSpellID, nSpellLevel);
|
CheckSpontSlots(nClass, nSpellID, nSpellLevel);
|
||||||
if(GetLocalInt(oPC, "NSB_Cast"))
|
if(GetLocalInt(oPC, "NSB_Cast"))
|
||||||
ActionDoCommand(CheckSpontSlots(nClass, nSpellID, nSpellLevel, TRUE));
|
ActionDoCommand(CheckSpontSlots(nClass, nSpellID, nSpellLevel, TRUE));
|
||||||
@@ -1460,7 +1564,7 @@ void CheckPrepSlots(int nClass, int nSpellID, int nSpellbookID, int bIsAction =
|
|||||||
{
|
{
|
||||||
DeleteLocalInt(OBJECT_SELF, "NSB_Cast");
|
DeleteLocalInt(OBJECT_SELF, "NSB_Cast");
|
||||||
int nCount = persistant_array_get_int(OBJECT_SELF, "NewSpellbookMem_" + IntToString(nClass), nSpellbookID);
|
int nCount = persistant_array_get_int(OBJECT_SELF, "NewSpellbookMem_" + IntToString(nClass), nSpellbookID);
|
||||||
if(DEBUG) DoDebug("NewSpellbookSpell: NewSpellbookMem_" + IntToString(nClass) + "[" + IntToString(nSpellbookID) + "] = " + IntToString(nCount));
|
if(DEBUG) DoDebug("NewSpellbookSpell >> CheckPrepSlots: NewSpellbookMem_" + IntToString(nClass) + "[SpellbookID: " + IntToString(nSpellbookID) + "] = " + IntToString(nCount));
|
||||||
if(nCount < 1)
|
if(nCount < 1)
|
||||||
{
|
{
|
||||||
string sSpellName = GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpellID)));
|
string sSpellName = GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSpellID)));
|
||||||
@@ -1486,7 +1590,7 @@ void CheckSpontSlots(int nClass, int nSpellID, int nSpellSlotLevel, int bIsActio
|
|||||||
{
|
{
|
||||||
DeleteLocalInt(OBJECT_SELF, "NSB_Cast");
|
DeleteLocalInt(OBJECT_SELF, "NSB_Cast");
|
||||||
int nCount = persistant_array_get_int(OBJECT_SELF, "NewSpellbookMem_" + IntToString(nClass), nSpellSlotLevel);
|
int nCount = persistant_array_get_int(OBJECT_SELF, "NewSpellbookMem_" + IntToString(nClass), nSpellSlotLevel);
|
||||||
if(DEBUG) DoDebug("NewSpellbookSpell: NewSpellbookMem_" + IntToString(nClass) + "[" + IntToString(nSpellSlotLevel) + "] = " + IntToString(nCount));
|
if(DEBUG) DoDebug("NewSpellbookSpell >> CheckSpontSlots: NewSpellbookMem_" + IntToString(nClass) + "[SpellSlotLevel: " + IntToString(nSpellSlotLevel) + "] = " + IntToString(nCount));
|
||||||
if(nCount < 1)
|
if(nCount < 1)
|
||||||
{
|
{
|
||||||
// "You have no castings of spells of level " + IntToString(nSpellLevel) + " remaining"
|
// "You have no castings of spells of level " + IntToString(nSpellLevel) + " remaining"
|
||||||
@@ -1517,6 +1621,3 @@ void DoCleanUp(int nMetamagic)
|
|||||||
DeleteLocalInt(OBJECT_SELF, "NSB_SpellLevel");
|
DeleteLocalInt(OBJECT_SELF, "NSB_SpellLevel");
|
||||||
DeleteLocalInt(OBJECT_SELF, "NSB_SpellbookID");
|
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.
|
// 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 the associate type of the specified creature.
|
||||||
// - Returns ASSOCIATE_TYPE_NONE if the creature is not the associate of anyone.
|
// - Returns ASSOCIATE_TYPE_NONE if the creature is not the associate of anyone.
|
||||||
@@ -75,7 +78,6 @@ void DestroySummon(object oSummon)
|
|||||||
DestroyObject(oSummon);
|
DestroyObject(oSummon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
object CreateLocalNPC(object oMaster,int nAssociateType,string sTemplate,location loc,int Nth=1,string sTag="")
|
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);
|
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);
|
SetLocalObject(oMaster, IntToString(nAssociateType)+"oHench"+IntToString(nCount), oSummon);
|
||||||
SetLocalInt(oSummon, "iAssocNth", nCount);
|
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_2_METERS);
|
||||||
SetAssociateState(NW_ASC_DISTANCE_4_METERS, FALSE);
|
SetAssociateState(NW_ASC_DISTANCE_4_METERS, FALSE);
|
||||||
SetAssociateState(NW_ASC_DISTANCE_6_METERS, FALSE);
|
SetAssociateState(NW_ASC_DISTANCE_6_METERS, FALSE);
|
||||||
@@ -122,6 +124,7 @@ object CreateLocalNextNPC(object oMaster,int nAssociateType,string sTemplate,loc
|
|||||||
return oSummon;
|
return oSummon;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
object GetMasterNPC(object oAssociate=OBJECT_SELF)
|
object GetMasterNPC(object oAssociate=OBJECT_SELF)
|
||||||
{
|
{
|
||||||
object oMaster = GetLocalObject(oAssociate, "oMaster");
|
object oMaster = GetLocalObject(oAssociate, "oMaster");
|
||||||
@@ -220,4 +223,173 @@ int GetAssociateHealMasterNPC()
|
|||||||
return FALSE;
|
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_LIGHTFLAIL:
|
||||||
case BASE_ITEM_KATANA:
|
case BASE_ITEM_KATANA:
|
||||||
case BASE_ITEM_MAGICSTAFF:
|
case BASE_ITEM_MAGICSTAFF:
|
||||||
|
case BASE_ITEM_CRAFTED_SCEPTER:
|
||||||
case BASE_ITEM_LONGSWORD:
|
case BASE_ITEM_LONGSWORD:
|
||||||
case BASE_ITEM_TRIDENT:
|
case BASE_ITEM_TRIDENT:
|
||||||
case BASE_ITEM_MORNINGSTAR:
|
case BASE_ITEM_MORNINGSTAR:
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ int GetDamageFromConstant(int nIPConst);
|
|||||||
void DoFrostRend(object oTarget, object oAttacker, object oWeapon);
|
void DoFrostRend(object oTarget, object oAttacker, object oWeapon);
|
||||||
|
|
||||||
#include "moi_inc_moifunc"
|
#include "moi_inc_moifunc"
|
||||||
|
#include "prc_inc_combat"
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Function defintions */
|
/* Function defintions */
|
||||||
|
|||||||
@@ -17,9 +17,6 @@ Created: May 1, 2008
|
|||||||
|
|
||||||
//:: Updated for .35 by Jaysyn 2023/03/11
|
//:: Updated for .35 by Jaysyn 2023/03/11
|
||||||
|
|
||||||
//:: Test Void
|
|
||||||
//void main (){}
|
|
||||||
|
|
||||||
//:://////////////////////////////////////////////
|
//:://////////////////////////////////////////////
|
||||||
//:: Constants
|
//:: Constants
|
||||||
//:://////////////////////////////////////////////
|
//:://////////////////////////////////////////////
|
||||||
@@ -63,6 +60,14 @@ string GetMetaMagicString(int nMetaMagic);
|
|||||||
int GetMetaMagicFromFeat(int nFeat);
|
int GetMetaMagicFromFeat(int nFeat);
|
||||||
int GetMetaMagicOfCaster(object oPC = OBJECT_SELF);
|
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_*)
|
// name of the new spellbook file (cls_spell_*)
|
||||||
string GetNSBDefinitionFileName(int nClass)
|
string GetNSBDefinitionFileName(int nClass)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ void CreateSwitchNameArray();
|
|||||||
|
|
||||||
#include "prc_inc_array" // Needs direct include instead of inc_utility
|
#include "prc_inc_array" // Needs direct include instead of inc_utility
|
||||||
#include "prc_inc_switch"
|
#include "prc_inc_switch"
|
||||||
|
#include "inc_2dacache"
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Function definitions */
|
/* Function definitions */
|
||||||
@@ -221,9 +222,9 @@ void SetDefaultFileEnds()
|
|||||||
SetPRCSwitch("PRC_FILE_END_cls_spcr_bard", 144);
|
SetPRCSwitch("PRC_FILE_END_cls_spcr_bard", 144);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spcr_beguil", 142);
|
SetPRCSwitch("PRC_FILE_END_cls_spcr_beguil", 142);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spcr_blkgrd", 47);
|
SetPRCSwitch("PRC_FILE_END_cls_spcr_blkgrd", 47);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spcr_dnecro", 137);
|
SetPRCSwitch("PRC_FILE_END_cls_spcr_dnecro", 138);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spcr_duskbl", 69);
|
SetPRCSwitch("PRC_FILE_END_cls_spcr_duskbl", 69);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spcr_favsol", 290);
|
SetPRCSwitch("PRC_FILE_END_cls_spcr_favsol", 300);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spcr_harper", 35);
|
SetPRCSwitch("PRC_FILE_END_cls_spcr_harper", 35);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spcr_healer", 77);
|
SetPRCSwitch("PRC_FILE_END_cls_spcr_healer", 77);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spcr_hexbl", 73);
|
SetPRCSwitch("PRC_FILE_END_cls_spcr_hexbl", 73);
|
||||||
@@ -251,9 +252,9 @@ void SetDefaultFileEnds()
|
|||||||
SetPRCSwitch("PRC_FILE_END_cls_spell_bard", 169);
|
SetPRCSwitch("PRC_FILE_END_cls_spell_bard", 169);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spell_beguil", 119);
|
SetPRCSwitch("PRC_FILE_END_cls_spell_beguil", 119);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spell_blkgrd", 163);
|
SetPRCSwitch("PRC_FILE_END_cls_spell_blkgrd", 163);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spell_dnecro", 134);
|
SetPRCSwitch("PRC_FILE_END_cls_spell_dnecro", 135);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spell_duskbl", 84);
|
SetPRCSwitch("PRC_FILE_END_cls_spell_duskbl", 84);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spell_favsol", 363);
|
SetPRCSwitch("PRC_FILE_END_cls_spell_favsol", 373);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spell_harper", 21);
|
SetPRCSwitch("PRC_FILE_END_cls_spell_harper", 21);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spell_healer", 271);
|
SetPRCSwitch("PRC_FILE_END_cls_spell_healer", 271);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spell_hexbl", 79);
|
SetPRCSwitch("PRC_FILE_END_cls_spell_hexbl", 79);
|
||||||
@@ -267,7 +268,7 @@ void SetDefaultFileEnds()
|
|||||||
SetPRCSwitch("PRC_FILE_END_cls_spell_sod", 110);
|
SetPRCSwitch("PRC_FILE_END_cls_spell_sod", 110);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spell_sohei", 131);
|
SetPRCSwitch("PRC_FILE_END_cls_spell_sohei", 131);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spell_sol", 114);
|
SetPRCSwitch("PRC_FILE_END_cls_spell_sol", 114);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spell_sorc", 541);
|
SetPRCSwitch("PRC_FILE_END_cls_spell_sorc", 550);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spell_suel", 160);
|
SetPRCSwitch("PRC_FILE_END_cls_spell_suel", 160);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spell_templ", 95);
|
SetPRCSwitch("PRC_FILE_END_cls_spell_templ", 95);
|
||||||
SetPRCSwitch("PRC_FILE_END_cls_spell_tfshad", 70);
|
SetPRCSwitch("PRC_FILE_END_cls_spell_tfshad", 70);
|
||||||
@@ -335,7 +336,7 @@ void SetDefaultFileEnds()
|
|||||||
SetPRCSwitch("PRC_FILE_END_craft_golem", 40);
|
SetPRCSwitch("PRC_FILE_END_craft_golem", 40);
|
||||||
SetPRCSwitch("PRC_FILE_END_craft_ring", 41);
|
SetPRCSwitch("PRC_FILE_END_craft_ring", 41);
|
||||||
SetPRCSwitch("PRC_FILE_END_craft_weapon", 46);
|
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_creaturesize", 5);
|
||||||
SetPRCSwitch("PRC_FILE_END_creaturespeed", 8);
|
SetPRCSwitch("PRC_FILE_END_creaturespeed", 8);
|
||||||
SetPRCSwitch("PRC_FILE_END_crtemplates", 10);
|
SetPRCSwitch("PRC_FILE_END_crtemplates", 10);
|
||||||
@@ -355,7 +356,7 @@ void SetDefaultFileEnds()
|
|||||||
SetPRCSwitch("PRC_FILE_END_des_crft_poison", 100);
|
SetPRCSwitch("PRC_FILE_END_des_crft_poison", 100);
|
||||||
SetPRCSwitch("PRC_FILE_END_des_crft_props", 27);
|
SetPRCSwitch("PRC_FILE_END_des_crft_props", 27);
|
||||||
SetPRCSwitch("PRC_FILE_END_des_crft_scroll", 3999);
|
SetPRCSwitch("PRC_FILE_END_des_crft_scroll", 3999);
|
||||||
SetPRCSwitch("PRC_FILE_END_des_crft_spells", 19348);
|
SetPRCSwitch("PRC_FILE_END_des_crft_spells", 20000);
|
||||||
SetPRCSwitch("PRC_FILE_END_des_crft_weapon", 29);
|
SetPRCSwitch("PRC_FILE_END_des_crft_weapon", 29);
|
||||||
SetPRCSwitch("PRC_FILE_END_des_cutconvdur", 26);
|
SetPRCSwitch("PRC_FILE_END_des_cutconvdur", 26);
|
||||||
SetPRCSwitch("PRC_FILE_END_des_feat2item", 1000);
|
SetPRCSwitch("PRC_FILE_END_des_feat2item", 1000);
|
||||||
@@ -408,7 +409,7 @@ void SetDefaultFileEnds()
|
|||||||
SetPRCSwitch("PRC_FILE_END_iprp_ammocost", 15);
|
SetPRCSwitch("PRC_FILE_END_iprp_ammocost", 15);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_ammotype", 2);
|
SetPRCSwitch("PRC_FILE_END_iprp_ammotype", 2);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_amount", 4);
|
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_arcspell", 19);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_base1", -1);
|
SetPRCSwitch("PRC_FILE_END_iprp_base1", -1);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_bladecost", 5);
|
SetPRCSwitch("PRC_FILE_END_iprp_bladecost", 5);
|
||||||
@@ -423,15 +424,15 @@ void SetDefaultFileEnds()
|
|||||||
SetPRCSwitch("PRC_FILE_END_iprp_damvulcost", 7);
|
SetPRCSwitch("PRC_FILE_END_iprp_damvulcost", 7);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_decvalue1", 9);
|
SetPRCSwitch("PRC_FILE_END_iprp_decvalue1", 9);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_decvalue2", 9);
|
SetPRCSwitch("PRC_FILE_END_iprp_decvalue2", 9);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_feats", 24819);
|
SetPRCSwitch("PRC_FILE_END_iprp_feats", 26999);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_immuncost", 7);
|
SetPRCSwitch("PRC_FILE_END_iprp_immuncost", 7);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_immunity", 9);
|
SetPRCSwitch("PRC_FILE_END_iprp_immunity", 9);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_incvalue1", 9);
|
SetPRCSwitch("PRC_FILE_END_iprp_incvalue1", 9);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_incvalue2", 9);
|
SetPRCSwitch("PRC_FILE_END_iprp_incvalue2", 9);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_kitcost", 50);
|
SetPRCSwitch("PRC_FILE_END_iprp_kitcost", 50);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_lightcost", 4);
|
SetPRCSwitch("PRC_FILE_END_iprp_lightcost", 4);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_matcost", 77);
|
SetPRCSwitch("PRC_FILE_END_iprp_matcost", 145);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_material", 77);
|
SetPRCSwitch("PRC_FILE_END_iprp_material", 145);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_maxpp", 8);
|
SetPRCSwitch("PRC_FILE_END_iprp_maxpp", 8);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_meleecost", 20);
|
SetPRCSwitch("PRC_FILE_END_iprp_meleecost", 20);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_metamagic", 6);
|
SetPRCSwitch("PRC_FILE_END_iprp_metamagic", 6);
|
||||||
@@ -458,11 +459,11 @@ void SetDefaultFileEnds()
|
|||||||
SetPRCSwitch("PRC_FILE_END_iprp_soakcost", 50);
|
SetPRCSwitch("PRC_FILE_END_iprp_soakcost", 50);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_speed_dec", 9);
|
SetPRCSwitch("PRC_FILE_END_iprp_speed_dec", 9);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_speed_enh", 9);
|
SetPRCSwitch("PRC_FILE_END_iprp_speed_enh", 9);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_spellcost", 243);
|
SetPRCSwitch("PRC_FILE_END_iprp_spellcost", 298);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_spellcstr", 42);
|
SetPRCSwitch("PRC_FILE_END_iprp_spellcstr", 42);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_spelllvcost", 9);
|
SetPRCSwitch("PRC_FILE_END_iprp_spelllvcost", 9);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_spelllvlimm", 9);
|
SetPRCSwitch("PRC_FILE_END_iprp_spelllvlimm", 9);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_spells", 1456);
|
SetPRCSwitch("PRC_FILE_END_iprp_spells", 1552);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_spellshl", 7);
|
SetPRCSwitch("PRC_FILE_END_iprp_spellshl", 7);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_srcost", 99);
|
SetPRCSwitch("PRC_FILE_END_iprp_srcost", 99);
|
||||||
SetPRCSwitch("PRC_FILE_END_iprp_staminacost", -1);
|
SetPRCSwitch("PRC_FILE_END_iprp_staminacost", -1);
|
||||||
@@ -492,9 +493,9 @@ void SetDefaultFileEnds()
|
|||||||
SetPRCSwitch("PRC_FILE_END_itmwizwands", 38);
|
SetPRCSwitch("PRC_FILE_END_itmwizwands", 38);
|
||||||
SetPRCSwitch("PRC_FILE_END_keymap", 70);
|
SetPRCSwitch("PRC_FILE_END_keymap", 70);
|
||||||
SetPRCSwitch("PRC_FILE_END_lightcolor", 32);
|
SetPRCSwitch("PRC_FILE_END_lightcolor", 32);
|
||||||
SetPRCSwitch("PRC_FILE_END_loadhints", 88);
|
SetPRCSwitch("PRC_FILE_END_loadhints", 101);
|
||||||
SetPRCSwitch("PRC_FILE_END_loadscreens", 259);
|
SetPRCSwitch("PRC_FILE_END_loadscreens", 259);
|
||||||
SetPRCSwitch("PRC_FILE_END_masterfeats", 113);
|
SetPRCSwitch("PRC_FILE_END_masterfeats", 125);
|
||||||
SetPRCSwitch("PRC_FILE_END_materialcomp", 200);
|
SetPRCSwitch("PRC_FILE_END_materialcomp", 200);
|
||||||
SetPRCSwitch("PRC_FILE_END_metamagic", 6);
|
SetPRCSwitch("PRC_FILE_END_metamagic", 6);
|
||||||
SetPRCSwitch("PRC_FILE_END_namefilter", 3);
|
SetPRCSwitch("PRC_FILE_END_namefilter", 3);
|
||||||
@@ -720,7 +721,7 @@ void SetDefaultFileEnds()
|
|||||||
SetPRCSwitch("PRC_FILE_END_polymorph", 155);
|
SetPRCSwitch("PRC_FILE_END_polymorph", 155);
|
||||||
SetPRCSwitch("PRC_FILE_END_portraits", 1300);
|
SetPRCSwitch("PRC_FILE_END_portraits", 1300);
|
||||||
SetPRCSwitch("PRC_FILE_END_prc_craft_alchem", 37);
|
SetPRCSwitch("PRC_FILE_END_prc_craft_alchem", 37);
|
||||||
SetPRCSwitch("PRC_FILE_END_prc_craft_gen_it", 204);
|
SetPRCSwitch("PRC_FILE_END_prc_craft_gen_it", 253);
|
||||||
SetPRCSwitch("PRC_FILE_END_prc_craft_poison", 62);
|
SetPRCSwitch("PRC_FILE_END_prc_craft_poison", 62);
|
||||||
SetPRCSwitch("PRC_FILE_END_prc_domains", 59);
|
SetPRCSwitch("PRC_FILE_END_prc_domains", 59);
|
||||||
SetPRCSwitch("PRC_FILE_END_prc_familiar", 10);
|
SetPRCSwitch("PRC_FILE_END_prc_familiar", 10);
|
||||||
@@ -767,7 +768,7 @@ void SetDefaultFileEnds()
|
|||||||
SetPRCSwitch("PRC_FILE_END_soundset", 453);
|
SetPRCSwitch("PRC_FILE_END_soundset", 453);
|
||||||
SetPRCSwitch("PRC_FILE_END_soundsettype", 4);
|
SetPRCSwitch("PRC_FILE_END_soundsettype", 4);
|
||||||
SetPRCSwitch("PRC_FILE_END_soundtypes", 1);
|
SetPRCSwitch("PRC_FILE_END_soundtypes", 1);
|
||||||
SetPRCSwitch("PRC_FILE_END_spells", 19348);
|
SetPRCSwitch("PRC_FILE_END_spells", 19400);
|
||||||
//SetPRCSwitch("PRC_FILE_END_spellschools", 9);
|
//SetPRCSwitch("PRC_FILE_END_spellschools", 9);
|
||||||
SetPRCSwitch("PRC_FILE_END_statescripts", 35);
|
SetPRCSwitch("PRC_FILE_END_statescripts", 35);
|
||||||
SetPRCSwitch("PRC_FILE_END_stringtokens", 92);
|
SetPRCSwitch("PRC_FILE_END_stringtokens", 92);
|
||||||
@@ -866,6 +867,31 @@ void CreateSwitchNameArray()
|
|||||||
//if you add more switches, add them to this list
|
//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_DEBUG);
|
||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_COMBAT_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_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_DISABLE_COMPONENTS_SHOP);
|
||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_TRUESEEING);
|
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_TRUESEEING);
|
||||||
@@ -876,6 +902,10 @@ 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_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_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_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);
|
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_TIMESTOP_BIOWARE_DURATION);
|
||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_TIMESTOP_LOCAL);
|
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_TIMESTOP_LOCAL);
|
||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_TIMESTOP_NO_HOSTILE);
|
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_TIMESTOP_NO_HOSTILE);
|
||||||
@@ -992,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_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_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_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_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_PSI_ASTRAL_CONSTRUCT_DUR_MOD);
|
||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_RAPID_METABOLISM);
|
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_PNP_RAPID_METABOLISM);
|
||||||
@@ -1056,29 +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_UNICORN_SQL);
|
||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_LETOSCRIPT_GETNEWESTBIC);
|
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"), X2_CI_BREWPOTION_MAXLEVEL);
|
|
||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), X2_CI_BREWPOTION_COSTMODIFIER);
|
|
||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), X2_CI_SCRIBESCROLL_COSTMODIFIER);
|
|
||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), X2_CI_CRAFTWAND_MAXLEVEL);
|
|
||||||
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), X2_CI_CRAFTWAND_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);
|
|
||||||
|
|
||||||
//spells
|
//spells
|
||||||
|
|
||||||
//shifter
|
//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
|
//general
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#include "prc_inc_clsfunc"
|
#include "prc_inc_clsfunc"
|
||||||
|
#include "prc_inc_sp_tch"
|
||||||
|
|
||||||
int GetBlastDamageDices(object oInvoker, int nInvokerLevel)
|
int GetBlastDamageDices(object oInvoker, int nInvokerLevel)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -135,6 +135,9 @@ int GetHasInvocation(int nInvocation, object oCreature = OBJECT_SELF);
|
|||||||
/* Includes */
|
/* Includes */
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
|
int GetPrimaryInvocationClass(object oCreature = OBJECT_SELF);
|
||||||
|
int GetInvocationPRCLevels(object oCaster);
|
||||||
|
|
||||||
#include "inc_item_props"
|
#include "inc_item_props"
|
||||||
#include "prc_x2_itemprop"
|
#include "prc_x2_itemprop"
|
||||||
#include "inc_lookups"
|
#include "inc_lookups"
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ void DeleteLocalInvocation(object oObject, string sName);
|
|||||||
/* Includes */
|
/* Includes */
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
//#include "inv_inc_invfunc" //Access in parent
|
#include "inv_inc_invfunc" //Access in parent
|
||||||
#include "prc_spellf_inc"
|
#include "prc_spellf_inc"
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|||||||
@@ -77,6 +77,15 @@ int PreInvocationCastCode()
|
|||||||
|
|
||||||
int nContinue = !ExecuteScriptAndReturnInt("prespellcode", oInvoker);
|
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
|
// Break any spell require maintaining concentration
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
@@ -168,3 +177,4 @@ int PreInvocationCastCode()
|
|||||||
return nContinue;
|
return nContinue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//:: void main (){}
|
||||||
@@ -1170,7 +1170,10 @@ int GetMaxEssentiaCapacityFeat(object oMeldshaper)
|
|||||||
{
|
{
|
||||||
int nMax = 1; // Always can invest one
|
int nMax = 1; // Always can invest one
|
||||||
int nHD = GetHitDice(oMeldshaper);
|
int nHD = GetHitDice(oMeldshaper);
|
||||||
if (nHD >= 31) nMax = 5;
|
if (nHD >= 61) nMax = 8;
|
||||||
|
else if (nHD >= 51) nMax = 7;
|
||||||
|
else if (nHD >= 41) nMax = 6;
|
||||||
|
else if (nHD >= 31) nMax = 5;
|
||||||
else if (nHD >= 18) nMax = 4;
|
else if (nHD >= 18) nMax = 4;
|
||||||
else if (nHD >= 12) nMax = 3;
|
else if (nHD >= 12) nMax = 3;
|
||||||
else if (nHD >= 6) nMax = 2;
|
else if (nHD >= 6) nMax = 2;
|
||||||
@@ -1182,7 +1185,7 @@ int GetMaxEssentiaCapacityFeat(object oMeldshaper)
|
|||||||
// Don't allow more than they have
|
// Don't allow more than they have
|
||||||
if (nMax > GetTotalUsableEssentia(oMeldshaper)) nMax = GetTotalUsableEssentia(oMeldshaper);
|
if (nMax > GetTotalUsableEssentia(oMeldshaper)) nMax = GetTotalUsableEssentia(oMeldshaper);
|
||||||
|
|
||||||
//if (DEBUG) DoDebug("GetMaxEssentiaCapacityFeat: nHD "+IntToString(nHD)+" nMax "+IntToString(nMax));
|
if(DEBUG) DoDebug("GetMaxEssentiaCapacityFeat: nHD "+IntToString(nHD)+" nMax "+IntToString(nMax));
|
||||||
return nMax;
|
return nMax;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
623
src/include/nw_inc_gff.nss
Normal file
623
src/include/nw_inc_gff.nss
Normal file
@@ -0,0 +1,623 @@
|
|||||||
|
// This is a helper library for advanced use: It allows constructing arbitrary gff data.
|
||||||
|
// You can then spawn your object via JsonToObject().
|
||||||
|
//
|
||||||
|
// The data format is the same as https://github.com/niv/neverwinter.nim@1.4.3+.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
//
|
||||||
|
// json j = GffCreateObject(OBJECT_TYPE_ITEM);
|
||||||
|
// j = GffAddInt(j, "BaseItem", BASE_ITEM_BELT);
|
||||||
|
// j = GffAddInt(j, "ModelPart1", 12);
|
||||||
|
// j = GffAddLocString(j, "LocalizedName", "hi!");
|
||||||
|
// object belt = JsonToObject(j, GetLocation(OBJECT_SELF));
|
||||||
|
|
||||||
|
|
||||||
|
const string GFF_FIELD_TYPE_STRUCT = "struct";
|
||||||
|
const string GFF_FIELD_TYPE_LIST = "list";
|
||||||
|
const string GFF_FIELD_TYPE_BYTE = "byte";
|
||||||
|
const string GFF_FIELD_TYPE_CHAR = "char";
|
||||||
|
const string GFF_FIELD_TYPE_WORD = "word";
|
||||||
|
const string GFF_FIELD_TYPE_SHORT = "short";
|
||||||
|
const string GFF_FIELD_TYPE_DWORD = "dword";
|
||||||
|
const string GFF_FIELD_TYPE_INT = "int";
|
||||||
|
const string GFF_FIELD_TYPE_DWORD64 = "dword64";
|
||||||
|
const string GFF_FIELD_TYPE_INT64 = "int64";
|
||||||
|
const string GFF_FIELD_TYPE_FLOAT = "float";
|
||||||
|
const string GFF_FIELD_TYPE_DOUBLE = "double";
|
||||||
|
const string GFF_FIELD_TYPE_RESREF = "resref";
|
||||||
|
const string GFF_FIELD_TYPE_STRING = "cexostring";
|
||||||
|
const string GFF_FIELD_TYPE_LOC_STRING = "cexolocstring";
|
||||||
|
|
||||||
|
|
||||||
|
// Create a empty object of the given type. You need to manually fill in all
|
||||||
|
// GFF data with GffAddXXX. This will require understanding of the GFF file format
|
||||||
|
// and what data fields each object type requires.
|
||||||
|
json GffCreateObject(int nObjectType);
|
||||||
|
// Create a combined area format(CAF) object. You need to manually create the ARE and GIT objects with their required data fields.
|
||||||
|
json GffCreateArea(json jARE, json jGIT);
|
||||||
|
|
||||||
|
// Returns the OBJECT_TYPE_* of jGff.
|
||||||
|
// Note: Will return 0 for invalid object types, including areas.
|
||||||
|
int GffGetObjectType(json jGff);
|
||||||
|
// Returns TRUE if jGff is a combined area format(CAF) object.
|
||||||
|
int GffGetIsArea(json jGff);
|
||||||
|
|
||||||
|
// Returns TRUE if a field named sLabel of sType exists in jGff.
|
||||||
|
// * sLabel: Can be a json pointer(path) without the starting /, see the documentation of JsonPointer() for details.
|
||||||
|
// * sType: An optional GFF_FIELD_TYPE_*, leave empty to check if sLabel exists regardless of type.
|
||||||
|
int GffGetFieldExists(json jGff, string sLabel, string sType = "");
|
||||||
|
|
||||||
|
|
||||||
|
// Add a new field, will overwrite any existing fields with the same label even if the type is different.
|
||||||
|
// Returns a json null value on error with GetJsonError() filled in.
|
||||||
|
//
|
||||||
|
// sLabel can be a json pointer(path) without the starting /, see the documentation of JsonPointer() for details.
|
||||||
|
// For example, to add the tag of an area to an empty combined area format(CAF) object you can do the following:
|
||||||
|
// json jArea = GffCreateArea(JsonObject(), JsonObject());
|
||||||
|
// jArea = GffAddString(jArea, "ARE/value/Tag", "AREA_TAG");
|
||||||
|
|
||||||
|
json GffAddStruct(json jGff, string sLabel, json jStruct, int nType = -1);
|
||||||
|
json GffAddList(json jGff, string sLabel, json jList);
|
||||||
|
json GffAddByte(json jGff, string sLabel, int v);
|
||||||
|
json GffAddChar(json jGff, string sLabel, int v);
|
||||||
|
json GffAddWord(json jGff, string sLabel, int v);
|
||||||
|
json GffAddShort(json jGff, string sLabel, int v);
|
||||||
|
// Note: Only data of type int32 will fit, because that's all that NWScript supports.
|
||||||
|
json GffAddDword(json jGff, string sLabel, int v);
|
||||||
|
json GffAddInt(json jGff, string sLabel, int v);
|
||||||
|
// Note: Only data of type int32 will fit, because that's all that NWScript supports.
|
||||||
|
json GffAddDword64(json jGff, string sLabel, int v);
|
||||||
|
// Note: Only data of type int32 will fit, because that's all that NWScript supports.
|
||||||
|
json GffAddInt64(json jGff, string sLabel, int v);
|
||||||
|
json GffAddFloat(json jGff, string sLabel, float v);
|
||||||
|
// Note: Only data of type float will fit, because that's all that NWScript supports.
|
||||||
|
json GffAddDouble(json jGff, string sLabel, float v);
|
||||||
|
json GffAddResRef(json jGff, string sLabel, string v);
|
||||||
|
json GffAddString(json jGff, string sLabel, string v);
|
||||||
|
json GffAddLocString(json jGff, string sLabel, string v, int nStrRef = -1);
|
||||||
|
|
||||||
|
|
||||||
|
// Replace a field, the type must match and the field must exist.
|
||||||
|
// Returns a json null value on error with GetJsonError() filled in.
|
||||||
|
//
|
||||||
|
// sLabel can be a json pointer(path) without the starting /, see the documentation of JsonPointer() for details.
|
||||||
|
// For example, to replace the name of an area in a combined area format(CAF) object you can do the following:
|
||||||
|
// json jArea = ObjectToStruct(GetFirstArea());
|
||||||
|
// jArea = GffReplaceLocString(jArea, "ARE/value/Name", "New Area Name");
|
||||||
|
|
||||||
|
json GffReplaceStruct(json jGff, string sLabel, json jStruct);
|
||||||
|
json GffReplaceList(json jGff, string sLabel, json jList);
|
||||||
|
json GffReplaceByte(json jGff, string sLabel, int v);
|
||||||
|
json GffReplaceChar(json jGff, string sLabel, int v);
|
||||||
|
json GffReplaceWord(json jGff, string sLabel, int v);
|
||||||
|
json GffReplaceShort(json jGff, string sLabel, int v);
|
||||||
|
// Note: Only data of type int32 will fit, because that's all that NWScript supports.
|
||||||
|
json GffReplaceDword(json jGff, string sLabel, int v);
|
||||||
|
json GffReplaceInt(json jGff, string sLabel, int v);
|
||||||
|
// Note: Only data of type int32 will fit, because that's all that NWScript supports.
|
||||||
|
json GffReplaceDword64(json jGff, string sLabel, int v);
|
||||||
|
// Note: Only data of type int32 will fit, because that's all that NWScript supports.
|
||||||
|
json GffReplaceInt64(json jGff, string sLabel, int v);
|
||||||
|
json GffReplaceFloat(json jGff, string sLabel, float v);
|
||||||
|
// Note: Only data of type float will fit, because that's all that NWScript supports.
|
||||||
|
json GffReplaceDouble(json jGff, string sLabel, float v);
|
||||||
|
json GffReplaceResRef(json jGff, string sLabel, string v);
|
||||||
|
json GffReplaceString(json jGff, string sLabel, string v);
|
||||||
|
json GffReplaceLocString(json jGff, string sLabel, string v, int nStrRef = -1);
|
||||||
|
|
||||||
|
|
||||||
|
// Remove a field, the type must match and the field must exist.
|
||||||
|
// Returns a json null value on error with GetJsonError() filled in.
|
||||||
|
//
|
||||||
|
// sLabel can be a json pointer(path) without the starting /, see the documentation of JsonPointer() for details.
|
||||||
|
// For example, to remove all placeables from an area in a combined area format(CAF) object you can do the following:
|
||||||
|
// json jArea = ObjectToStruct(GetFirstArea());
|
||||||
|
// jArea = GffRemoveList(jArea, "GIT/value/Placeable List");
|
||||||
|
|
||||||
|
json GffRemoveStruct(json jGff, string sLabel);
|
||||||
|
json GffRemoveList(json jGff, string sLabel);
|
||||||
|
json GffRemoveByte(json jGff, string sLabel);
|
||||||
|
json GffRemoveChar(json jGff, string sLabel);
|
||||||
|
json GffRemoveWord(json jGff, string sLabel);
|
||||||
|
json GffRemoveShort(json jGff, string sLabel);
|
||||||
|
json GffRemoveDword(json jGff, string sLabel);
|
||||||
|
json GffRemoveInt(json jGff, string sLabel);
|
||||||
|
json GffRemoveDword64(json jGff, string sLabel);
|
||||||
|
json GffRemoveInt64(json jGff, string sLabel);
|
||||||
|
json GffRemoveFloat(json jGff, string sLabel);
|
||||||
|
json GffRemoveDouble(json jGff, string sLabel);
|
||||||
|
json GffRemoveResRef(json jGff, string sLabel);
|
||||||
|
json GffRemoveString(json jGff, string sLabel);
|
||||||
|
json GffRemoveLocString(json jGff, string sLabel);
|
||||||
|
|
||||||
|
|
||||||
|
// Get a field's value as json object.
|
||||||
|
// Returns a json null value on error with GetJsonError() filled in.
|
||||||
|
//
|
||||||
|
// Note: Json types do not implicitly convert between types, this means you cannot convert a JsonInt to a string with JsonGetString(), etc.
|
||||||
|
// You may need to check the type with JsonGetType() and then do the appropriate cast yourself.
|
||||||
|
// For GffGet*() functions the json type returned is noted in the function description.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// INCORRECT: string s = JsonGetString(GffGetInt());
|
||||||
|
// CORRECT: string s = IntToString(JsonGetInt(GffGetInt()));
|
||||||
|
//
|
||||||
|
// sLabel can be a json pointer(path) without the starting /, see the documentation of JsonPointer() for details.
|
||||||
|
// For example, to get the resref of an area in a combined area format(CAF) object you can do the following:
|
||||||
|
// json jResRef = GffGetResRef(ObjectToStruct(GetFirstArea()), "ARE/value/ResRef");
|
||||||
|
// if (jResRef != JsonNull())
|
||||||
|
// {
|
||||||
|
// string sResRef = JsonGetString(jResRef);
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// WriteTimestampedLogEntry("Failed to get area ResRef: " + JsonGetError(jResRef));
|
||||||
|
|
||||||
|
// Returns the struct as JsonObject() on success.
|
||||||
|
json GffGetStruct(json jGff, string sLabel);
|
||||||
|
// Returns a JsonArray() with all the list elements on success.
|
||||||
|
json GffGetList(json jGff, string sLabel);
|
||||||
|
// Returns a JsonInt() on success.
|
||||||
|
json GffGetByte(json jGff, string sLabel);
|
||||||
|
// Returns a JsonInt() on success.
|
||||||
|
json GffGetChar(json jGff, string sLabel);
|
||||||
|
// Returns a JsonInt() on success.
|
||||||
|
json GffGetWord(json jGff, string sLabel);
|
||||||
|
// Returns a JsonInt() on success.
|
||||||
|
json GffGetShort(json jGff, string sLabel);
|
||||||
|
// Returns a JsonInt() on success.
|
||||||
|
json GffGetDword(json jGff, string sLabel);
|
||||||
|
// Returns a JsonInt() on success.
|
||||||
|
json GffGetInt(json jGff, string sLabel);
|
||||||
|
// Returns a JsonInt() on success.
|
||||||
|
json GffGetDword64(json jGff, string sLabel);
|
||||||
|
// Returns a JsonInt() on success.
|
||||||
|
json GffGetInt64(json jGff, string sLabel);
|
||||||
|
// Returns a JsonFloat() on success.
|
||||||
|
json GffGetFloat(json jGff, string sLabel);
|
||||||
|
// Returns a JsonFloat() on success.
|
||||||
|
json GffGetDouble(json jGff, string sLabel);
|
||||||
|
// Returns a JsonString() on success.
|
||||||
|
json GffGetResRef(json jGff, string sLabel);
|
||||||
|
// Returns a JsonString() on success.
|
||||||
|
json GffGetString(json jGff, string sLabel);
|
||||||
|
// Returns a JsonObject() on success.
|
||||||
|
// Key "0" will have a JsonString() with the string, if set.
|
||||||
|
// Key "id" will have a JsonInt() with the strref, if set.
|
||||||
|
json GffGetLocString(json jGff, string sLabel);
|
||||||
|
|
||||||
|
|
||||||
|
// *** Internal Helper Functions
|
||||||
|
json AddPatchOperation(json jPatchArray, string sOp, string sPath, json jValue)
|
||||||
|
{
|
||||||
|
json jOperation = JsonObject();
|
||||||
|
jOperation = JsonObjectSet(jOperation, "op", JsonString(sOp));
|
||||||
|
jOperation = JsonObjectSet(jOperation, "path", JsonString(sPath));
|
||||||
|
jOperation = JsonObjectSet(jOperation, "value", jValue);
|
||||||
|
return JsonArrayInsert(jPatchArray, jOperation);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddField(json jGff, string sLabel, string sType, json jValue, int nType = -1)
|
||||||
|
{
|
||||||
|
json jField = JsonObject();
|
||||||
|
jField = JsonObjectSet(jField, "type", JsonString(sType));
|
||||||
|
jField = JsonObjectSet(jField, "value", jValue);
|
||||||
|
if (sType == GFF_FIELD_TYPE_STRUCT && nType != -1)
|
||||||
|
jField = JsonObjectSet(jField, "__struct_id", JsonInt(nType));
|
||||||
|
|
||||||
|
return JsonPatch(jGff, AddPatchOperation(JsonArray(), "add", "/" + sLabel, jField));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceField(json jGff, string sLabel, string sType, json jValue)
|
||||||
|
{
|
||||||
|
json jPatch = JsonArray();
|
||||||
|
jPatch = AddPatchOperation(jPatch, "test", "/" + sLabel + "/type", JsonString(sType));
|
||||||
|
jPatch = AddPatchOperation(jPatch, "replace", "/" + sLabel + "/value", jValue);
|
||||||
|
return JsonPatch(jGff, jPatch);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveField(json jGff, string sLabel, string sType)
|
||||||
|
{
|
||||||
|
json jPatch = JsonArray();
|
||||||
|
jPatch = AddPatchOperation(jPatch, "test", "/" + sLabel + "/type", JsonString(sType));
|
||||||
|
jPatch = AddPatchOperation(jPatch, "remove", "/" + sLabel, JsonNull());
|
||||||
|
return JsonPatch(jGff, jPatch);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetFieldType(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return JsonPointer(jGff, "/" + sLabel + "/type");
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetFieldValue(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return JsonPointer(jGff, "/" + sLabel + "/value");
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetField(json jGff, string sLabel, string sType)
|
||||||
|
{
|
||||||
|
json jType = GffGetFieldType(jGff, sLabel);
|
||||||
|
if (jType == JsonNull())
|
||||||
|
return jType;
|
||||||
|
else if (jType != JsonString(sType))
|
||||||
|
return JsonNull("field type does not match");
|
||||||
|
else
|
||||||
|
return GffGetFieldValue(jGff, sLabel);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffLocString(string v, int nStrRef = -1)
|
||||||
|
{
|
||||||
|
json jLocString = JsonObject();
|
||||||
|
if (v != "")
|
||||||
|
jLocString = JsonObjectSet(jLocString, "0", JsonString(v)); // english/any
|
||||||
|
if (nStrRef != -1)
|
||||||
|
jLocString = JsonObjectSet(jLocString, "id", JsonInt(nStrRef));
|
||||||
|
|
||||||
|
return jLocString;
|
||||||
|
}
|
||||||
|
//***
|
||||||
|
|
||||||
|
json GffCreateObject(int nObjectType)
|
||||||
|
{
|
||||||
|
string ot;
|
||||||
|
if (nObjectType == OBJECT_TYPE_CREATURE) ot = "UTC ";
|
||||||
|
else if (nObjectType == OBJECT_TYPE_ITEM) ot = "UTI ";
|
||||||
|
else if (nObjectType == OBJECT_TYPE_TRIGGER) ot = "UTT ";
|
||||||
|
else if (nObjectType == OBJECT_TYPE_DOOR) ot = "UTD ";
|
||||||
|
else if (nObjectType == OBJECT_TYPE_WAYPOINT) ot = "UTW ";
|
||||||
|
else if (nObjectType == OBJECT_TYPE_PLACEABLE) ot = "UTP ";
|
||||||
|
else if (nObjectType == OBJECT_TYPE_STORE) ot = "UTM ";
|
||||||
|
else if (nObjectType == OBJECT_TYPE_ENCOUNTER) ot = "UTE ";
|
||||||
|
|
||||||
|
if (ot == "") return JsonNull("invalid object type");
|
||||||
|
|
||||||
|
json ret = JsonObject();
|
||||||
|
ret = JsonObjectSet(ret, "__data_type", JsonString(ot));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffCreateArea(json jARE, json jGIT)
|
||||||
|
{
|
||||||
|
json jCAF = JsonObject();
|
||||||
|
jCAF = JsonObjectSet(jCAF, "__data_type", JsonString("CAF "));
|
||||||
|
jCAF = GffAddStruct(jCAF, "ARE", jARE, 0);
|
||||||
|
jCAF = GffAddStruct(jCAF, "GIT", jGIT, 1);
|
||||||
|
return jCAF;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int GffGetObjectType(json jGff)
|
||||||
|
{
|
||||||
|
json jDataType = JsonObjectGet(jGff, "__data_type");
|
||||||
|
if (jDataType == JsonNull())
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
string sObjectType = JsonGetString(jDataType);
|
||||||
|
|
||||||
|
if (sObjectType == "UTC ") return OBJECT_TYPE_CREATURE;
|
||||||
|
else if (sObjectType == "UTI ") return OBJECT_TYPE_ITEM;
|
||||||
|
else if (sObjectType == "UTT ") return OBJECT_TYPE_TRIGGER;
|
||||||
|
else if (sObjectType == "UTD ") return OBJECT_TYPE_DOOR;
|
||||||
|
else if (sObjectType == "UTW ") return OBJECT_TYPE_WAYPOINT;
|
||||||
|
else if (sObjectType == "UTP ") return OBJECT_TYPE_PLACEABLE;
|
||||||
|
else if (sObjectType == "UTM ") return OBJECT_TYPE_STORE;
|
||||||
|
else if (sObjectType == "UTE ") return OBJECT_TYPE_ENCOUNTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GffGetIsArea(json jGff)
|
||||||
|
{
|
||||||
|
return JsonObjectGet(jGff, "__data_type") == JsonString("CAF ");
|
||||||
|
}
|
||||||
|
|
||||||
|
int GffGetFieldExists(json jGff, string sLabel, string sType = "")
|
||||||
|
{
|
||||||
|
json jFieldType = GffGetFieldType(jGff, sLabel);
|
||||||
|
return sType == "" ? jFieldType != JsonNull() : jFieldType == JsonString(sType);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
json GffAddStruct(json jGff, string sLabel, json jStruct, int nType = -1)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_STRUCT, jStruct, nType);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddList(json jGff, string sLabel, json jList)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_LIST, jList);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddByte(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_BYTE, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddChar(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_CHAR, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddWord(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_WORD, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddShort(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_SHORT, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddDword(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_DWORD, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddInt(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_INT, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddDword64(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_DWORD64, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddInt64(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_INT64, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddFloat(json jGff, string sLabel, float v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_FLOAT, JsonFloat(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddDouble(json jGff, string sLabel, float v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_DOUBLE, JsonFloat(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddResRef(json jGff, string sLabel, string v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_RESREF, JsonString(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddString(json jGff, string sLabel, string v)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_STRING, JsonString(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffAddLocString(json jGff, string sLabel, string v, int nStrRef = -1)
|
||||||
|
{
|
||||||
|
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_LOC_STRING, GffLocString(v, nStrRef));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
json GffReplaceStruct(json jGff, string sLabel, json jStruct)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_STRUCT, jStruct);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceList(json jGff, string sLabel, json jList)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_LIST, jList);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceByte(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_BYTE, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceChar(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_CHAR, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceWord(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_WORD, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceShort(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_SHORT, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceDword(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_DWORD, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceInt(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_INT, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceDword64(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_DWORD64, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceInt64(json jGff, string sLabel, int v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_INT64, JsonInt(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceFloat(json jGff, string sLabel, float v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_FLOAT, JsonFloat(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceDouble(json jGff, string sLabel, float v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_DOUBLE, JsonFloat(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceResRef(json jGff, string sLabel, string v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_RESREF, JsonString(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceString(json jGff, string sLabel, string v)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_STRING, JsonString(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffReplaceLocString(json jGff, string sLabel, string v, int nStrRef = -1)
|
||||||
|
{
|
||||||
|
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_LOC_STRING, GffLocString(v, nStrRef));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
json GffRemoveStruct(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_STRUCT);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveList(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_LIST);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveByte(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_BYTE);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveChar(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_CHAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveWord(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_WORD);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveShort(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_SHORT);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveDword(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_DWORD);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveInt(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_INT);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveDword64(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_DWORD64);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveInt64(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_INT64);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveFloat(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_FLOAT);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveDouble(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_DOUBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveResRef(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_RESREF);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveString(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_STRING);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffRemoveLocString(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_LOC_STRING);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
json GffGetStruct(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_STRUCT);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetList(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_LIST);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetByte(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_BYTE);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetChar(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_CHAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetWord(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_WORD);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetShort(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_SHORT);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetDword(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_DWORD);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetInt(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_INT);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetDword64(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_DWORD64);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetInt64(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_INT64);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetFloat(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_FLOAT);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetDouble(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_DOUBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetResRef(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_RESREF);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetString(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_STRING);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GffGetLocString(json jGff, string sLabel)
|
||||||
|
{
|
||||||
|
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_LOC_STRING);
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -11,6 +11,8 @@
|
|||||||
//:://////////////////////////////////////////////
|
//:://////////////////////////////////////////////
|
||||||
//:: Created By: Brent, Andrew
|
//:: Created By: Brent, Andrew
|
||||||
//:: Created On: November - May
|
//:: Created On: November - May
|
||||||
|
//::
|
||||||
|
//:: Updated for .35 by Jaysyn 2023/03/10
|
||||||
//:://////////////////////////////////////////////
|
//:://////////////////////////////////////////////
|
||||||
// :: MODS
|
// :: MODS
|
||||||
// April 23 2002: Removed animal parts. They were silly.
|
// April 23 2002: Removed animal parts. They were silly.
|
||||||
@@ -22,64 +24,65 @@
|
|||||||
// Moved nymph cloak +4 to treasure bracket 6
|
// Moved nymph cloak +4 to treasure bracket 6
|
||||||
// Added Monk Enhancement items to random treasure
|
// Added Monk Enhancement items to random treasure
|
||||||
|
|
||||||
|
#include "prc_class_const"
|
||||||
|
|
||||||
// * ---------
|
// * ---------
|
||||||
// * CONSTANTS
|
// * CONSTANTS
|
||||||
// * ---------
|
// * ---------
|
||||||
|
|
||||||
|
|
||||||
// * tweaking constants
|
// * tweaking constants
|
||||||
|
|
||||||
// * SIX LEVEL RANGES
|
// * SIX LEVEL RANGES
|
||||||
int RANGE_1_MIN = 0;
|
const int RANGE_1_MIN = 0;
|
||||||
int RANGE_1_MAX = 5;
|
const int RANGE_1_MAX = 5;
|
||||||
int RANGE_2_MIN = 6;
|
const int RANGE_2_MIN = 6;
|
||||||
int RANGE_2_MAX = 8;
|
const int RANGE_2_MAX = 8;
|
||||||
|
|
||||||
int RANGE_3_MIN = 9;
|
const int RANGE_3_MIN = 9;
|
||||||
int RANGE_3_MAX = 10;
|
const int RANGE_3_MAX = 10;
|
||||||
|
|
||||||
int RANGE_4_MIN = 11;
|
const int RANGE_4_MIN = 11;
|
||||||
int RANGE_4_MAX = 13;
|
const int RANGE_4_MAX = 13;
|
||||||
|
|
||||||
int RANGE_5_MIN = 14;
|
const int RANGE_5_MIN = 14;
|
||||||
int RANGE_5_MAX = 16;
|
const int RANGE_5_MAX = 16;
|
||||||
|
|
||||||
int RANGE_6_MIN = 17;
|
const int RANGE_6_MIN = 17;
|
||||||
int RANGE_6_MAX = 100;
|
const int RANGE_6_MAX = 100;
|
||||||
|
|
||||||
// * NUMBER OF ITEMS APPEARING
|
// * NUMBER OF ITEMS APPEARING
|
||||||
int NUMBER_LOW_ONE = 100; int NUMBER_MED_ONE = 60; int NUMBER_HIGH_ONE = 40; int NUMBER_BOSS_ONE = 100;
|
const int NUMBER_LOW_ONE = 100; const int NUMBER_MED_ONE = 60; const int NUMBER_HIGH_ONE = 40; const int NUMBER_BOSS_ONE = 100;
|
||||||
int NUMBER_LOW_TWO = 0; int NUMBER_MED_TWO = 30; int NUMBER_HIGH_TWO = 40; int NUMBER_BOSS_TWO = 0;
|
const int NUMBER_LOW_TWO = 0; const int NUMBER_MED_TWO = 30; const int NUMBER_HIGH_TWO = 40; const int NUMBER_BOSS_TWO = 0;
|
||||||
int NUMBER_LOW_THREE = 0; int NUMBER_MED_THREE = 10; int NUMBER_HIGH_THREE = 20; int NUMBER_BOSS_THREE = 0;
|
const int NUMBER_LOW_THREE = 0; const int NUMBER_MED_THREE = 10; const int NUMBER_HIGH_THREE = 20; const int NUMBER_BOSS_THREE = 0;
|
||||||
|
|
||||||
int NUMBER_BOOK_ONE = 75;
|
const int NUMBER_BOOK_ONE = 75;
|
||||||
int NUMBER_BOOK_TWO = 20;
|
const int NUMBER_BOOK_TWO = 20;
|
||||||
int NUMBER_BOOK_THREE = 5;
|
const int NUMBER_BOOK_THREE = 5;
|
||||||
|
|
||||||
// * AMOUNT OF GOLD BY VALUE
|
// * AMOUNT OF GOLD BY VALUE
|
||||||
float LOW_MOD_GOLD = 0.5; float MEDIUM_MOD_GOLD = 1.0; float HIGH_MOD_GOLD = 3.0;
|
const float LOW_MOD_GOLD = 0.5; const float MEDIUM_MOD_GOLD = 1.0; const float HIGH_MOD_GOLD = 3.0;
|
||||||
// * FREQUENCY OF ITEM TYPE APPEARING BY TREASURE TYPE
|
// * FREQUENCY OF ITEM TYPE APPEARING BY TREASURE TYPE
|
||||||
int LOW_PROB_BOOK = 1; int MEDIUM_PROB_BOOK = 1; int HIGH_PROB_BOOK =1;
|
const int LOW_PROB_BOOK = 1; const int MEDIUM_PROB_BOOK = 1; const int HIGH_PROB_BOOK =1;
|
||||||
int LOW_PROB_ANIMAL = 0; int MEDIUM_PROB_ANIMAL = 0; int HIGH_PROB_ANIMAL = 0;
|
const int LOW_PROB_ANIMAL = 0; const int MEDIUM_PROB_ANIMAL = 0; const int HIGH_PROB_ANIMAL = 0;
|
||||||
int LOW_PROB_JUNK = 2; int MEDIUM_PROB_JUNK = 1; int HIGH_PROB_JUNK = 1;
|
const int LOW_PROB_JUNK = 2; const int MEDIUM_PROB_JUNK = 1; const int HIGH_PROB_JUNK = 1;
|
||||||
int LOW_PROB_GOLD = 43; int MEDIUM_PROB_GOLD = 38; int HIGH_PROB_GOLD = 15;
|
const int LOW_PROB_GOLD = 43; const int MEDIUM_PROB_GOLD = 38; const int HIGH_PROB_GOLD = 15;
|
||||||
int LOW_PROB_GEM = 9; int MEDIUM_PROB_GEM = 15; int HIGH_PROB_GEM = 15;
|
const int LOW_PROB_GEM = 9; const int MEDIUM_PROB_GEM = 15; const int HIGH_PROB_GEM = 15;
|
||||||
int LOW_PROB_JEWEL = 4; int MEDIUM_PROB_JEWEL = 6; int HIGH_PROB_JEWEL = 15;
|
const int LOW_PROB_JEWEL = 4; const int MEDIUM_PROB_JEWEL = 6; const int HIGH_PROB_JEWEL = 15;
|
||||||
int LOW_PROB_ARCANE = 3; int MEDIUM_PROB_ARCANE = 3; int HIGH_PROB_ARCANE = 3;
|
const int LOW_PROB_ARCANE = 3; const int MEDIUM_PROB_ARCANE = 3; const int HIGH_PROB_ARCANE = 3;
|
||||||
int LOW_PROB_DIVINE = 3; int MEDIUM_PROB_DIVINE = 3; int HIGH_PROB_DIVINE = 3;
|
const int LOW_PROB_DIVINE = 3; const int MEDIUM_PROB_DIVINE = 3; const int HIGH_PROB_DIVINE = 3;
|
||||||
int LOW_PROB_AMMO = 10; int MEDIUM_PROB_AMMO = 5; int HIGH_PROB_AMMO = 3;
|
const int LOW_PROB_AMMO = 10; const int MEDIUM_PROB_AMMO = 5; const int HIGH_PROB_AMMO = 3;
|
||||||
int LOW_PROB_KIT = 5; int MEDIUM_PROB_KIT = 5; int HIGH_PROB_KIT = 5;
|
const int LOW_PROB_KIT = 5; const int MEDIUM_PROB_KIT = 5; const int HIGH_PROB_KIT = 5;
|
||||||
int LOW_PROB_POTION =17; int MEDIUM_PROB_POTION = 20; int HIGH_PROB_POTION= 9;
|
const int LOW_PROB_POTION =17; const int MEDIUM_PROB_POTION = 20; const int HIGH_PROB_POTION= 9;
|
||||||
int LOW_PROB_TABLE2 = 3; int MEDIUM_PROB_TABLE2 = 3; int HIGH_PROB_TABLE2= 30;
|
const int LOW_PROB_TABLE2 = 3; const int MEDIUM_PROB_TABLE2 = 3; const int HIGH_PROB_TABLE2= 30;
|
||||||
|
|
||||||
|
|
||||||
// * readability constants
|
// * readability constants
|
||||||
|
|
||||||
int TREASURE_LOW = 1;
|
const int TREASURE_LOW = 1;
|
||||||
int TREASURE_MEDIUM = 2;
|
const int TREASURE_MEDIUM = 2;
|
||||||
int TREASURE_HIGH = 3;
|
const int TREASURE_HIGH = 3;
|
||||||
int TREASURE_BOSS = 4;
|
const int TREASURE_BOSS = 4;
|
||||||
int TREASURE_BOOK = 5;
|
const int TREASURE_BOOK = 5;
|
||||||
|
|
||||||
|
|
||||||
// * JUMP_LEVEL is used in a Specific item function
|
// * JUMP_LEVEL is used in a Specific item function
|
||||||
@@ -88,7 +91,7 @@ int TREASURE_BOOK = 5;
|
|||||||
// * hit die for the purposes of the treasure evaluation.
|
// * hit die for the purposes of the treasure evaluation.
|
||||||
// * May 2002: Lowered JUMP_LEVEL from 3 to 2
|
// * May 2002: Lowered JUMP_LEVEL from 3 to 2
|
||||||
|
|
||||||
int JUMP_LEVEL = 2;
|
const int JUMP_LEVEL = 2;
|
||||||
|
|
||||||
|
|
||||||
//* Declarations
|
//* Declarations
|
||||||
@@ -115,11 +118,13 @@ void dbSpeak(string s)
|
|||||||
//* made this function to help with debugging
|
//* made this function to help with debugging
|
||||||
void dbCreateItemOnObject(string sItemTemplate, object oTarget = OBJECT_SELF, int nStackSize = 1)
|
void dbCreateItemOnObject(string sItemTemplate, object oTarget = OBJECT_SELF, int nStackSize = 1)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
if (sItemTemplate == "")
|
if (sItemTemplate == "")
|
||||||
{
|
{
|
||||||
PrintString("blank item passed into dbCreateItemOnObject. Please report as bug to Brent.");
|
PrintString("blank item passed into dbCreateItemOnObject. Please report as bug to Brent.");
|
||||||
}
|
}
|
||||||
dbSpeak(sItemTemplate);
|
dbSpeak(sItemTemplate);
|
||||||
|
*/
|
||||||
|
|
||||||
//sItemTemplate = GetStringLowerCase
|
//sItemTemplate = GetStringLowerCase
|
||||||
|
|
||||||
@@ -129,13 +134,14 @@ void dbCreateItemOnObject(string sItemTemplate, object oTarget = OBJECT_SELF, in
|
|||||||
// * it creates more
|
// * it creates more
|
||||||
|
|
||||||
string sRoot = GetSubString(sItemTemplate, 0, 6);
|
string sRoot = GetSubString(sItemTemplate, 0, 6);
|
||||||
dbSpeak("ROOT: " + sRoot);
|
//dbSpeak("ROOT: " + sRoot);
|
||||||
if (GetStringLowerCase(sRoot) == "nw_wth")
|
if (GetStringLowerCase(sRoot) == "nw_wth")
|
||||||
{
|
{
|
||||||
nStackSize = Random(30) + 1;
|
nStackSize = Random(30) + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
object oItem = CreateItemOnObject(sItemTemplate, oTarget, nStackSize);
|
object oItem = CreateItemOnObject(sItemTemplate, oTarget, nStackSize);
|
||||||
|
/*
|
||||||
if (GetIsObjectValid(oItem) == FALSE && sItemTemplate != "NW_IT_GOLD001")
|
if (GetIsObjectValid(oItem) == FALSE && sItemTemplate != "NW_IT_GOLD001")
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -148,6 +154,7 @@ void dbCreateItemOnObject(string sItemTemplate, object oTarget = OBJECT_SELF, in
|
|||||||
PrintString("*******");
|
PrintString("*******");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -160,16 +167,16 @@ object GetLastOpener()
|
|||||||
{
|
{
|
||||||
if (GetIsObjectValid(GetLastOpenedBy()) == TRUE)
|
if (GetIsObjectValid(GetLastOpenedBy()) == TRUE)
|
||||||
{
|
{
|
||||||
dbSpeak("LastOpener: GetLastOpenedBy " + GetTag(GetLastOpenedBy()));
|
//dbSpeak("LastOpener: GetLastOpenedBy " + GetTag(GetLastOpenedBy()));
|
||||||
return GetLastOpenedBy();
|
return GetLastOpenedBy();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (GetIsObjectValid(GetLastKiller()) == TRUE)
|
if (GetIsObjectValid(GetLastKiller()) == TRUE)
|
||||||
{
|
{
|
||||||
dbSpeak("LastOpener: GetLastAttacker");
|
//dbSpeak("LastOpener: GetLastAttacker");
|
||||||
return GetLastKiller();
|
return GetLastKiller();
|
||||||
}
|
}
|
||||||
dbSpeak("LastOpener: The Object is Invalid you weenie!");
|
//dbSpeak("LastOpener: The Object is Invalid you weenie!");
|
||||||
return OBJECT_INVALID;
|
return OBJECT_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -200,9 +207,9 @@ int GetRange(int nCategory, int nHD)
|
|||||||
case 1: nMin = RANGE_1_MIN; nMax = RANGE_1_MAX; break;
|
case 1: nMin = RANGE_1_MIN; nMax = RANGE_1_MAX; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
dbSpeak("nMin = " + IntToString(nMin));
|
//dbSpeak("nMin = " + IntToString(nMin));
|
||||||
dbSpeak("nMax = " + IntToString(nMax));
|
//dbSpeak("nMax = " + IntToString(nMax));
|
||||||
dbSpeak("GetRange.nHD = " + IntToString(nHD));
|
//dbSpeak("GetRange.nHD = " + IntToString(nHD));
|
||||||
if (nHD >= nMin && nHD <= nMax)
|
if (nHD >= nMin && nHD <= nMax)
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -312,7 +319,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
{
|
{
|
||||||
sRes = "NW_IT_BOOK0" + IntToString(nBook1);
|
sRes = "NW_IT_BOOK0" + IntToString(nBook1);
|
||||||
}
|
}
|
||||||
dbSpeak("Create book");
|
//dbSpeak("Create book");
|
||||||
dbCreateItemOnObject(sRes, oTarget);
|
dbCreateItemOnObject(sRes, oTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -327,7 +334,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
case 2: sRes = "NW_IT_MMIDMISC05"; break;
|
case 2: sRes = "NW_IT_MMIDMISC05"; break;
|
||||||
case 3: sRes = "NW_IT_MMIDMISC06"; break;
|
case 3: sRes = "NW_IT_MMIDMISC06"; break;
|
||||||
}
|
}
|
||||||
dbSpeak("animal");
|
//dbSpeak("animal");
|
||||||
dbCreateItemOnObject(sRes, oTarget);
|
dbCreateItemOnObject(sRes, oTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -346,7 +353,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
case 5: sRes = "NW_IT_MPOTION022"; break; // spirits
|
case 5: sRes = "NW_IT_MPOTION022"; break; // spirits
|
||||||
case 6: sRes = "NW_IT_TORCH001"; break; //torch
|
case 6: sRes = "NW_IT_TORCH001"; break; //torch
|
||||||
}
|
}
|
||||||
dbSpeak("CreateJunk");
|
//dbSpeak("CreateJunk");
|
||||||
dbCreateItemOnObject(sRes, oTarget);
|
dbCreateItemOnObject(sRes, oTarget);
|
||||||
}
|
}
|
||||||
// *
|
// *
|
||||||
@@ -392,7 +399,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
{
|
{
|
||||||
nAmount = 1;
|
nAmount = 1;
|
||||||
}
|
}
|
||||||
dbSpeak("gold");
|
//dbSpeak("gold");
|
||||||
dbCreateItemOnObject("NW_IT_GOLD001", oTarget, nAmount);
|
dbCreateItemOnObject("NW_IT_GOLD001", oTarget, nAmount);
|
||||||
}
|
}
|
||||||
void CreateGem(object oTarget, object oAdventurer, int nTreasureType, int nModifier = 0)
|
void CreateGem(object oTarget, object oAdventurer, int nTreasureType, int nModifier = 0)
|
||||||
@@ -476,7 +483,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
case 8: sGem = "nw_it_gem012"; break;
|
case 8: sGem = "nw_it_gem012"; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dbSpeak("Create Gem");
|
//dbSpeak("Create Gem");
|
||||||
dbCreateItemOnObject(sGem, oTarget, 1);
|
dbCreateItemOnObject(sGem, oTarget, 1);
|
||||||
}
|
}
|
||||||
void CreateJewel(object oTarget, object oAdventurer, int nTreasureType, int nModifier = 0)
|
void CreateJewel(object oTarget, object oAdventurer, int nTreasureType, int nModifier = 0)
|
||||||
@@ -547,7 +554,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
case 5: case 6: sJewel = "nw_it_mneck022"; break;
|
case 5: case 6: sJewel = "nw_it_mneck022"; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dbSpeak("Create Jewel");
|
//dbSpeak("Create Jewel");
|
||||||
|
|
||||||
dbCreateItemOnObject(sJewel, oTarget, 1);
|
dbCreateItemOnObject(sJewel, oTarget, 1);
|
||||||
|
|
||||||
@@ -697,7 +704,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
case 7: sScroll = "nw_it_spdvscr702"; break;
|
case 7: sScroll = "nw_it_spdvscr702"; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dbSpeak("Divine Scroll");
|
//dbSpeak("Divine Scroll");
|
||||||
|
|
||||||
dbCreateItemOnObject(sScroll, oTarget, 1);
|
dbCreateItemOnObject(sScroll, oTarget, 1);
|
||||||
|
|
||||||
@@ -784,7 +791,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
case 20: sAmmo = "nw_wammbu007"; break;
|
case 20: sAmmo = "nw_wammbu007"; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dbSpeak("ammo");
|
//dbSpeak("ammo");
|
||||||
dbCreateItemOnObject(sAmmo, oTarget, Random(30) + 1); // create up to 30 of the specified ammo type
|
dbCreateItemOnObject(sAmmo, oTarget, Random(30) + 1); // create up to 30 of the specified ammo type
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -935,7 +942,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
dbSpeak("Create Trapkit");
|
//dbSpeak("Create Trapkit");
|
||||||
dbCreateItemOnObject(sKit, oTarget, 1);
|
dbCreateItemOnObject(sKit, oTarget, 1);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1001,7 +1008,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
dbSpeak("Create Healing Kit");
|
//dbSpeak("Create Healing Kit");
|
||||||
|
|
||||||
dbCreateItemOnObject(sKit, oTarget, 1);
|
dbCreateItemOnObject(sKit, oTarget, 1);
|
||||||
|
|
||||||
@@ -1076,7 +1083,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
dbSpeak("Create Lockpick");
|
//dbSpeak("Create Lockpick");
|
||||||
|
|
||||||
dbCreateItemOnObject(sKit, oTarget, 1);
|
dbCreateItemOnObject(sKit, oTarget, 1);
|
||||||
|
|
||||||
@@ -1213,7 +1220,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
case 29: sPotion = "nw_it_mpotion006"; break;
|
case 29: sPotion = "nw_it_mpotion006"; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dbSpeak("Create Potion");
|
//dbSpeak("Create Potion");
|
||||||
dbCreateItemOnObject(sPotion, oTarget, 1);
|
dbCreateItemOnObject(sPotion, oTarget, 1);
|
||||||
}
|
}
|
||||||
//::///////////////////////////////////////////////
|
//::///////////////////////////////////////////////
|
||||||
@@ -1476,7 +1483,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
case 30: sItem = "nw_it_mneck018"; break;
|
case 30: sItem = "nw_it_mneck018"; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dbSpeak("Create Misc");
|
//dbSpeak("Create Misc");
|
||||||
|
|
||||||
dbCreateItemOnObject(sItem, oTarget, 1);
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
||||||
}
|
}
|
||||||
@@ -1536,7 +1543,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
else
|
else
|
||||||
if (GetLevelByClass(CLASS_TYPE_MONK, oAdventurer)>= 1)
|
if (GetLevelByClass(CLASS_TYPE_MONK, oAdventurer)>= 1)
|
||||||
{
|
{
|
||||||
dbSpeak("in monk function");
|
//dbSpeak("in monk function");
|
||||||
if (nSpecific == 0)
|
if (nSpecific == 0)
|
||||||
{
|
{
|
||||||
CreateGenericMonkWeapon(oTarget, oAdventurer);
|
CreateGenericMonkWeapon(oTarget, oAdventurer);
|
||||||
@@ -1631,7 +1638,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
dbSpeak("Generic Rod staff wand");
|
//dbSpeak("Generic Rod staff wand");
|
||||||
|
|
||||||
dbCreateItemOnObject(sItem, oTarget, 1);
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
||||||
}
|
}
|
||||||
@@ -1747,7 +1754,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
case 13: sItem = "nw_waxmhn011"; break;
|
case 13: sItem = "nw_waxmhn011"; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dbSpeak("Generic Monk Weapon");
|
//dbSpeak("Generic Monk Weapon");
|
||||||
|
|
||||||
dbCreateItemOnObject(sItem, oTarget, 1);
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
||||||
}
|
}
|
||||||
@@ -1888,7 +1895,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
dbSpeak("Specific Monk Weapon");
|
//dbSpeak("Specific Monk Weapon");
|
||||||
|
|
||||||
dbCreateItemOnObject(sItem, oTarget, 1);
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
||||||
|
|
||||||
@@ -2004,7 +2011,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
dbSpeak("Generic Druid weapon");
|
//dbSpeak("Generic Druid weapon");
|
||||||
|
|
||||||
dbCreateItemOnObject(sItem, oTarget, 1);
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
||||||
|
|
||||||
@@ -2082,7 +2089,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
dbSpeak("specific druid weapon");
|
//dbSpeak("specific druid weapon");
|
||||||
|
|
||||||
dbCreateItemOnObject(sItem, oTarget, 1);
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
||||||
|
|
||||||
@@ -2168,7 +2175,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
dbSpeak("Generic Wizard or Sorcerer Weapon");
|
//dbSpeak("Generic Wizard or Sorcerer Weapon");
|
||||||
|
|
||||||
dbCreateItemOnObject(sItem, oTarget, 1);
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
||||||
|
|
||||||
@@ -2241,7 +2248,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
dbSpeak("Specific Wizard or Sorcerer Weapon");
|
//dbSpeak("Specific Wizard or Sorcerer Weapon");
|
||||||
|
|
||||||
dbCreateItemOnObject(sItem, oTarget, 1);
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
||||||
|
|
||||||
@@ -2410,7 +2417,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dbSpeak("Create Generic SImple; Specific = " + IntToString(nModifier));
|
//dbSpeak("Create Generic SImple; Specific = " + IntToString(nModifier));
|
||||||
|
|
||||||
dbCreateItemOnObject(sItem, oTarget, 1);
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
||||||
}
|
}
|
||||||
@@ -2594,7 +2601,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dbSpeak("Create Generic Martial");
|
//dbSpeak("Create Generic Martial");
|
||||||
|
|
||||||
dbCreateItemOnObject(sItem, oTarget, 1);
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
||||||
}
|
}
|
||||||
@@ -2726,7 +2733,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
dbSpeak("Create generic exotic");
|
//dbSpeak("Create generic exotic");
|
||||||
|
|
||||||
dbCreateItemOnObject(sItem, oTarget, 1);
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
||||||
}
|
}
|
||||||
@@ -2825,7 +2832,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
dbSpeak("Create Generic light");
|
//dbSpeak("Create Generic light");
|
||||||
|
|
||||||
dbCreateItemOnObject(sItem, oTarget, 1);
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
||||||
}
|
}
|
||||||
@@ -2952,7 +2959,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
dbSpeak("Create Generic medium");
|
//dbSpeak("Create Generic medium");
|
||||||
|
|
||||||
dbCreateItemOnObject(sItem, oTarget, 1);
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
||||||
}
|
}
|
||||||
@@ -3058,7 +3065,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
dbSpeak("Create Generic heavy");
|
// dbSpeak("Create Generic heavy");
|
||||||
|
|
||||||
dbCreateItemOnObject(sItem, oTarget, 1);
|
dbCreateItemOnObject(sItem, oTarget, 1);
|
||||||
}
|
}
|
||||||
@@ -4007,7 +4014,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
// * if nSpecific is = 1 then spawn in 'named' items at the higher levels
|
// * if nSpecific is = 1 then spawn in 'named' items at the higher levels
|
||||||
void CreateTable2Item(object oTarget, object oAdventurer, int nSpecific=0)
|
void CreateTable2Item(object oTarget, object oAdventurer, int nSpecific=0)
|
||||||
{
|
{
|
||||||
dbSpeak("In CreateTable2Item");
|
//dbSpeak("In CreateTable2Item");
|
||||||
string sItem = "";
|
string sItem = "";
|
||||||
int nProbMisc = 0;
|
int nProbMisc = 0;
|
||||||
int nProbClass = 0;
|
int nProbClass = 0;
|
||||||
@@ -4042,9 +4049,12 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
|
|
||||||
|
|
||||||
//* SETUP probabilities based on Class
|
//* SETUP probabilities based on Class
|
||||||
if ( nClass == CLASS_TYPE_FIGHTER || nClass == CLASS_TYPE_PALADIN || nSpecialRanger == 1)
|
if ( nClass == CLASS_TYPE_FIGHTER || nClass == CLASS_TYPE_PALADIN || nSpecialRanger == 1
|
||||||
|
|| nClass == CLASS_TYPE_ANTI_PALADIN || nClass == CLASS_TYPE_BRAWLER || nClass == CLASS_TYPE_CRUSADER
|
||||||
|
|| nClass == CLASS_TYPE_DUSKBLADE || nClass == CLASS_TYPE_KNIGHT || nClass == CLASS_TYPE_MARSHAL
|
||||||
|
|| nClass == CLASS_TYPE_PSYWAR || nClass == CLASS_TYPE_SOHEI)
|
||||||
{
|
{
|
||||||
dbSpeak("I am fighter or paladin or heavy ranger");
|
//dbSpeak("I am fighter or paladin or heavy ranger");
|
||||||
nProbMisc = 20;
|
nProbMisc = 20;
|
||||||
nProbClass = 0;
|
nProbClass = 0;
|
||||||
nProbRodStaffWand = 5;
|
nProbRodStaffWand = 5;
|
||||||
@@ -4058,7 +4068,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
else
|
else
|
||||||
if (nClass == CLASS_TYPE_WIZARD || nClass == CLASS_TYPE_SORCERER)
|
if (nClass == CLASS_TYPE_WIZARD || nClass == CLASS_TYPE_SORCERER)
|
||||||
{
|
{
|
||||||
dbSpeak("I am wizard or sorcerer");
|
//dbSpeak("I am wizard or sorcerer");
|
||||||
nProbMisc = 40;
|
nProbMisc = 40;
|
||||||
nProbClass = 30;
|
nProbClass = 30;
|
||||||
nProbRodStaffWand = 15;
|
nProbRodStaffWand = 15;
|
||||||
@@ -4070,9 +4080,10 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
nProbHeavy = 2;
|
nProbHeavy = 2;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (nClass == CLASS_TYPE_BARBARIAN || nSpecialRanger == 2)
|
if (nClass == CLASS_TYPE_BARBARIAN || nSpecialRanger == 2 || nClass == CLASS_TYPE_BOWMAN
|
||||||
|
|| nClass == CLASS_TYPE_HEXBLADE || nClass == CLASS_TYPE_WARBLADE)
|
||||||
{
|
{
|
||||||
dbSpeak("I am barbarian or light ranger");
|
//dbSpeak("I am barbarian or light ranger");
|
||||||
|
|
||||||
nProbMisc = 20;
|
nProbMisc = 20;
|
||||||
nProbClass = 0;
|
nProbClass = 0;
|
||||||
@@ -4085,9 +4096,97 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
nProbHeavy = 3;
|
nProbHeavy = 3;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
if (nClass == CLASS_TYPE_ARCHIVIST || nClass == CLASS_TYPE_DRAGON_SHAMAN || nClass == CLASS_TYPE_FAVOURED_SOUL
|
||||||
|
|| nClass == CLASS_TYPE_MYSTIC || nClass == CLASS_TYPE_WARMAGE || nClass == CLASS_TYPE_TEMPLAR)
|
||||||
|
{
|
||||||
|
//type 1
|
||||||
|
nProbMisc = 25;
|
||||||
|
nProbClass = 0;
|
||||||
|
nProbRodStaffWand = 15;
|
||||||
|
nProbSimple = 15;
|
||||||
|
nProbMartial = 8;
|
||||||
|
nProbExotic = 6;
|
||||||
|
nProbLight = 15;
|
||||||
|
nProbMedium = 10;
|
||||||
|
nProbHeavy = 6;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (nClass == CLASS_TYPE_NOBLE || nClass == CLASS_TYPE_SWASHBUCKLER || nClass == CLASS_TYPE_SWORDSAGE
|
||||||
|
|| nClass == CLASS_TYPE_ULTIMATE_RANGER)
|
||||||
|
{
|
||||||
|
//type 2
|
||||||
|
nProbMisc = 27;
|
||||||
|
nProbClass = 0;
|
||||||
|
nProbRodStaffWand = 5;
|
||||||
|
nProbSimple = 15;
|
||||||
|
nProbMartial = 20;
|
||||||
|
nProbExotic = 10;
|
||||||
|
nProbLight = 10;
|
||||||
|
nProbMedium = 8;
|
||||||
|
nProbHeavy = 5;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (nClass == CLASS_TYPE_BEGUILER || nClass == CLASS_TYPE_DREAD_NECROMANCER || nClass == CLASS_TYPE_HEALER
|
||||||
|
|| nClass == CLASS_TYPE_SCOUT || nClass == CLASS_TYPE_SHAMAN || nClass == CLASS_TYPE_SOULKNIFE
|
||||||
|
|| nClass == CLASS_TYPE_TRUENAMER || nClass == CLASS_TYPE_WARLOCK || nClass == CLASS_TYPE_WILDER)
|
||||||
|
{
|
||||||
|
//type 3
|
||||||
|
nProbMisc = 45;
|
||||||
|
nProbClass = 0;
|
||||||
|
nProbRodStaffWand = 7;
|
||||||
|
nProbSimple = 15;
|
||||||
|
nProbMartial = 5;
|
||||||
|
nProbExotic = 5;
|
||||||
|
nProbLight = 15;
|
||||||
|
nProbMedium = 4;
|
||||||
|
nProbHeavy = 4;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (nClass == CLASS_TYPE_DRAGONFIRE_ADEPT || nClass == CLASS_TYPE_PSION || nClass == CLASS_TYPE_WITCH)
|
||||||
|
{
|
||||||
|
//type 4
|
||||||
|
nProbMisc = 50;
|
||||||
|
nProbClass = 0;
|
||||||
|
nProbRodStaffWand = 10;
|
||||||
|
nProbSimple = 20;
|
||||||
|
nProbMartial = 5;
|
||||||
|
nProbExotic = 5;
|
||||||
|
nProbLight = 4;
|
||||||
|
nProbMedium = 3;
|
||||||
|
nProbHeavy = 3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (nClass == CLASS_TYPE_NINJA)
|
||||||
|
{
|
||||||
|
//type 5
|
||||||
|
nProbMisc = 45;
|
||||||
|
nProbClass = 0;
|
||||||
|
nProbRodStaffWand = 2;
|
||||||
|
nProbSimple = 12;
|
||||||
|
nProbMartial = 6;
|
||||||
|
nProbExotic = 26;
|
||||||
|
nProbLight = 3;
|
||||||
|
nProbMedium = 3;
|
||||||
|
nProbHeavy = 3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (nClass == CLASS_TYPE_CW_SAMURAI || nClass == CLASS_TYPE_SAMURAI)
|
||||||
|
{
|
||||||
|
//type 6
|
||||||
|
nProbMisc = 25;
|
||||||
|
nProbClass = 0;
|
||||||
|
nProbRodStaffWand = 5;
|
||||||
|
nProbSimple = 5;
|
||||||
|
nProbMartial = 10;
|
||||||
|
nProbExotic = 20;
|
||||||
|
nProbLight = 10;
|
||||||
|
nProbMedium = 20;
|
||||||
|
nProbHeavy = 5;
|
||||||
|
}
|
||||||
|
else
|
||||||
if (nClass == CLASS_TYPE_CLERIC)
|
if (nClass == CLASS_TYPE_CLERIC)
|
||||||
{
|
{
|
||||||
dbSpeak("I am cleric");
|
//dbSpeak("I am cleric");
|
||||||
|
|
||||||
nProbMisc = 20;
|
nProbMisc = 20;
|
||||||
nProbClass = 10;
|
nProbClass = 10;
|
||||||
@@ -4102,7 +4201,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
else
|
else
|
||||||
if (nClass == CLASS_TYPE_DRUID)
|
if (nClass == CLASS_TYPE_DRUID)
|
||||||
{
|
{
|
||||||
dbSpeak("I am druid");
|
//dbSpeak("I am druid");
|
||||||
|
|
||||||
nProbMisc = 20;
|
nProbMisc = 20;
|
||||||
nProbClass = 25;
|
nProbClass = 25;
|
||||||
@@ -4117,7 +4216,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
else
|
else
|
||||||
if (nClass == CLASS_TYPE_MONK)
|
if (nClass == CLASS_TYPE_MONK)
|
||||||
{
|
{
|
||||||
dbSpeak("I am monk");
|
//dbSpeak("I am monk");
|
||||||
nProbMisc = 20;
|
nProbMisc = 20;
|
||||||
nProbClass = 50;
|
nProbClass = 50;
|
||||||
nProbRodStaffWand = 2;
|
nProbRodStaffWand = 2;
|
||||||
@@ -4129,9 +4228,9 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
nProbHeavy = 4;
|
nProbHeavy = 4;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (nClass == CLASS_TYPE_ROGUE)
|
if (nClass == CLASS_TYPE_ROGUE || nClass == CLASS_TYPE_PSYCHIC_ROGUE)
|
||||||
{
|
{
|
||||||
dbSpeak("I am rogue");
|
//dbSpeak("I am rogue");
|
||||||
|
|
||||||
nProbMisc = 25;
|
nProbMisc = 25;
|
||||||
nProbClass = 10;
|
nProbClass = 10;
|
||||||
@@ -4146,7 +4245,7 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
else
|
else
|
||||||
if (nClass == CLASS_TYPE_BARD)
|
if (nClass == CLASS_TYPE_BARD)
|
||||||
{
|
{
|
||||||
dbSpeak("I am bard");
|
//dbSpeak("I am bard");
|
||||||
|
|
||||||
nProbMisc = 25;
|
nProbMisc = 25;
|
||||||
nProbClass = 5;
|
nProbClass = 5;
|
||||||
@@ -4158,11 +4257,11 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
nProbMedium = 5;
|
nProbMedium = 5;
|
||||||
nProbHeavy = 5;
|
nProbHeavy = 5;
|
||||||
}
|
}
|
||||||
else
|
//else
|
||||||
{
|
//{
|
||||||
dbSpeak("No Valid Class");
|
// dbSpeak("No Valid Class");
|
||||||
}
|
//}
|
||||||
dbSpeak("Table2Item: After Class Distribution");
|
//dbSpeak("Table2Item: After Class Distribution");
|
||||||
//* Create Items based on Probabilities
|
//* Create Items based on Probabilities
|
||||||
int nRandom = d100();
|
int nRandom = d100();
|
||||||
if (nRandom <= nProbMisc)
|
if (nRandom <= nProbMisc)
|
||||||
@@ -4219,10 +4318,10 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
if (nSpecific == 0) CreateGenericHeavyArmor(oTarget, oAdventurer);
|
if (nSpecific == 0) CreateGenericHeavyArmor(oTarget, oAdventurer);
|
||||||
else CreateSpecificHeavyArmor(oTarget, oAdventurer);
|
else CreateSpecificHeavyArmor(oTarget, oAdventurer);
|
||||||
}
|
}
|
||||||
else
|
//else
|
||||||
{
|
//{
|
||||||
dbSpeak("Generic Generic or Specific; error: 3524");
|
// dbSpeak("Generic Generic or Specific; error: 3524");
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
//::///////////////////////////////////////////////
|
//::///////////////////////////////////////////////
|
||||||
@@ -4251,12 +4350,12 @@ int GetNumberOfItems(int nTreasureType)
|
|||||||
void GenerateTreasure(int nTreasureType, object oLastOpener, object oCreateOn)
|
void GenerateTreasure(int nTreasureType, object oLastOpener, object oCreateOn)
|
||||||
{
|
{
|
||||||
|
|
||||||
dbSpeak("*********************NEW TREASURE*************************");
|
//dbSpeak("*********************NEW TREASURE*************************");
|
||||||
|
|
||||||
// * abort treasure if no one opened the container
|
// * abort treasure if no one opened the container
|
||||||
if (GetIsObjectValid(oLastOpener) == FALSE)
|
if (GetIsObjectValid(oLastOpener) == FALSE)
|
||||||
{
|
{
|
||||||
dbSpeak("Aborted. No valid Last Opener");
|
//dbSpeak("Aborted. No valid Last Opener");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4334,7 +4433,7 @@ void GenerateTreasure(int nTreasureType, object oLastOpener, object oCreateOn)
|
|||||||
nProbTable2 = HIGH_PROB_TABLE2;
|
nProbTable2 = HIGH_PROB_TABLE2;
|
||||||
}
|
}
|
||||||
else if (nTreasureType == TREASURE_BOSS)
|
else if (nTreasureType == TREASURE_BOSS)
|
||||||
{ dbSpeak("boss");
|
{ //dbSpeak("boss");
|
||||||
nProbTable2 = 100;
|
nProbTable2 = 100;
|
||||||
nSpecific = 1;
|
nSpecific = 1;
|
||||||
}
|
}
|
||||||
@@ -4345,7 +4444,7 @@ void GenerateTreasure(int nTreasureType, object oLastOpener, object oCreateOn)
|
|||||||
nProbDivine = 4;
|
nProbDivine = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
dbSpeak("Generate Treasure nSpecific = " + IntToString(nSpecific));
|
//dbSpeak("Generate Treasure nSpecific = " + IntToString(nSpecific));
|
||||||
|
|
||||||
for (i = 1; i <= nNumberItems; i++)
|
for (i = 1; i <= nNumberItems; i++)
|
||||||
{
|
{
|
||||||
@@ -4376,8 +4475,8 @@ void GenerateTreasure(int nTreasureType, object oLastOpener, object oCreateOn)
|
|||||||
{
|
{
|
||||||
CreateTable2Item(oCreateOn, oLastOpener, nSpecific); // * Weapons, Armor, Misc - Class based
|
CreateTable2Item(oCreateOn, oLastOpener, nSpecific); // * Weapons, Armor, Misc - Class based
|
||||||
}
|
}
|
||||||
else
|
//else
|
||||||
dbSpeak("other stuff");
|
// dbSpeak("other stuff");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -4385,23 +4484,23 @@ void GenerateTreasure(int nTreasureType, object oLastOpener, object oCreateOn)
|
|||||||
}
|
}
|
||||||
void GenerateLowTreasure(object oLastOpener, object oCreateOn=OBJECT_INVALID)
|
void GenerateLowTreasure(object oLastOpener, object oCreateOn=OBJECT_INVALID)
|
||||||
{
|
{
|
||||||
//GenerateTreasure(TREASURE_LOW, oLastOpener, oCreateOn);
|
GenerateTreasure(TREASURE_LOW, oLastOpener, oCreateOn);
|
||||||
}
|
}
|
||||||
void GenerateMediumTreasure(object oLastOpener, object oCreateOn=OBJECT_INVALID)
|
void GenerateMediumTreasure(object oLastOpener, object oCreateOn=OBJECT_INVALID)
|
||||||
{
|
{
|
||||||
//GenerateTreasure(TREASURE_MEDIUM, oLastOpener, oCreateOn);
|
GenerateTreasure(TREASURE_MEDIUM, oLastOpener, oCreateOn);
|
||||||
}
|
}
|
||||||
void GenerateHighTreasure(object oLastOpener, object oCreateOn=OBJECT_INVALID)
|
void GenerateHighTreasure(object oLastOpener, object oCreateOn=OBJECT_INVALID)
|
||||||
{
|
{
|
||||||
//GenerateTreasure(TREASURE_HIGH, oLastOpener, oCreateOn);
|
GenerateTreasure(TREASURE_HIGH, oLastOpener, oCreateOn);
|
||||||
}
|
}
|
||||||
void GenerateBossTreasure(object oLastOpener, object oCreateOn=OBJECT_INVALID)
|
void GenerateBossTreasure(object oLastOpener, object oCreateOn=OBJECT_INVALID)
|
||||||
{
|
{
|
||||||
//GenerateTreasure(TREASURE_BOSS, oLastOpener, oCreateOn);
|
GenerateTreasure(TREASURE_BOSS, oLastOpener, oCreateOn);
|
||||||
}
|
}
|
||||||
void GenerateBookTreasure(object oLastOpener, object oCreateOn=OBJECT_INVALID)
|
void GenerateBookTreasure(object oLastOpener, object oCreateOn=OBJECT_INVALID)
|
||||||
{
|
{
|
||||||
//GenerateTreasure(TREASURE_BOOK, oLastOpener, oCreateOn);
|
GenerateTreasure(TREASURE_BOOK, oLastOpener, oCreateOn);
|
||||||
}
|
}
|
||||||
//::///////////////////////////////////////////////
|
//::///////////////////////////////////////////////
|
||||||
//:: GenerateNPCTreasure
|
//:: GenerateNPCTreasure
|
||||||
@@ -4443,23 +4542,23 @@ void GenerateNPCTreasure(int nTreasureValue=1, object oTreasureGetter=OBJECT_SEL
|
|||||||
// if a creature
|
// if a creature
|
||||||
if (Random(100)+1 >= 75)
|
if (Random(100)+1 >= 75)
|
||||||
{
|
{
|
||||||
//GenerateTreasure(TREASURE_LOW, oTreasureGetter, oKiller);
|
GenerateTreasure(TREASURE_LOW, oTreasureGetter, oKiller);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (nTreasureValue == 2)
|
if (nTreasureValue == 2)
|
||||||
{
|
{
|
||||||
//GenerateTreasure(TREASURE_MEDIUM, oTreasureGetter, oKiller);
|
GenerateTreasure(TREASURE_MEDIUM, oTreasureGetter, oKiller);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (nTreasureValue == 3)
|
if (nTreasureValue == 3)
|
||||||
{
|
{
|
||||||
//GenerateTreasure(TREASURE_HIGH, oTreasureGetter, oKiller);
|
GenerateTreasure(TREASURE_HIGH, oTreasureGetter, oKiller);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (nTreasureValue == 4)
|
if (nTreasureValue == 4)
|
||||||
{
|
{
|
||||||
//GenerateBossTreasure(oKiller, oTreasureGetter);
|
GenerateBossTreasure(oKiller, oTreasureGetter);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -4518,6 +4617,47 @@ void ShoutDisturbed()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int nGetIsBaseClass(int nClass)
|
||||||
|
{
|
||||||
|
return (nClass <= CLASS_TYPE_WIZARD ||
|
||||||
|
nClass == CLASS_TYPE_ANTI_PALADIN ||
|
||||||
|
nClass == CLASS_TYPE_ARCHIVIST ||
|
||||||
|
nClass == CLASS_TYPE_BEGUILER ||
|
||||||
|
nClass == CLASS_TYPE_BOWMAN ||
|
||||||
|
nClass == CLASS_TYPE_BRAWLER ||
|
||||||
|
nClass == CLASS_TYPE_CRUSADER ||
|
||||||
|
nClass == CLASS_TYPE_DRAGON_SHAMAN ||
|
||||||
|
nClass == CLASS_TYPE_DRAGONFIRE_ADEPT ||
|
||||||
|
nClass == CLASS_TYPE_DREAD_NECROMANCER ||
|
||||||
|
nClass == CLASS_TYPE_DUSKBLADE ||
|
||||||
|
nClass == CLASS_TYPE_FAVOURED_SOUL ||
|
||||||
|
nClass == CLASS_TYPE_HEALER ||
|
||||||
|
nClass == CLASS_TYPE_HEXBLADE ||
|
||||||
|
nClass == CLASS_TYPE_KNIGHT ||
|
||||||
|
nClass == CLASS_TYPE_MARSHAL ||
|
||||||
|
nClass == CLASS_TYPE_MYSTIC ||
|
||||||
|
nClass == CLASS_TYPE_NINJA ||
|
||||||
|
nClass == CLASS_TYPE_NOBLE ||
|
||||||
|
nClass == CLASS_TYPE_PSION ||
|
||||||
|
nClass == CLASS_TYPE_PSYWAR ||
|
||||||
|
nClass == CLASS_TYPE_PSYCHIC_ROGUE ||
|
||||||
|
nClass == CLASS_TYPE_SAMURAI ||
|
||||||
|
nClass == CLASS_TYPE_CW_SAMURAI ||
|
||||||
|
nClass == CLASS_TYPE_SCOUT ||
|
||||||
|
nClass == CLASS_TYPE_SHAMAN ||
|
||||||
|
nClass == CLASS_TYPE_SOHEI ||
|
||||||
|
nClass == CLASS_TYPE_SOULKNIFE ||
|
||||||
|
nClass == CLASS_TYPE_SWASHBUCKLER ||
|
||||||
|
nClass == CLASS_TYPE_SWORDSAGE ||
|
||||||
|
nClass == CLASS_TYPE_TRUENAMER ||
|
||||||
|
nClass == CLASS_TYPE_ULTIMATE_RANGER ||
|
||||||
|
nClass == CLASS_TYPE_WARBLADE ||
|
||||||
|
nClass == CLASS_TYPE_WARLOCK ||
|
||||||
|
nClass == CLASS_TYPE_WARMAGE ||
|
||||||
|
nClass == CLASS_TYPE_WILDER ||
|
||||||
|
nClass == CLASS_TYPE_WITCH ||
|
||||||
|
nClass == CLASS_TYPE_TEMPLAR);
|
||||||
|
}
|
||||||
|
|
||||||
//::///////////////////////////////////////////////
|
//::///////////////////////////////////////////////
|
||||||
//:: Determine Class to Use
|
//:: Determine Class to Use
|
||||||
@@ -4536,35 +4676,96 @@ int nDetermineClassToUse(object oCharacter)
|
|||||||
{
|
{
|
||||||
int nClass;
|
int nClass;
|
||||||
int nTotal = GetHitDice(oCharacter);
|
int nTotal = GetHitDice(oCharacter);
|
||||||
dbSpeak("Hit dice " + IntToString(nTotal));
|
//dbSpeak("Hit dice " + IntToString(nTotal));
|
||||||
if (nTotal < 1)
|
if (nTotal < 1)
|
||||||
{
|
{
|
||||||
nTotal = 1;
|
nTotal = 1;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
float fTotal = IntToFloat(nTotal);
|
float fTotal = IntToFloat(nTotal);
|
||||||
if (GetIsObjectValid(oCharacter) == FALSE)
|
//if (GetIsObjectValid(oCharacter) == FALSE)
|
||||||
{
|
//{
|
||||||
dbSpeak("DetermineClassToUse: This character is invalid");
|
// dbSpeak("DetermineClassToUse: This character is invalid");
|
||||||
}
|
//}
|
||||||
|
|
||||||
int nClass1 = GetClassByPosition(1, oCharacter);
|
int nClass1 = GetClassByPosition(1, oCharacter);
|
||||||
int nState1 = FloatToInt((IntToFloat(GetLevelByClass(nClass1, oCharacter)) / fTotal) * 100);
|
int nState1 = FloatToInt((IntToFloat(GetLevelByClass(nClass1, oCharacter)) / fTotal) * 100);
|
||||||
dbSpeak("Level 1 Class Level = " + IntToString(GetLevelByClass(nClass1,oCharacter)));
|
//dbSpeak("Level 1 Class Level = " + IntToString(GetLevelByClass(nClass1,oCharacter)));
|
||||||
|
|
||||||
PrintString("GENERIC SCRIPT DEBUG STRING ********** " + GetTag(oCharacter) + "Class 1 " + IntToString(nState1));
|
//PrintString("GENERIC SCRIPT DEBUG STRING ********** " + GetTag(oCharacter) + "Class 1 " + IntToString(nState1));
|
||||||
dbSpeak("State 1 " + IntToString(nState1));
|
//dbSpeak("State 1 " + IntToString(nState1));
|
||||||
int nClass2 = GetClassByPosition(2, oCharacter);
|
int nClass2 = GetClassByPosition(2, oCharacter);
|
||||||
int nState2 = FloatToInt((IntToFloat(GetLevelByClass(nClass2, oCharacter)) / fTotal) * 100) + nState1;
|
int nState2 = FloatToInt((IntToFloat(GetLevelByClass(nClass2, oCharacter)) / fTotal) * 100) + nState1;
|
||||||
PrintString("GENERIC SCRIPT DEBUG STRING ********** " + GetTag(oCharacter) + "Class 2 " + IntToString(nState2));
|
//PrintString("GENERIC SCRIPT DEBUG STRING ********** " + GetTag(oCharacter) + "Class 2 " + IntToString(nState2));
|
||||||
|
|
||||||
int nClass3 = GetClassByPosition(3, oCharacter);
|
int nClass3 = GetClassByPosition(3, oCharacter);
|
||||||
int nState3 = FloatToInt((IntToFloat(GetLevelByClass(nClass3, oCharacter)) / fTotal) * 100) + nState2;
|
int nState3 = FloatToInt((IntToFloat(GetLevelByClass(nClass3, oCharacter)) / fTotal) * 100) + nState2;
|
||||||
PrintString("GENERIC SCRIPT DEBUG STRING ********** " + GetTag(oCharacter) + "Class 3 " + IntToString(nState3));
|
//PrintString("GENERIC SCRIPT DEBUG STRING ********** " + GetTag(oCharacter) + "Class 3 " + IntToString(nState3));
|
||||||
|
*/
|
||||||
|
int nClass1 = GetClassByPosition(1, oCharacter);
|
||||||
|
int nClass2 = GetClassByPosition(2, oCharacter);
|
||||||
|
int nClass3 = GetClassByPosition(3, oCharacter);
|
||||||
|
int nClass4 = GetClassByPosition(4, oCharacter);
|
||||||
|
int nClass5 = GetClassByPosition(5, oCharacter);
|
||||||
|
int nClass6 = GetClassByPosition(6, oCharacter);
|
||||||
|
int nClass7 = GetClassByPosition(7, oCharacter);
|
||||||
|
int nClass8 = GetClassByPosition(8, oCharacter);
|
||||||
|
|
||||||
|
int nState1 = GetLevelByClass(nClass1, oCharacter) * 100 / nTotal;
|
||||||
|
int nState2 = GetLevelByClass(nClass2, oCharacter) * 100 / nTotal + nState1;
|
||||||
|
int nState3 = GetLevelByClass(nClass3, oCharacter) * 100 / nTotal + nState2;
|
||||||
|
int nState4 = GetLevelByClass(nClass4, oCharacter) * 100 / nTotal + nState3;
|
||||||
|
int nState5 = GetLevelByClass(nClass5, oCharacter) * 100 / nTotal + nState4;
|
||||||
|
int nState6 = GetLevelByClass(nClass6, oCharacter) * 100 / nTotal + nState5;
|
||||||
|
int nState7 = GetLevelByClass(nClass7, oCharacter) * 100 / nTotal + nState6;
|
||||||
|
|
||||||
|
// nState8 will always be 100 if there is an eigth class, or 0 if there isn't
|
||||||
|
//int nState8 = GetLevelByClass(nClass3, oCharacter) * 100 / nTotal + nState7;
|
||||||
|
|
||||||
|
// correct for unrecognized classes - assumes the first class will be a non-prestige player class
|
||||||
|
if(nClass2 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass2))
|
||||||
|
{
|
||||||
|
nClass2 = CLASS_TYPE_INVALID;
|
||||||
|
nState1 = nState2;
|
||||||
|
}
|
||||||
|
if(nClass3 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass3))
|
||||||
|
{
|
||||||
|
nClass3 = CLASS_TYPE_INVALID;
|
||||||
|
nState1 = nState3;
|
||||||
|
}
|
||||||
|
if(nClass4 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass4))
|
||||||
|
{
|
||||||
|
nClass4 = CLASS_TYPE_INVALID;
|
||||||
|
nState1 = nState4;
|
||||||
|
}
|
||||||
|
if(nClass5 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass5))
|
||||||
|
{
|
||||||
|
nClass5 = CLASS_TYPE_INVALID;
|
||||||
|
nState1 = nState5;
|
||||||
|
}
|
||||||
|
if(nClass6 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass6))
|
||||||
|
{
|
||||||
|
nClass6 = CLASS_TYPE_INVALID;
|
||||||
|
nState1 = nState6;
|
||||||
|
}
|
||||||
|
if(nClass7 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass7))
|
||||||
|
{
|
||||||
|
nClass7 = CLASS_TYPE_INVALID;
|
||||||
|
nState1 = nState7;
|
||||||
|
}
|
||||||
|
if(nClass8 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass8))
|
||||||
|
{
|
||||||
|
nClass8 = CLASS_TYPE_INVALID;
|
||||||
|
if(nClass7 != CLASS_TYPE_INVALID)
|
||||||
|
nState7 = 100;
|
||||||
|
else nState1 = 100;
|
||||||
|
}
|
||||||
|
|
||||||
int nUseClass = d100();
|
int nUseClass = d100();
|
||||||
PrintString("GENERIC SCRIPT DEBUG STRING ********** " + "D100 Roll " +IntToString(nUseClass));
|
//PrintString("GENERIC SCRIPT DEBUG STRING ********** " + "D100 Roll " +IntToString(nUseClass));
|
||||||
|
|
||||||
|
|
||||||
dbSpeak("Before comparison : " + IntToString(nClass1));
|
//dbSpeak("Before comparison : " + IntToString(nClass1));
|
||||||
if(nUseClass <= nState1)
|
if(nUseClass <= nState1)
|
||||||
{
|
{
|
||||||
nClass = nClass1;
|
nClass = nClass1;
|
||||||
@@ -4575,11 +4776,16 @@ int nDetermineClassToUse(object oCharacter)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
nClass = nClass3;
|
// might be possible to end up here by accident because of a rounding error
|
||||||
|
// so just in case...
|
||||||
|
if(nClass3 == CLASS_TYPE_INVALID) nClass = nClass1;
|
||||||
|
else nClass = nClass3;
|
||||||
}
|
}
|
||||||
dbSpeak("Class from determineClass " + IntToString(nClass));
|
|
||||||
|
//dbSpeak("Class from determineClass " + IntToString(nClass));
|
||||||
return nClass;
|
return nClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//:: Test Void
|
||||||
|
//void main () {}
|
||||||
|
|
||||||
|
|||||||
@@ -10,9 +10,586 @@ void ShifterCheck(object oPC);
|
|||||||
#include "pnp_shft_main"
|
#include "pnp_shft_main"
|
||||||
#include "prc_inc_shifting"
|
#include "prc_inc_shifting"
|
||||||
|
|
||||||
|
//::////////////////Begin Werewolf//////////////////
|
||||||
const string PRC_PNP_SHIFTING = "PRC_Shift";
|
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)
|
void LycanthropePoly(object oPC, int nPoly)
|
||||||
{
|
{
|
||||||
@@ -84,7 +661,7 @@ void LycanthropePoly(object oPC, int nPoly)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////End Werewolf//////////////////
|
////////////////End Werewolf////////////////// */
|
||||||
|
|
||||||
void ShifterCheck(object oPC)
|
void ShifterCheck(object oPC)
|
||||||
{
|
{
|
||||||
@@ -247,3 +824,5 @@ void DoTail(object oPC, int nTailType)
|
|||||||
//override any stored default appearance
|
//override any stored default appearance
|
||||||
SetPersistantLocalInt(oPC, "AppearanceStoredTail", nTailType);
|
SetPersistantLocalInt(oPC, "AppearanceStoredTail", nTailType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//::void main (){}
|
||||||
@@ -513,6 +513,8 @@ int PRCGetSpellSaveDC(int nSpellID = -1, int nSchool = -1, object oCaster = OBJE
|
|||||||
|
|
||||||
if(nClass == CLASS_TYPE_BARD)
|
if(nClass == CLASS_TYPE_BARD)
|
||||||
nDC += StringToInt(Get2DACache("Spells", "Bard", nSpellID));
|
nDC += StringToInt(Get2DACache("Spells", "Bard", nSpellID));
|
||||||
|
else if(nClass == CLASS_TYPE_ASSASSIN)
|
||||||
|
nDC += StringToInt(Get2DACache("Spells", "Assassin", nSpellID));
|
||||||
else if(nClass == CLASS_TYPE_CLERIC || nClass == CLASS_TYPE_UR_PRIEST || nClass == CLASS_TYPE_OCULAR)
|
else if(nClass == CLASS_TYPE_CLERIC || nClass == CLASS_TYPE_UR_PRIEST || nClass == CLASS_TYPE_OCULAR)
|
||||||
nDC += StringToInt(Get2DACache("Spells", "Cleric", nSpellID));
|
nDC += StringToInt(Get2DACache("Spells", "Cleric", nSpellID));
|
||||||
else if(nClass == CLASS_TYPE_DRUID)
|
else if(nClass == CLASS_TYPE_DRUID)
|
||||||
|
|||||||
@@ -54,11 +54,11 @@ int SPGetPenetrAOE(object oCaster = OBJECT_SELF, int nCasterLvl = 0);
|
|||||||
/* Includes */
|
/* Includes */
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
//#include "prc_inc_spells"
|
#include "prc_inc_spells"
|
||||||
//#include "prc_alterations"
|
//#include "prc_alterations"
|
||||||
//#include "prcsp_archmaginc"
|
//#include "prcsp_archmaginc"
|
||||||
//#include "prc_inc_racial"
|
//#include "prc_inc_racial"
|
||||||
|
#include "inc_2dacache"
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Function definitions */
|
/* Function definitions */
|
||||||
|
|||||||
@@ -143,7 +143,7 @@ const int CLASS_TYPE_MASTER_HARPER = 176;
|
|||||||
const int CLASS_TYPE_FRE_BERSERKER = 177;
|
const int CLASS_TYPE_FRE_BERSERKER = 177;
|
||||||
const int CLASS_TYPE_TEMPEST = 178;
|
const int CLASS_TYPE_TEMPEST = 178;
|
||||||
const int CLASS_TYPE_FOE_HUNTER = 179;
|
const int CLASS_TYPE_FOE_HUNTER = 179;
|
||||||
//:: Free = 180
|
const int CLASS_TYPE_VERDANT_LORD = 180;
|
||||||
const int CLASS_TYPE_ORC_WARLORD = 181;
|
const int CLASS_TYPE_ORC_WARLORD = 181;
|
||||||
const int CLASS_TYPE_THRALL_OF_GRAZZT_A = 182;
|
const int CLASS_TYPE_THRALL_OF_GRAZZT_A = 182;
|
||||||
const int CLASS_TYPE_NECROCARNATE = 183;
|
const int CLASS_TYPE_NECROCARNATE = 183;
|
||||||
@@ -162,7 +162,7 @@ const int CLASS_TYPE_MASTER_OF_NINE = 195;
|
|||||||
const int CLASS_TYPE_ETERNAL_BLADE = 196;
|
const int CLASS_TYPE_ETERNAL_BLADE = 196;
|
||||||
const int CLASS_TYPE_SHADOW_SUN_NINJA = 197;
|
const int CLASS_TYPE_SHADOW_SUN_NINJA = 197;
|
||||||
const int CLASS_TYPE_WITCHBORN_BINDER = 198;
|
const int CLASS_TYPE_WITCHBORN_BINDER = 198;
|
||||||
const int CLASS_TYPE_BAELNORN = 199;
|
const int CLASS_TYPE_LION_OF_TALISID = 199;
|
||||||
const int CLASS_TYPE_DISCIPLE_OF_MEPH = 200;
|
const int CLASS_TYPE_DISCIPLE_OF_MEPH = 200;
|
||||||
const int CLASS_TYPE_SOUL_EATER = 201;
|
const int CLASS_TYPE_SOUL_EATER = 201;
|
||||||
const int CLASS_TYPE_HENSHIN_MYSTIC = 202;
|
const int CLASS_TYPE_HENSHIN_MYSTIC = 202;
|
||||||
@@ -236,6 +236,7 @@ const int CLASS_TYPE_WITCH = -1;
|
|||||||
const int CLASS_TYPE_TEMPLAR = -1;
|
const int CLASS_TYPE_TEMPLAR = -1;
|
||||||
const int CLASS_TYPE_MYSTIC = -1;
|
const int CLASS_TYPE_MYSTIC = -1;
|
||||||
const int CLASS_TYPE_NOBLE = -1;
|
const int CLASS_TYPE_NOBLE = -1;
|
||||||
|
const int CLASS_TYPE_BAELNORN = -2;
|
||||||
|
|
||||||
|
|
||||||
//void main (){}
|
//void main (){}
|
||||||
@@ -444,6 +444,7 @@ int Get2DALineFromItemprop(string sFile, itemproperty ip, object oItem)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ITEM_PROPERTY_ECHOBLADE: return 46; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
@@ -1529,7 +1530,12 @@ void ApplyItemProps(object oItem, string sFile, int nLine)
|
|||||||
break; //no more itemprops, no gaps, assuming no errors
|
break; //no more itemprops, no gaps, assuming no errors
|
||||||
}
|
}
|
||||||
if(sFile != "craft_weapon" && sFile != "craft_armour")
|
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
|
//Partly ripped off the lexicon :P
|
||||||
@@ -1620,7 +1626,8 @@ string GetCrafting2DA(object oItem)
|
|||||||
(nBase == BASE_ITEM_BOOTS) ||
|
(nBase == BASE_ITEM_BOOTS) ||
|
||||||
(nBase == BASE_ITEM_GLOVES) ||
|
(nBase == BASE_ITEM_GLOVES) ||
|
||||||
(nBase == BASE_ITEM_BRACER) ||
|
(nBase == BASE_ITEM_BRACER) ||
|
||||||
(nBase == BASE_ITEM_CLOAK))
|
(nBase == BASE_ITEM_CLOAK) ||
|
||||||
|
(nBase == BASE_ITEM_CRAFTED_VIAL))
|
||||||
)
|
)
|
||||||
return "craft_wondrous";
|
return "craft_wondrous";
|
||||||
|
|
||||||
@@ -1657,19 +1664,28 @@ int GetCraftingFeat(object oItem)
|
|||||||
if(nBase == BASE_ITEM_RING) return FEAT_FORGE_RING;
|
if(nBase == BASE_ITEM_RING) return FEAT_FORGE_RING;
|
||||||
|
|
||||||
//routing bioware feats through this convo
|
//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) ||
|
if((nBase == BASE_ITEM_MAGICROD) ||
|
||||||
(nBase == BASE_ITEM_CRAFTED_ROD)
|
(nBase == BASE_ITEM_CRAFTED_ROD)
|
||||||
)
|
)
|
||||||
return FEAT_CRAFT_ROD;
|
return FEAT_CRAFT_ROD;
|
||||||
|
|
||||||
if((nBase == BASE_ITEM_MAGICSTAFF) ||
|
if((nBase == BASE_ITEM_MAGICSTAFF) ||
|
||||||
(nBase == BASE_ITEM_CRAFTED_STAFF)
|
(nBase == BASE_ITEM_CRAFTED_STAFF)
|
||||||
)
|
)
|
||||||
return FEAT_CRAFT_STAFF;
|
return FEAT_CRAFT_STAFF;
|
||||||
|
|
||||||
if((nBase == BASE_ITEM_MAGICWAND) ||
|
if((nBase == BASE_ITEM_MAGICWAND) ||
|
||||||
(nBase == BASE_ITEM_BLANK_WAND)
|
(nBase == BASE_ITEM_BLANK_WAND)
|
||||||
)
|
)
|
||||||
return FEAT_CRAFT_WAND;
|
return FEAT_CRAFT_WAND;
|
||||||
|
|
||||||
if(nBase == BASE_ITEM_BLANK_POTION) return FEAT_BREW_POTION;
|
if(nBase == BASE_ITEM_BLANK_POTION) return FEAT_BREW_POTION;
|
||||||
|
|
||||||
if(nBase == BASE_ITEM_BLANK_SCROLL) return FEAT_SCRIBE_SCROLL;
|
if(nBase == BASE_ITEM_BLANK_SCROLL) return FEAT_SCRIBE_SCROLL;
|
||||||
|
|
||||||
if(((nBase == BASE_ITEM_HELMET) ||
|
if(((nBase == BASE_ITEM_HELMET) ||
|
||||||
@@ -1678,7 +1694,8 @@ int GetCraftingFeat(object oItem)
|
|||||||
(nBase == BASE_ITEM_BOOTS) ||
|
(nBase == BASE_ITEM_BOOTS) ||
|
||||||
(nBase == BASE_ITEM_GLOVES) ||
|
(nBase == BASE_ITEM_GLOVES) ||
|
||||||
(nBase == BASE_ITEM_BRACER) ||
|
(nBase == BASE_ITEM_BRACER) ||
|
||||||
(nBase == BASE_ITEM_CLOAK))
|
(nBase == BASE_ITEM_CLOAK) ||
|
||||||
|
(nBase == BASE_ITEM_CRAFTED_VIAL))
|
||||||
)
|
)
|
||||||
return FEAT_CRAFT_WONDROUS;
|
return FEAT_CRAFT_WONDROUS;
|
||||||
|
|
||||||
|
|||||||
@@ -75,6 +75,14 @@ void DeathlessFrenzyCheck(object oTarget);
|
|||||||
// * PRC Version of a Bioware function to disable include loops
|
// * PRC Version of a Bioware function to disable include loops
|
||||||
void PRCRemoveSpellEffects(int nSpell_ID, object oCaster, object oTarget);
|
void PRCRemoveSpellEffects(int nSpell_ID, object oCaster, object oTarget);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Target is immune to gaze attacks
|
||||||
|
*
|
||||||
|
* @return the Gaze Immunity effect
|
||||||
|
*/
|
||||||
|
effect EffectGazeImmune();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dazzles the target: -1 Attack, Search, Spot, and VFX
|
* Dazzles the target: -1 Attack, Search, Spot, and VFX
|
||||||
*
|
*
|
||||||
@@ -82,6 +90,9 @@ void PRCRemoveSpellEffects(int nSpell_ID, object oCaster, object oTarget);
|
|||||||
*/
|
*/
|
||||||
effect EffectDazzle();
|
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
|
* Shaken effect: -2 to attack, all skills and saving throws
|
||||||
*
|
*
|
||||||
@@ -170,14 +181,11 @@ effect EffectAbilityBasedSkillIncrease(int iAbility, int iIncrease = 1);
|
|||||||
*/
|
*/
|
||||||
effect EffectAbilityBasedSkillDecrease(int iAbility, int iDecrease = 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 section */
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "prc_inc_castlvl" // get prc_racial_const, prc_inc_nwscript, prc_inc_newip
|
#include "prc_inc_castlvl" // get prc_racial_const, prc_inc_nwscript, prc_inc_newip
|
||||||
|
#include "inc_epicspelldef"
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Internal functions */
|
/* Internal functions */
|
||||||
@@ -261,6 +269,8 @@ object GetObjectToApplyNewEffect(string sTag, object oPC, int nStripEffects = TR
|
|||||||
SetCreatureAppearanceType(oWP, APPEARANCE_TYPE_INVISIBLE_HUMAN_MALE);
|
SetCreatureAppearanceType(oWP, APPEARANCE_TYPE_INVISIBLE_HUMAN_MALE);
|
||||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY), oWP);
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY), oWP);
|
||||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectCutsceneGhost(), oWP);
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectCutsceneGhost(), oWP);
|
||||||
|
AssignCommand(oWP, ActionUseSkill(SKILL_HIDE, oWP));
|
||||||
|
|
||||||
}
|
}
|
||||||
//remove previous effects
|
//remove previous effects
|
||||||
if(nStripEffects)
|
if(nStripEffects)
|
||||||
@@ -583,7 +593,8 @@ effect PRCEffectHeal(int nHP, object oTarget)
|
|||||||
return EffectHeal(nHP);
|
return EffectHeal(nHP);
|
||||||
}
|
}
|
||||||
|
|
||||||
effect EffectAbilityBasedSkillIncrease(int iAbility, int iIncrease = 1){
|
effect EffectAbilityBasedSkillIncrease(int iAbility, int iIncrease = 1)
|
||||||
|
{
|
||||||
effect eReturn;
|
effect eReturn;
|
||||||
switch(iAbility)
|
switch(iAbility)
|
||||||
{
|
{
|
||||||
@@ -639,7 +650,8 @@ effect EffectAbilityBasedSkillIncrease(int iAbility, int iIncrease = 1){
|
|||||||
return eReturn;
|
return eReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
effect EffectAbilityBasedSkillDecrease(int iAbility, int iDecrease = 1){
|
effect EffectAbilityBasedSkillDecrease(int iAbility, int iDecrease = 1)
|
||||||
|
{
|
||||||
effect eReturn;
|
effect eReturn;
|
||||||
switch(iAbility)
|
switch(iAbility)
|
||||||
{
|
{
|
||||||
@@ -695,7 +707,8 @@ effect EffectAbilityBasedSkillDecrease(int iAbility, int iDecrease = 1){
|
|||||||
return eReturn;
|
return eReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
effect EffectDamageImmunityAll(){
|
effect EffectDamageImmunityAll()
|
||||||
|
{
|
||||||
effect eReturn = EffectDamageImmunityIncrease(DAMAGE_TYPE_ACID, 100);
|
effect eReturn = EffectDamageImmunityIncrease(DAMAGE_TYPE_ACID, 100);
|
||||||
eReturn = EffectLinkEffects(eReturn, EffectDamageImmunityIncrease(DAMAGE_TYPE_BLUDGEONING, 100));
|
eReturn = EffectLinkEffects(eReturn, EffectDamageImmunityIncrease(DAMAGE_TYPE_BLUDGEONING, 100));
|
||||||
eReturn = EffectLinkEffects(eReturn, EffectDamageImmunityIncrease(DAMAGE_TYPE_COLD, 100));
|
eReturn = EffectLinkEffects(eReturn, EffectDamageImmunityIncrease(DAMAGE_TYPE_COLD, 100));
|
||||||
@@ -712,7 +725,8 @@ effect EffectDamageImmunityAll(){
|
|||||||
return eReturn;
|
return eReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
effect EffectImmunityMiscAll(){
|
effect EffectImmunityMiscAll()
|
||||||
|
{
|
||||||
effect eReturn = EffectImmunity(IMMUNITY_TYPE_ABILITY_DECREASE);
|
effect eReturn = EffectImmunity(IMMUNITY_TYPE_ABILITY_DECREASE);
|
||||||
eReturn = EffectLinkEffects(eReturn, EffectImmunity(IMMUNITY_TYPE_BLINDNESS));
|
eReturn = EffectLinkEffects(eReturn, EffectImmunity(IMMUNITY_TYPE_BLINDNESS));
|
||||||
eReturn = EffectLinkEffects(eReturn, EffectImmunity(IMMUNITY_TYPE_DEAFNESS));
|
eReturn = EffectLinkEffects(eReturn, EffectImmunity(IMMUNITY_TYPE_DEAFNESS));
|
||||||
@@ -732,6 +746,47 @@ effect EffectImmunityMiscAll(){
|
|||||||
return eReturn;
|
return eReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//:: Immunity to all gaze attacks
|
||||||
|
effect EffectGazeImmune()
|
||||||
|
{
|
||||||
|
|
||||||
|
effect eReturn = EffectSpellImmunity(SPELLABILITY_GAZE_CHARM);
|
||||||
|
eReturn = EffectSpellImmunity(SPELLABILITY_GAZE_CONFUSION);
|
||||||
|
eReturn = EffectSpellImmunity(SPELLABILITY_GAZE_DAZE);
|
||||||
|
eReturn = EffectSpellImmunity(SPELLABILITY_GAZE_DEATH);
|
||||||
|
eReturn = EffectSpellImmunity(SPELLABILITY_GAZE_DESTROY_CHAOS);
|
||||||
|
eReturn = EffectSpellImmunity(SPELLABILITY_GAZE_DESTROY_EVIL);
|
||||||
|
eReturn = EffectSpellImmunity(SPELLABILITY_GAZE_DESTROY_GOOD);
|
||||||
|
eReturn = EffectSpellImmunity(SPELLABILITY_GAZE_DESTROY_LAW);
|
||||||
|
eReturn = EffectSpellImmunity(SPELLABILITY_GAZE_DOMINATE);
|
||||||
|
eReturn = EffectSpellImmunity(SPELLABILITY_GAZE_DOOM);
|
||||||
|
eReturn = EffectSpellImmunity(SPELLABILITY_GAZE_FEAR);
|
||||||
|
eReturn = EffectSpellImmunity(SPELLABILITY_GAZE_PARALYSIS);
|
||||||
|
eReturn = EffectSpellImmunity(SPELLABILITY_GAZE_PETRIFY);
|
||||||
|
eReturn = EffectSpellImmunity(SPELLABILITY_GAZE_STUNNED);
|
||||||
|
|
||||||
|
eReturn = TagEffect(eReturn, "PRCGazeImmune");
|
||||||
|
|
||||||
|
return eReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
//:: Immunity to all perification attacks
|
||||||
|
effect EffectPetrificationImmune()
|
||||||
|
{
|
||||||
|
effect eReturn = EffectSpellImmunity(SPELLABILITY_TOUCH_PETRIFY);
|
||||||
|
eReturn = EffectSpellImmunity(SPELLABILITY_BREATH_PETRIFY);
|
||||||
|
eReturn = EffectSpellImmunity(SPELL_FLESH_TO_STONE);
|
||||||
|
eReturn = EffectSpellImmunity(SPELL_STONEHOLD);
|
||||||
|
eReturn = EffectSpellImmunity(SPELL_EPIC_A_STONE);
|
||||||
|
eReturn = EffectSpellImmunity(POWER_CRYSTALLIZE);
|
||||||
|
eReturn = EffectSpellImmunity(MELD_BASILISK_MASK);
|
||||||
|
eReturn = EffectSpellImmunity(SPELLABILITY_GAZE_PETRIFY);
|
||||||
|
|
||||||
|
eReturn = TagEffect(eReturn, "PRCPetrificationImmune");
|
||||||
|
|
||||||
|
return eReturn;
|
||||||
|
}
|
||||||
|
|
||||||
int GetIsShaken(object oTarget)
|
int GetIsShaken(object oTarget)
|
||||||
{
|
{
|
||||||
effect eEffect = GetFirstEffect(oTarget);
|
effect eEffect = GetFirstEffect(oTarget);
|
||||||
@@ -748,3 +803,12 @@ int GetIsShaken(object oTarget)
|
|||||||
}
|
}
|
||||||
return FALSE;
|
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() {}
|
||||||
@@ -4,6 +4,11 @@
|
|||||||
//:: PRC Options Conversation
|
//:: PRC Options Conversation
|
||||||
const int FEAT_OPTIONS_CONVERSATION = 2285;
|
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
|
//:: Missing Bioware Feats
|
||||||
const int FEAT_EPIC_PLANAR_TURNING = 854;
|
const int FEAT_EPIC_PLANAR_TURNING = 854;
|
||||||
|
|
||||||
@@ -152,6 +157,9 @@ const int FEAT_EPIC_DIAMOND_DRAGON = 25115;
|
|||||||
const int FEAT_EPIC_CRUSADER = 25116;
|
const int FEAT_EPIC_CRUSADER = 25116;
|
||||||
const int FEAT_EPIC_SWORDSAGE = 25117;
|
const int FEAT_EPIC_SWORDSAGE = 25117;
|
||||||
const int FEAT_EPIC_WARBLADE = 25118;
|
const int FEAT_EPIC_WARBLADE = 25118;
|
||||||
|
const int FEAT_EPIC_LION_OF_TALISID = 25600;
|
||||||
|
const int FEAT_EPIC_VERDANT_LORD = 25618;
|
||||||
|
|
||||||
|
|
||||||
//:: Vile Martial Strike Expansion
|
//:: Vile Martial Strike Expansion
|
||||||
const int FEAT_VILE_MARTIAL_EAGLE_CLAW = 24800;
|
const int FEAT_VILE_MARTIAL_EAGLE_CLAW = 24800;
|
||||||
@@ -195,6 +203,31 @@ const int FEAT_CHARMING_THE_ARROW = 25998;
|
|||||||
//:: Skill Based Feats
|
//:: Skill Based Feats
|
||||||
const int FEAT_JUMP = 2884;
|
const int FEAT_JUMP = 2884;
|
||||||
|
|
||||||
|
//:: Lion of Talisid
|
||||||
|
const int FEAT_LOT_LIONS_COURAGE = 25614;
|
||||||
|
const int FEAT_LOT_LIONS_POUNCE = 25615;
|
||||||
|
const int FEAT_LOT_LIONS_SWIFTNESS = 25616;
|
||||||
|
const int FEAT_LOT_LEONALS_ROAR = 25617;
|
||||||
|
|
||||||
|
//::: Verdant Lord
|
||||||
|
const int FEAT_VL_EXPERT_INFUSION = 25634;
|
||||||
|
const int FEAT_VL_SUN_SUSTENANCE = 25635;
|
||||||
|
const int FEAT_VL_SPONTANEITY = 25636;
|
||||||
|
const int FEAT_VL_PLANT_FACILITY = 25637;
|
||||||
|
const int FEAT_VL_WILD_SHAPE_TREANT = 25638;
|
||||||
|
const int FEAT_VL_ANIMATE_TREE = 25639;
|
||||||
|
const int FEAT_VL_GAEAS_EMBRACE = 25640;
|
||||||
|
|
||||||
|
//:: Masters of the Wild feats
|
||||||
|
const int FEAT_CREATE_INFUSION = 25960;
|
||||||
|
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
|
//:: Racial Feats
|
||||||
const int FEAT_WEMIC_JUMP_8 = 4518;
|
const int FEAT_WEMIC_JUMP_8 = 4518;
|
||||||
const int FEAT_URDINNIR_STONESKIN = 4644;
|
const int FEAT_URDINNIR_STONESKIN = 4644;
|
||||||
@@ -782,6 +815,9 @@ const int FEAT_SUEL_IGNORE_SPELL_FAILURE = 2398;
|
|||||||
const int FEAT_SUEL_EXTENDED_SPELL = 2399;
|
const int FEAT_SUEL_EXTENDED_SPELL = 2399;
|
||||||
const int FEAT_SUEL_DISPELLING_STRIKE = 2400;
|
const int FEAT_SUEL_DISPELLING_STRIKE = 2400;
|
||||||
|
|
||||||
|
//:: Druid
|
||||||
|
const int FEAT_SPONT_SUMMON = 2372;
|
||||||
|
|
||||||
//Passive Feats
|
//Passive Feats
|
||||||
const int FEAT_ETERNAL_FREEDOM = 4298;
|
const int FEAT_ETERNAL_FREEDOM = 4298;
|
||||||
const int FEAT_INTUITIVE_ATTACK = 3166;
|
const int FEAT_INTUITIVE_ATTACK = 3166;
|
||||||
@@ -1286,6 +1322,7 @@ const int FEAT_SOMATIC_WEAPONRY = 5186;
|
|||||||
|
|
||||||
// Forgotten Realms Campaign Setting
|
// Forgotten Realms Campaign Setting
|
||||||
const int FEAT_INSCRIBE_RUNE = 2462;
|
const int FEAT_INSCRIBE_RUNE = 2462;
|
||||||
|
const int EPIC_FEAT_INSCRIBE_EPIC_RUNES = 2549;
|
||||||
|
|
||||||
// Miniature Handbook
|
// Miniature Handbook
|
||||||
const int FEAT_SHIELDMATE = 3258;
|
const int FEAT_SHIELDMATE = 3258;
|
||||||
@@ -1538,7 +1575,7 @@ const int FEAT_SELVETARMS_BLESSING = 2447;
|
|||||||
const int FEAT_RANGER_DUAL = 374;
|
const int FEAT_RANGER_DUAL = 374;
|
||||||
const int FEAT_CAMOUFLAGE = 4486;
|
const int FEAT_CAMOUFLAGE = 4486;
|
||||||
|
|
||||||
//Exalted Feat
|
//:: Exalted Feats
|
||||||
const int FEAT_SAC_VOW = 3388;
|
const int FEAT_SAC_VOW = 3388;
|
||||||
const int FEAT_VOW_OBED = 3389;
|
const int FEAT_VOW_OBED = 3389;
|
||||||
const int FEAT_EXALTED_TURNING = 3168;
|
const int FEAT_EXALTED_TURNING = 3168;
|
||||||
@@ -1549,7 +1586,8 @@ const int FEAT_STIGMATA = 3163;
|
|||||||
const int FEAT_SERVHEAVEN = 3355;
|
const int FEAT_SERVHEAVEN = 3355;
|
||||||
const int FEAT_RANGED_SMITE = 3356;
|
const int FEAT_RANGED_SMITE = 3356;
|
||||||
const int FEAT_VOW_PURITY = 5360;
|
const int FEAT_VOW_PURITY = 5360;
|
||||||
const int FEAT_VOWOFPOVERTY = 26001;
|
const int FEAT_VOWOFPOVERTY = 26002;
|
||||||
|
const int FEAT_FAV_COMPANIONS = 25994;
|
||||||
|
|
||||||
//Vile Feat
|
//Vile Feat
|
||||||
const int FEAT_LICHLOVED = 3395;
|
const int FEAT_LICHLOVED = 3395;
|
||||||
@@ -1868,12 +1906,12 @@ const int FEAT_SANCTIFY_MARTIAL_SICKLE = 3169;
|
|||||||
const int FEAT_SANCTIFY_MARTIAL_MINDBLADE = 3623;
|
const int FEAT_SANCTIFY_MARTIAL_MINDBLADE = 3623;
|
||||||
const int FEAT_SANCTIFY_MARTIAL_WHIP = 3596;
|
const int FEAT_SANCTIFY_MARTIAL_WHIP = 3596;
|
||||||
const int FEAT_SANCTIFY_MARTIAL_TRIDENT = 3597;
|
const int FEAT_SANCTIFY_MARTIAL_TRIDENT = 3597;
|
||||||
const int FEAT_SANCTIFYKISTRIKE = 26002;
|
const int FEAT_SANCTIFYKISTRIKE = 26003;
|
||||||
const int FEAT_HOLYKISTRIKE = 26003;
|
const int FEAT_HOLYKISTRIKE = 26004;
|
||||||
const int FEAT_FISTOFHEAVENS = 26004;
|
const int FEAT_FISTOFHEAVENS = 26005;
|
||||||
const int FEAT_VOWABSTINENCE = 26005;
|
const int FEAT_VOWABSTINENCE = 26006;
|
||||||
const int FEAT_VOWCHASTITY = 26006;
|
const int FEAT_VOWCHASTITY = 26007;
|
||||||
const int FEAT_GIFTOFFAITH = 26007;
|
const int FEAT_GIFTOFFAITH = 26008;
|
||||||
|
|
||||||
//heartwarder
|
//heartwarder
|
||||||
const int FEAT_CHARISMA_INC1 = 3230;
|
const int FEAT_CHARISMA_INC1 = 3230;
|
||||||
@@ -3189,6 +3227,8 @@ const int FEAT_ETHEREAL = 4167;
|
|||||||
const int FEAT_TEMPLATE_ARCHLICH_MARKER = 22700;
|
const int FEAT_TEMPLATE_ARCHLICH_MARKER = 22700;
|
||||||
const int FEAT_TEMPLATE_ARCHLICH_TURN_UNDEAD = 22701;
|
const int FEAT_TEMPLATE_ARCHLICH_TURN_UNDEAD = 22701;
|
||||||
|
|
||||||
|
const int FEAT_TEMPLATE_BAELNORN_MARKER = 22708;
|
||||||
|
|
||||||
const int FEAT_TEMPLATE_CELESTIAL_SMITE_EVIL = 22601;
|
const int FEAT_TEMPLATE_CELESTIAL_SMITE_EVIL = 22601;
|
||||||
const int FEAT_TEMPLATE_CELESTIAL_MARKER = 22602;
|
const int FEAT_TEMPLATE_CELESTIAL_MARKER = 22602;
|
||||||
const int FEAT_TEMPLATE_FIENDISH_SMITE_GOOD = 22603;
|
const int FEAT_TEMPLATE_FIENDISH_SMITE_GOOD = 22603;
|
||||||
@@ -3695,6 +3735,9 @@ const int FEAT_EPIC_ARTIFICER = 4072;
|
|||||||
//////////////// END INFUSIONS /////////////////
|
//////////////// END INFUSIONS /////////////////
|
||||||
//////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
//:: Monk
|
||||||
|
const int FEAT_MONK_ABUNDANT_STEP = 2351;
|
||||||
|
|
||||||
//Justice of Weald and Woe
|
//Justice of Weald and Woe
|
||||||
const int FEAT_LUCKY_SHOT = 24021;
|
const int FEAT_LUCKY_SHOT = 24021;
|
||||||
|
|
||||||
@@ -3933,6 +3976,8 @@ const int FEAT_OPPORTUNISTIC_PIETY_HEAL = 5358;
|
|||||||
const int FEAT_OPPORTUNISTIC_PIETY_TURN = 5359;
|
const int FEAT_OPPORTUNISTIC_PIETY_TURN = 5359;
|
||||||
|
|
||||||
// Combat Maneuver Feats
|
// Combat Maneuver Feats
|
||||||
|
const int FEAT_CM_CHARGE = 2823;
|
||||||
|
const int FEAT_CM_GRAPPLE = 3414;
|
||||||
const int FEAT_CURLING_WAVE_STRIKE = 2809;
|
const int FEAT_CURLING_WAVE_STRIKE = 2809;
|
||||||
const int FEAT_SIDESTEP_CHARGE = 3505;
|
const int FEAT_SIDESTEP_CHARGE = 3505;
|
||||||
const int FEAT_POWERFUL_CHARGE = 3506;
|
const int FEAT_POWERFUL_CHARGE = 3506;
|
||||||
@@ -6203,6 +6248,38 @@ const int FEAT_SHINING_BLADE_SPELLCASTING_VASSAL = 19587;
|
|||||||
const int FEAT_SWIFT_WING_SPELLCASTING_VASSAL = 19588;
|
const int FEAT_SWIFT_WING_SPELLCASTING_VASSAL = 19588;
|
||||||
const int FEAT_WARPRIEST_SPELLCASTING_VASSAL = 19589;
|
const int FEAT_WARPRIEST_SPELLCASTING_VASSAL = 19589;
|
||||||
|
|
||||||
|
//:: Lion of Talisid marker feats
|
||||||
|
const int FEAT_LION_OF_TALISID_SPELLCASTING_ARCHIVIST = 25601;
|
||||||
|
const int FEAT_LION_OF_TALISID_SPELLCASTING_CLERIC = 25602;
|
||||||
|
const int FEAT_LION_OF_TALISID_SPELLCASTING_DRUID = 25603;
|
||||||
|
const int FEAT_LION_OF_TALISID_SPELLCASTING_FAVOURED_SOUL = 25604;
|
||||||
|
const int FEAT_LION_OF_TALISID_SPELLCASTING_HEALER = 25605;
|
||||||
|
const int FEAT_LION_OF_TALISID_SPELLCASTING_JOWAW = 25606;
|
||||||
|
const int FEAT_LION_OF_TALISID_SPELLCASTING_KOTMC = 25607;
|
||||||
|
const int FEAT_LION_OF_TALISID_SPELLCASTING_NENTYAR_HUNTER = 25608;
|
||||||
|
const int FEAT_LION_OF_TALISID_SPELLCASTING_RANGER = 25609;
|
||||||
|
const int FEAT_LION_OF_TALISID_SPELLCASTING_OASHAMAN = 25610;
|
||||||
|
const int FEAT_LION_OF_TALISID_SPELLCASTING_SOHEI = 25611;
|
||||||
|
const int FEAT_LION_OF_TALISID_SPELLCASTING_SOL = 25612;
|
||||||
|
const int FEAT_LION_OF_TALISID_SPELLCASTING_SPSHAMAN = 25613;
|
||||||
|
|
||||||
|
//:: Verdant Lord marker feats
|
||||||
|
const int FEAT_VERDANT_LORD_SPELLCASTING_ARCHIVIST = 25619;
|
||||||
|
const int FEAT_VERDANT_LORD_SPELLCASTING_CLERIC = 25620;
|
||||||
|
const int FEAT_VERDANT_LORD_SPELLCASTING_DRUID = 25621;
|
||||||
|
const int FEAT_VERDANT_LORD_SPELLCASTING_FAVOURED_SOUL = 25622;
|
||||||
|
const int FEAT_VERDANT_LORD_SPELLCASTING_HEALER = 25623;
|
||||||
|
const int FEAT_VERDANT_LORD_SPELLCASTING_JOWAW = 25624;
|
||||||
|
const int FEAT_VERDANT_LORD_SPELLCASTING_KOTC = 25625;
|
||||||
|
const int FEAT_VERDANT_LORD_SPELLCASTING_KOTMC = 25626;
|
||||||
|
const int FEAT_VERDANT_LORD_SPELLCASTING_NENTYAR_HUNTER = 25627;
|
||||||
|
const int FEAT_VERDANT_LORD_SPELLCASTING_PALADIN = 25628;
|
||||||
|
const int FEAT_VERDANT_LORD_SPELLCASTING_RANGER = 25629;
|
||||||
|
const int FEAT_VERDANT_LORD_SPELLCASTING_OASHAMAN = 25630;
|
||||||
|
const int FEAT_VERDANT_LORD_SPELLCASTING_SOHEI = 25631;
|
||||||
|
const int FEAT_VERDANT_LORD_SPELLCASTING_SOL = 25632;
|
||||||
|
const int FEAT_VERDANT_LORD_SPELLCASTING_SPSHAMAN = 25633;
|
||||||
|
|
||||||
//:: No spellcasting or invoking marker feats
|
//:: No spellcasting or invoking marker feats
|
||||||
const int FEAT_ASMODEUS_SPELLCASTING_NONE = 19590;
|
const int FEAT_ASMODEUS_SPELLCASTING_NONE = 19590;
|
||||||
const int FEAT_TIAMAT_SPELLCASTING_NONE = 19591;
|
const int FEAT_TIAMAT_SPELLCASTING_NONE = 19591;
|
||||||
@@ -6210,6 +6287,7 @@ const int FEAT_DSONG_SPELLCASTING_NONE = 19592;
|
|||||||
const int FEAT_OLLAM_SPELLCASTING_NONE = 19593;
|
const int FEAT_OLLAM_SPELLCASTING_NONE = 19593;
|
||||||
|
|
||||||
//:: PRC8 Hidden Talent Feats
|
//:: PRC8 Hidden Talent Feats
|
||||||
|
const int FEAT_HIDDEN_TALENT = 25900;
|
||||||
const int FEAT_HIDDEN_TALENT_BIOFEEDBACK = 25901;
|
const int FEAT_HIDDEN_TALENT_BIOFEEDBACK = 25901;
|
||||||
const int FEAT_HIDDEN_TALENT_BITE_WOLF = 25902;
|
const int FEAT_HIDDEN_TALENT_BITE_WOLF = 25902;
|
||||||
const int FEAT_HIDDEN_TALENT_BOLT = 25903;
|
const int FEAT_HIDDEN_TALENT_BOLT = 25903;
|
||||||
|
|||||||
@@ -401,4 +401,3 @@ int GetBestAvailableSpell(object oTarget)
|
|||||||
if(nBestSpell == 99999) nBestSpell = GetBestL0Spell(oTarget, nBestSpell);
|
if(nBestSpell == 99999) nBestSpell = GetBestL0Spell(oTarget, nBestSpell);
|
||||||
return nBestSpell;
|
return nBestSpell;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -124,6 +124,8 @@ void ApplyBreath(struct breath BreathUsed, location lTargetArea, int bLinger = F
|
|||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "prc_alterations"
|
#include "prc_alterations"
|
||||||
|
#include "prcsp_archmaginc"
|
||||||
|
#include "prc_inc_spells"
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Internal functions */
|
/* Internal functions */
|
||||||
|
|||||||
@@ -575,8 +575,8 @@ int PRCGetCasterLevel(object oCaster = OBJECT_SELF)
|
|||||||
iReturnLevel = GetLevelByClass(CLASS_TYPE_SHAPECHANGER);
|
iReturnLevel = GetLevelByClass(CLASS_TYPE_SHAPECHANGER);
|
||||||
|
|
||||||
}
|
}
|
||||||
// Casting as a bard but don't have any levels in the class
|
// Casting as a bard but don't have any levels in the class //:: Double-dipping?
|
||||||
if(iCastingClass == CLASS_TYPE_BARD && !GetLevelByClass(CLASS_TYPE_BARD, oCaster))
|
/* if(iCastingClass == CLASS_TYPE_BARD && !GetLevelByClass(CLASS_TYPE_BARD, oCaster))
|
||||||
{
|
{
|
||||||
int nRace = GetRacialType(oCaster);
|
int nRace = GetRacialType(oCaster);
|
||||||
|
|
||||||
@@ -584,7 +584,7 @@ int PRCGetCasterLevel(object oCaster = OBJECT_SELF)
|
|||||||
//otherwise use RHD instead of bard levels
|
//otherwise use RHD instead of bard levels
|
||||||
if(nRace == RACIAL_TYPE_GLOURA)
|
if(nRace == RACIAL_TYPE_GLOURA)
|
||||||
iReturnLevel = GetLevelByClass(CLASS_TYPE_FEY);
|
iReturnLevel = GetLevelByClass(CLASS_TYPE_FEY);
|
||||||
}
|
} */
|
||||||
|
|
||||||
//Spell Rage ability
|
//Spell Rage ability
|
||||||
if(GetHasSpellEffect(SPELL_SPELL_RAGE, oCaster)
|
if(GetHasSpellEffect(SPELL_SPELL_RAGE, oCaster)
|
||||||
@@ -960,8 +960,10 @@ int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
}
|
}
|
||||||
//:: End Bard Arcane PrC casting calculations
|
//:: End Bard Arcane PrC casting calculations
|
||||||
|
|
||||||
if(nCastingClass == CLASS_TYPE_BARD && nRace == RACIAL_TYPE_GLOURA && !GetLevelByClass(CLASS_TYPE_BARD, oCaster))
|
if(nCastingClass == CLASS_TYPE_BARD || nCastingClass == CLASS_TYPE_BARD && nRace == RACIAL_TYPE_GLOURA && !GetLevelByClass(CLASS_TYPE_BARD, oCaster))
|
||||||
{
|
{
|
||||||
|
if(DEBUG) DoDebug("prc_inc_castlvl >> Found Fey RHD caster (not bard)");
|
||||||
|
|
||||||
if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_FEY, oCaster))
|
if(GetHasFeat(FEAT_ABCHAMP_SPELLCASTING_FEY, oCaster))
|
||||||
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster);
|
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster);
|
||||||
|
|
||||||
@@ -1065,7 +1067,10 @@ int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
|
nArcane += GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster);
|
||||||
|
|
||||||
if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_FEY, oCaster))
|
if(GetHasFeat(FEAT_VIRTUOSO_SPELLCASTING_FEY, oCaster))
|
||||||
|
{
|
||||||
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster);
|
nArcane += GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster);
|
||||||
|
if(DEBUG) DoDebug("prc_inc_castlvl >> Found Fey + Virtuoso PrC. Arcane caster level is "+IntToString(nArcane)+".");
|
||||||
|
}
|
||||||
|
|
||||||
if(GetHasFeat(FEAT_WWOC_SPELLCASTING_FEY, oCaster))
|
if(GetHasFeat(FEAT_WWOC_SPELLCASTING_FEY, oCaster))
|
||||||
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster);
|
nArcane += GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster);
|
||||||
@@ -1143,8 +1148,8 @@ int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_ASSASSIN, oCaster))
|
if(GetHasFeat(FEAT_DIABOLIST_SPELLCASTING_ASSASSIN, oCaster))
|
||||||
nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
|
nArcane += GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster);
|
||||||
|
|
||||||
if(GetHasFeat(FEAT_DHEART_SPELLCASTING_ASSASSIN, oCaster))
|
//if(GetHasFeat(FEAT_DHEART_SPELLCASTING_ASSASSIN, oCaster))
|
||||||
nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster);
|
//nArcane += GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster);
|
||||||
|
|
||||||
if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_ASSASSIN, oCaster))
|
if(GetHasFeat(FEAT_EKNIGHT_SPELLCASTING_ASSASSIN, oCaster))
|
||||||
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster);
|
nArcane += GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster);
|
||||||
@@ -3817,6 +3822,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_ARCHIVIST, oCaster))
|
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_ARCHIVIST, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_LION_OF_TALISID_SPELLCASTING_ARCHIVIST, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_LION_OF_TALISID, oCaster);
|
||||||
|
|
||||||
/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_ARCHIVIST, oCaster))
|
/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_ARCHIVIST, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */
|
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */
|
||||||
|
|
||||||
@@ -3853,6 +3861,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_ARCHIVIST, oCaster))
|
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_ARCHIVIST, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_VERDANT_LORD_SPELLCASTING_ARCHIVIST, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_VERDANT_LORD, oCaster);
|
||||||
|
|
||||||
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_ARCHIVIST, oCaster))
|
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_ARCHIVIST, oCaster))
|
||||||
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
|
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
|
||||||
|
|
||||||
@@ -4145,6 +4156,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_CLERIC, oCaster))
|
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_CLERIC, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_LION_OF_TALISID_SPELLCASTING_CLERIC, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_LION_OF_TALISID, oCaster);
|
||||||
|
|
||||||
if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_CLERIC, oCaster))
|
if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_CLERIC, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
|
||||||
|
|
||||||
@@ -4184,6 +4198,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_CLERIC, oCaster))
|
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_CLERIC, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_VERDANT_LORD_SPELLCASTING_CLERIC, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_VERDANT_LORD, oCaster);
|
||||||
|
|
||||||
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_CLERIC, oCaster))
|
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_CLERIC, oCaster))
|
||||||
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
|
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
|
||||||
|
|
||||||
@@ -4255,6 +4272,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_DRUID, oCaster))
|
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_DRUID, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_LION_OF_TALISID_SPELLCASTING_DRUID, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_LION_OF_TALISID, oCaster);
|
||||||
|
|
||||||
// if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_DRUID, oCaster))
|
// if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_DRUID, oCaster))
|
||||||
// nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
|
// nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
|
||||||
|
|
||||||
@@ -4295,9 +4315,12 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
|
||||||
|
|
||||||
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_DRUID, oCaster))
|
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_DRUID, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); */
|
||||||
|
|
||||||
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_DRUID, oCaster))
|
if(GetHasFeat(FEAT_VERDANT_LORD_SPELLCASTING_DRUID, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_VERDANT_LORD, oCaster);
|
||||||
|
|
||||||
|
/* if(GetHasFeat(FEAT_BFZ_SPELLCASTING_DRUID, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_BFZ, oCaster + 1) / 2 */
|
nDivine += GetLevelByClass(CLASS_TYPE_BFZ, oCaster + 1) / 2 */
|
||||||
|
|
||||||
// if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_DRUID, oCaster))
|
// if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_DRUID, oCaster))
|
||||||
@@ -4367,8 +4390,11 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_FAVOURED_SOUL, oCaster))
|
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_FAVOURED_SOUL, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
||||||
|
|
||||||
// if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_FAVOURED_SOUL, oCaster))
|
if(GetHasFeat(FEAT_LION_OF_TALISID_SPELLCASTING_FAVOURED_SOUL, oCaster))
|
||||||
// nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_LION_OF_TALISID, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_FAVOURED_SOUL, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
|
||||||
|
|
||||||
if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_FAVOURED_SOUL, oCaster))
|
if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_FAVOURED_SOUL, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster);
|
||||||
@@ -4406,6 +4432,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_FAVOURED_SOUL, oCaster))
|
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_FAVOURED_SOUL, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_VERDANT_LORD_SPELLCASTING_FAVOURED_SOUL, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_VERDANT_LORD, oCaster);
|
||||||
|
|
||||||
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_FAVOURED_SOUL, oCaster))
|
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_FAVOURED_SOUL, oCaster))
|
||||||
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
|
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
|
||||||
|
|
||||||
@@ -4474,6 +4503,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_HEALER, oCaster))
|
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_HEALER, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_LION_OF_TALISID_SPELLCASTING_HEALER, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_LION_OF_TALISID, oCaster);
|
||||||
|
|
||||||
/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_HEALER, oCaster))
|
/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_HEALER, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */
|
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */
|
||||||
|
|
||||||
@@ -4516,6 +4548,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
/* if(GetHasFeat(FEAT_BFZ_SPELLCASTING_HEALER, oCaster))
|
/* if(GetHasFeat(FEAT_BFZ_SPELLCASTING_HEALER, oCaster))
|
||||||
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2; */
|
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2; */
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_VERDANT_LORD_SPELLCASTING_HEALER, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_VERDANT_LORD, oCaster);
|
||||||
|
|
||||||
if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_HEALER, oCaster))
|
if(GetHasFeat(FEAT_BRIMSTONE_SPEAKER_SPELLCASTING_HEALER, oCaster))
|
||||||
nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2;
|
nDivine += (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2;
|
||||||
|
|
||||||
@@ -4581,6 +4616,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_JUSTICEWW, oCaster))
|
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_JUSTICEWW, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_LION_OF_TALISID_SPELLCASTING_JOWAW, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_LION_OF_TALISID, oCaster);
|
||||||
|
|
||||||
// if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_JUSTICEWW, oCaster))
|
// if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_JUSTICEWW, oCaster))
|
||||||
// nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
|
// nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
|
||||||
|
|
||||||
@@ -4620,6 +4658,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_JUSTICEWW, oCaster))
|
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_JUSTICEWW, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_VERDANT_LORD_SPELLCASTING_JOWAW, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_VERDANT_LORD, oCaster);
|
||||||
|
|
||||||
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_JUSTICEWW, oCaster))
|
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_JUSTICEWW, oCaster))
|
||||||
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
|
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
|
||||||
|
|
||||||
@@ -4720,6 +4761,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_KNIGHT_CHALICE, oCaster))
|
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_KNIGHT_CHALICE, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_VERDANT_LORD_SPELLCASTING_KOTC, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_VERDANT_LORD, oCaster);
|
||||||
|
|
||||||
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_KNIGHT_CHALICE, oCaster))
|
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_KNIGHT_CHALICE, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
||||||
|
|
||||||
@@ -4791,6 +4835,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
|
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_LION_OF_TALISID_SPELLCASTING_KOTMC, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_LION_OF_TALISID, oCaster);
|
||||||
|
|
||||||
/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
|
/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */
|
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */
|
||||||
|
|
||||||
@@ -4824,6 +4871,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
|
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_VERDANT_LORD_SPELLCASTING_KOTMC, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_VERDANT_LORD, oCaster);
|
||||||
|
|
||||||
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
|
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_KNIGHT_MIDDLECIRCLE, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
||||||
|
|
||||||
@@ -4898,6 +4948,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_NENTYAR_HUNTER, oCaster))
|
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_NENTYAR_HUNTER, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_LION_OF_TALISID_SPELLCASTING_NENTYAR_HUNTER, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_LION_OF_TALISID, oCaster);
|
||||||
|
|
||||||
/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_NENTYAR_HUNTER, oCaster))
|
/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_NENTYAR_HUNTER, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */
|
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */
|
||||||
|
|
||||||
@@ -4934,6 +4987,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_NENTYAR_HUNTER, oCaster))
|
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_NENTYAR_HUNTER, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_VERDANT_LORD_SPELLCASTING_NENTYAR_HUNTER, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_VERDANT_LORD, oCaster);
|
||||||
|
|
||||||
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_NENTYAR_HUNTER, oCaster))
|
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_NENTYAR_HUNTER, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); */
|
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster); */
|
||||||
|
|
||||||
@@ -5136,6 +5192,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_PALADIN, oCaster))
|
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_PALADIN, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_VERDANT_LORD_SPELLCASTING_PALADIN, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_VERDANT_LORD, oCaster);
|
||||||
|
|
||||||
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_PALADIN, oCaster))
|
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_PALADIN, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
||||||
|
|
||||||
@@ -5209,6 +5268,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_RANGER, oCaster))
|
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_RANGER, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_LION_OF_TALISID_SPELLCASTING_RANGER, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_LION_OF_TALISID, oCaster);
|
||||||
|
|
||||||
if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_RANGER, oCaster))
|
if(GetHasFeat(FEAT_MORNINGLORD_SPELLCASTING_RANGER, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster);
|
||||||
|
|
||||||
@@ -5242,6 +5304,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_RANGER, oCaster))
|
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_RANGER, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_VERDANT_LORD_SPELLCASTING_RANGER, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_VERDANT_LORD, oCaster);
|
||||||
|
|
||||||
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_RANGER, oCaster))
|
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_RANGER, oCaster))
|
||||||
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
|
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
|
||||||
|
|
||||||
@@ -5313,6 +5378,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_OASHAMAN, oCaster))
|
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_OASHAMAN, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_LION_OF_TALISID_SPELLCASTING_OASHAMAN, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_SHAMAN, oCaster);
|
||||||
|
|
||||||
if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_OASHAMAN, oCaster))
|
if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_OASHAMAN, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
|
||||||
|
|
||||||
@@ -5352,6 +5420,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_OASHAMAN, oCaster))
|
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_OASHAMAN, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_VERDANT_LORD_SPELLCASTING_OASHAMAN, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_VERDANT_LORD, oCaster);
|
||||||
|
|
||||||
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_OASHAMAN, oCaster))
|
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_OASHAMAN, oCaster))
|
||||||
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
|
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
|
||||||
|
|
||||||
@@ -5524,6 +5595,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_SOHEI, oCaster))
|
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_SOHEI, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_LION_OF_TALISID_SPELLCASTING_SOHEI, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_LION_OF_TALISID, oCaster);
|
||||||
|
|
||||||
// if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_SOHEI, oCaster))
|
// if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_SOHEI, oCaster))
|
||||||
// nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
|
// nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
|
||||||
|
|
||||||
@@ -5563,6 +5637,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_SOHEI, oCaster))
|
if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_SOHEI, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_VERDANT_LORD_SPELLCASTING_SOHEI, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_VERDANT_LORD, oCaster);
|
||||||
|
|
||||||
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_SOHEI, oCaster))
|
if(GetHasFeat(FEAT_BFZ_SPELLCASTING_SOHEI, oCaster))
|
||||||
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
|
nDivine += (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2;
|
||||||
|
|
||||||
@@ -5631,6 +5708,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_SOL, oCaster))
|
if(GetHasFeat(FEAT_HOSPITALER_SPELLCASTING_SOL, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_LION_OF_TALISID_SPELLCASTING_SOL, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_LION_OF_TALISID, oCaster);
|
||||||
|
|
||||||
/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_SOL, oCaster))
|
/* if(GetHasFeat(FEAT_MASTER_OF_SHROUDS_SPELLCASTING_SOL, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */
|
nDivine += GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster); */
|
||||||
|
|
||||||
@@ -5664,6 +5744,9 @@ int GetDivinePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
|||||||
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_SOL, oCaster))
|
if(GetHasFeat(FEAT_SWIFT_WING_SPELLCASTING_SOL, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster);
|
||||||
|
|
||||||
|
if(GetHasFeat(FEAT_VERDANT_LORD_SPELLCASTING_SOL, oCaster))
|
||||||
|
nDivine += GetLevelByClass(CLASS_TYPE_VERDANT_LORD, oCaster);
|
||||||
|
|
||||||
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_SOL, oCaster))
|
/* if(GetHasFeat(FEAT_TENEBROUS_APOSTATE_SPELLCASTING_SOL, oCaster))
|
||||||
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
nDivine += GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster);
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ Command summary:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "prc_inc_chat"
|
#include "prc_inc_chat"
|
||||||
|
#include "inc_persist_loca"
|
||||||
|
|
||||||
const string CMD_POWER_ATTACK = "pow-erattack";
|
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_BASTARDSWORD: return GetHasFeat(FEAT_VILE_MARTIAL_BASTARDSWORD);
|
||||||
case BASE_ITEM_BATTLEAXE: return GetHasFeat(FEAT_VILE_MARTIAL_BATTLEAXE);
|
case BASE_ITEM_BATTLEAXE: return GetHasFeat(FEAT_VILE_MARTIAL_BATTLEAXE);
|
||||||
case BASE_ITEM_CLUB: return GetHasFeat(FEAT_VILE_MARTIAL_CLUB);
|
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_DAGGER: return GetHasFeat(FEAT_VILE_MARTIAL_DAGGER);
|
||||||
case BASE_ITEM_DART: return GetHasFeat(FEAT_VILE_MARTIAL_DART);
|
case BASE_ITEM_DART: return GetHasFeat(FEAT_VILE_MARTIAL_DART);
|
||||||
case BASE_ITEM_DIREMACE: return GetHasFeat(FEAT_VILE_MARTIAL_DIREMACE);
|
case BASE_ITEM_DIREMACE: return GetHasFeat(FEAT_VILE_MARTIAL_DIREMACE);
|
||||||
@@ -402,6 +403,7 @@ int Vile_Feat(int iTypeWeap)
|
|||||||
case BASE_ITEM_LONGSWORD: return GetHasFeat(FEAT_VILE_MARTIAL_LONGSWORD);
|
case BASE_ITEM_LONGSWORD: return GetHasFeat(FEAT_VILE_MARTIAL_LONGSWORD);
|
||||||
case BASE_ITEM_MORNINGSTAR: return GetHasFeat(FEAT_VILE_MARTIAL_MORNINGSTAR);
|
case BASE_ITEM_MORNINGSTAR: return GetHasFeat(FEAT_VILE_MARTIAL_MORNINGSTAR);
|
||||||
case BASE_ITEM_QUARTERSTAFF: return GetHasFeat(FEAT_VILE_MARTIAL_QUARTERSTAFF);
|
case BASE_ITEM_QUARTERSTAFF: return GetHasFeat(FEAT_VILE_MARTIAL_QUARTERSTAFF);
|
||||||
|
case BASE_ITEM_MAGICSTAFF: return GetHasFeat(FEAT_VILE_MARTIAL_QUARTERSTAFF);
|
||||||
case BASE_ITEM_RAPIER: return GetHasFeat(FEAT_VILE_MARTIAL_RAPIER);
|
case BASE_ITEM_RAPIER: return GetHasFeat(FEAT_VILE_MARTIAL_RAPIER);
|
||||||
case BASE_ITEM_SCIMITAR: return GetHasFeat(FEAT_VILE_MARTIAL_SCIMITAR);
|
case BASE_ITEM_SCIMITAR: return GetHasFeat(FEAT_VILE_MARTIAL_SCIMITAR);
|
||||||
case BASE_ITEM_SCYTHE: return GetHasFeat(FEAT_VILE_MARTIAL_SCYTHE);
|
case BASE_ITEM_SCYTHE: return GetHasFeat(FEAT_VILE_MARTIAL_SCYTHE);
|
||||||
@@ -425,7 +427,7 @@ int Vile_Feat(int iTypeWeap)
|
|||||||
GetHasFeat(FEAT_VILE_MARTIAL_RAPIER) ||
|
GetHasFeat(FEAT_VILE_MARTIAL_RAPIER) ||
|
||||||
GetHasFeat(FEAT_VILE_MARTIAL_ELVEN_THINBLADE));
|
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));
|
GetHasFeat(FEAT_VILE_MARTIAL_ELVEN_COURTBLADE));
|
||||||
|
|
||||||
case BASE_ITEM_DOUBLE_SCIMITAR: return GetHasFeat(FEAT_VILE_MARTIAL_DBL_SCIMITAR);
|
case BASE_ITEM_DOUBLE_SCIMITAR: return GetHasFeat(FEAT_VILE_MARTIAL_DBL_SCIMITAR);
|
||||||
@@ -460,6 +462,7 @@ int GetSanctifedMartialFeat(int iTypeWeap)
|
|||||||
case BASE_ITEM_BASTARDSWORD: return FEAT_SANCTIFY_MARTIAL_BASTARDSWORD;
|
case BASE_ITEM_BASTARDSWORD: return FEAT_SANCTIFY_MARTIAL_BASTARDSWORD;
|
||||||
case BASE_ITEM_BATTLEAXE: return FEAT_SANCTIFY_MARTIAL_BATTLEAXE;
|
case BASE_ITEM_BATTLEAXE: return FEAT_SANCTIFY_MARTIAL_BATTLEAXE;
|
||||||
case BASE_ITEM_CLUB: return FEAT_SANCTIFY_MARTIAL_CLUB;
|
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_DAGGER: return FEAT_SANCTIFY_MARTIAL_DAGGER;
|
||||||
case BASE_ITEM_DART: return FEAT_SANCTIFY_MARTIAL_DART;
|
case BASE_ITEM_DART: return FEAT_SANCTIFY_MARTIAL_DART;
|
||||||
case BASE_ITEM_DIREMACE: return FEAT_SANCTIFY_MARTIAL_DIREMACE;
|
case BASE_ITEM_DIREMACE: return FEAT_SANCTIFY_MARTIAL_DIREMACE;
|
||||||
@@ -482,6 +485,7 @@ int GetSanctifedMartialFeat(int iTypeWeap)
|
|||||||
case BASE_ITEM_LONGSWORD: return FEAT_SANCTIFY_MARTIAL_LONGSWORD;
|
case BASE_ITEM_LONGSWORD: return FEAT_SANCTIFY_MARTIAL_LONGSWORD;
|
||||||
case BASE_ITEM_MORNINGSTAR: return FEAT_SANCTIFY_MARTIAL_MORNINGSTAR;
|
case BASE_ITEM_MORNINGSTAR: return FEAT_SANCTIFY_MARTIAL_MORNINGSTAR;
|
||||||
case BASE_ITEM_QUARTERSTAFF: return FEAT_SANCTIFY_MARTIAL_QUARTERSTAFF;
|
case BASE_ITEM_QUARTERSTAFF: return FEAT_SANCTIFY_MARTIAL_QUARTERSTAFF;
|
||||||
|
case BASE_ITEM_MAGICSTAFF: return FEAT_SANCTIFY_MARTIAL_QUARTERSTAFF;
|
||||||
case BASE_ITEM_RAPIER: return FEAT_SANCTIFY_MARTIAL_RAPIER;
|
case BASE_ITEM_RAPIER: return FEAT_SANCTIFY_MARTIAL_RAPIER;
|
||||||
case BASE_ITEM_SCIMITAR: return FEAT_SANCTIFY_MARTIAL_SCIMITAR;
|
case BASE_ITEM_SCIMITAR: return FEAT_SANCTIFY_MARTIAL_SCIMITAR;
|
||||||
case BASE_ITEM_SCYTHE: return FEAT_SANCTIFY_MARTIAL_SCYTHE;
|
case BASE_ITEM_SCYTHE: return FEAT_SANCTIFY_MARTIAL_SCYTHE;
|
||||||
@@ -533,6 +537,7 @@ int Sanctify_Feat(int iTypeWeap)
|
|||||||
case BASE_ITEM_BASTARDSWORD: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_BASTARDSWORD);
|
case BASE_ITEM_BASTARDSWORD: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_BASTARDSWORD);
|
||||||
case BASE_ITEM_BATTLEAXE: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_BATTLEAXE);
|
case BASE_ITEM_BATTLEAXE: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_BATTLEAXE);
|
||||||
case BASE_ITEM_CLUB: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_CLUB);
|
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_DAGGER: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_DAGGER);
|
||||||
case BASE_ITEM_DART: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_DART);
|
case BASE_ITEM_DART: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_DART);
|
||||||
case BASE_ITEM_DIREMACE: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_DIREMACE);
|
case BASE_ITEM_DIREMACE: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_DIREMACE);
|
||||||
@@ -555,6 +560,7 @@ int Sanctify_Feat(int iTypeWeap)
|
|||||||
case BASE_ITEM_LONGSWORD: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_LONGSWORD);
|
case BASE_ITEM_LONGSWORD: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_LONGSWORD);
|
||||||
case BASE_ITEM_MORNINGSTAR: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_MORNINGSTAR);
|
case BASE_ITEM_MORNINGSTAR: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_MORNINGSTAR);
|
||||||
case BASE_ITEM_QUARTERSTAFF: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_QUARTERSTAFF);
|
case BASE_ITEM_QUARTERSTAFF: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_QUARTERSTAFF);
|
||||||
|
case BASE_ITEM_MAGICSTAFF: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_QUARTERSTAFF);
|
||||||
case BASE_ITEM_RAPIER: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_RAPIER);
|
case BASE_ITEM_RAPIER: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_RAPIER);
|
||||||
case BASE_ITEM_SCIMITAR: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_SCIMITAR);
|
case BASE_ITEM_SCIMITAR: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_SCIMITAR);
|
||||||
case BASE_ITEM_SCYTHE: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_SCYTHE);
|
case BASE_ITEM_SCYTHE: return GetHasFeat(FEAT_SANCTIFY_MARTIAL_SCYTHE);
|
||||||
|
|||||||
@@ -1082,6 +1082,7 @@ int GetIsTwoHandedMeleeWeaponType(int iWeaponType)
|
|||||||
case BASE_ITEM_HEAVYFLAIL: return TRUE;
|
case BASE_ITEM_HEAVYFLAIL: return TRUE;
|
||||||
case BASE_ITEM_SCYTHE: return TRUE;
|
case BASE_ITEM_SCYTHE: return TRUE;
|
||||||
case BASE_ITEM_QUARTERSTAFF: return TRUE;
|
case BASE_ITEM_QUARTERSTAFF: return TRUE;
|
||||||
|
//case BASE_ITEM_MAGICSTAFF: return TRUE;
|
||||||
case BASE_ITEM_ELVEN_COURTBLADE: return TRUE;
|
case BASE_ITEM_ELVEN_COURTBLADE: return TRUE;
|
||||||
case BASE_ITEM_MAUL: return TRUE;
|
case BASE_ITEM_MAUL: return TRUE;
|
||||||
case BASE_ITEM_FALCHION: return TRUE;
|
case BASE_ITEM_FALCHION: return TRUE;
|
||||||
@@ -1130,6 +1131,7 @@ int GetIsSimpleWeaponType(int iWeaponType)
|
|||||||
{
|
{
|
||||||
case BASE_ITEM_MORNINGSTAR: return 1;
|
case BASE_ITEM_MORNINGSTAR: return 1;
|
||||||
case BASE_ITEM_QUARTERSTAFF: return 1;
|
case BASE_ITEM_QUARTERSTAFF: return 1;
|
||||||
|
case BASE_ITEM_MAGICSTAFF: return 1;
|
||||||
case BASE_ITEM_SHORTSPEAR: return 1;
|
case BASE_ITEM_SHORTSPEAR: return 1;
|
||||||
case BASE_ITEM_HEAVYCROSSBOW: return 1;
|
case BASE_ITEM_HEAVYCROSSBOW: return 1;
|
||||||
case BASE_ITEM_INVALID: return 1;
|
case BASE_ITEM_INVALID: return 1;
|
||||||
@@ -1139,8 +1141,8 @@ int GetIsSimpleWeaponType(int iWeaponType)
|
|||||||
case BASE_ITEM_CSLSHPRCWEAP: return 1;
|
case BASE_ITEM_CSLSHPRCWEAP: return 1;
|
||||||
case BASE_ITEM_GLOVES: return 1;
|
case BASE_ITEM_GLOVES: return 1;
|
||||||
case BASE_ITEM_BRACER: return 1;
|
case BASE_ITEM_BRACER: return 1;
|
||||||
|
case BASE_ITEM_CRAFTED_SCEPTER: return 1;
|
||||||
|
|
||||||
case BASE_ITEM_CLUB: return 2;
|
|
||||||
case BASE_ITEM_DAGGER: return 2;
|
case BASE_ITEM_DAGGER: return 2;
|
||||||
case BASE_ITEM_LIGHTMACE: return 2;
|
case BASE_ITEM_LIGHTMACE: return 2;
|
||||||
case BASE_ITEM_SICKLE: return 2;
|
case BASE_ITEM_SICKLE: return 2;
|
||||||
@@ -1204,6 +1206,7 @@ int GetIsDoubleSidedWeaponType(int iWeaponType)
|
|||||||
return ( iWeaponType == BASE_ITEM_DIREMACE
|
return ( iWeaponType == BASE_ITEM_DIREMACE
|
||||||
|| iWeaponType == BASE_ITEM_DOUBLEAXE
|
|| iWeaponType == BASE_ITEM_DOUBLEAXE
|
||||||
|| iWeaponType == BASE_ITEM_TWOBLADEDSWORD
|
|| iWeaponType == BASE_ITEM_TWOBLADEDSWORD
|
||||||
|
|| iWeaponType == BASE_ITEM_DOUBLE_SCIMITAR
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1276,6 +1279,19 @@ struct WeaponFeat GetAllFeatsOfWeaponType(int iWeaponType)
|
|||||||
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_CLUB;
|
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_CLUB;
|
||||||
break;
|
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: {
|
case BASE_ITEM_DAGGER: {
|
||||||
sFeat.Focus = FEAT_WEAPON_FOCUS_DAGGER;
|
sFeat.Focus = FEAT_WEAPON_FOCUS_DAGGER;
|
||||||
sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_DAGGER;
|
sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_DAGGER;
|
||||||
@@ -1562,6 +1578,19 @@ struct WeaponFeat GetAllFeatsOfWeaponType(int iWeaponType)
|
|||||||
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_QUARTERSTAFF;
|
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_QUARTERSTAFF;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case BASE_ITEM_MAGICSTAFF: {
|
||||||
|
sFeat.Focus = FEAT_WEAPON_FOCUS_STAFF;
|
||||||
|
sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_STAFF;
|
||||||
|
sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_QUARTERSTAFF;
|
||||||
|
sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_QUARTERSTAFF;
|
||||||
|
sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_STAFF;
|
||||||
|
sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_QUARTERSTAFF;
|
||||||
|
sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_QUARTERSTAFF;
|
||||||
|
sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_QUARTERSTAFF;
|
||||||
|
sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_QUARTERSTAFF;
|
||||||
|
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_QUARTERSTAFF;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case BASE_ITEM_RAPIER: {
|
case BASE_ITEM_RAPIER: {
|
||||||
sFeat.Focus = FEAT_WEAPON_FOCUS_RAPIER;
|
sFeat.Focus = FEAT_WEAPON_FOCUS_RAPIER;
|
||||||
sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_RAPIER;
|
sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_RAPIER;
|
||||||
@@ -8074,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("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));
|
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)
|
// 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)
|
if (!bIsCleaveAttack)
|
||||||
|
|||||||
@@ -273,6 +273,7 @@ void TigerBlooded(object oInitiator, object oTarget);
|
|||||||
|
|
||||||
#include "prc_inc_combat"
|
#include "prc_inc_combat"
|
||||||
#include "prc_inc_sp_tch"
|
#include "prc_inc_sp_tch"
|
||||||
|
#include "prc_feat_const"
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Internal functions */
|
/* Internal functions */
|
||||||
@@ -1139,6 +1140,9 @@ void DoCharge(object oPC, object oTarget, int nDoAttack = TRUE, int nGenerateAoO
|
|||||||
if(GetRacialType(oPC) == RACIAL_TYPE_MARRUSAULT)
|
if(GetRacialType(oPC) == RACIAL_TYPE_MARRUSAULT)
|
||||||
nPounce = TRUE;
|
nPounce = TRUE;
|
||||||
if (GetHasSpellEffect(VESTIGE_CHUPOCLOPS, oPC) && GetLocalInt(oPC, "ExploitVestige") != VESTIGE_CHUPOCLOPS_POUNCE)
|
if (GetHasSpellEffect(VESTIGE_CHUPOCLOPS, oPC) && GetLocalInt(oPC, "ExploitVestige") != VESTIGE_CHUPOCLOPS_POUNCE)
|
||||||
|
nPounce = TRUE;
|
||||||
|
//:: Lion of Talisid
|
||||||
|
if(GetHasFeat(FEAT_LOT_LIONS_POUNCE, oPC))
|
||||||
nPounce = TRUE;
|
nPounce = TRUE;
|
||||||
|
|
||||||
// Checks for a White Raven Stance
|
// Checks for a White Raven Stance
|
||||||
@@ -1319,6 +1323,28 @@ int DoTrip(object oPC, object oTarget, int nExtraBonus, int nGenerateAoO = TRUE,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
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);
|
nTargetStat = GetAbilityModifier(ABILITY_STRENGTH, oTarget) + GetCombatMoveCheckBonus(oTarget, COMBAT_MOVE_TRIP, FALSE, TRUE);
|
||||||
FloatingTextStringOnCreature("You have failed on your Trip attempt",oPC, FALSE);
|
FloatingTextStringOnCreature("You have failed on your Trip attempt",oPC, FALSE);
|
||||||
@@ -1335,7 +1361,7 @@ int DoTrip(object oPC, object oTarget, int nExtraBonus, int nGenerateAoO = TRUE,
|
|||||||
}
|
}
|
||||||
SetLocalInt(oPC, "TripDifference", nTargetCheck - nPCCheck);
|
SetLocalInt(oPC, "TripDifference", nTargetCheck - nPCCheck);
|
||||||
DelayCommand(2.0, DeleteLocalInt(oPC, "TripDifference"));
|
DelayCommand(2.0, DeleteLocalInt(oPC, "TripDifference"));
|
||||||
}
|
} */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
FloatingTextStringOnCreature("You have failed on your Trip attempt",oPC, FALSE);
|
FloatingTextStringOnCreature("You have failed on your Trip attempt",oPC, FALSE);
|
||||||
@@ -1939,9 +1965,20 @@ int DoDisarm(object oPC, object oTarget, int nExtraBonus = 0, int nGenerateAoO =
|
|||||||
{
|
{
|
||||||
object oTargetWep = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
|
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"))
|
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));
|
AssignCommand(oPC, ActionAttack(oTarget));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@@ -2313,6 +2350,9 @@ void DoShieldCharge(object oPC, object oTarget, int nSlam = FALSE)
|
|||||||
nPounce = TRUE;
|
nPounce = TRUE;
|
||||||
if(GetRacialType(oPC) == RACIAL_TYPE_MARRUSAULT)
|
if(GetRacialType(oPC) == RACIAL_TYPE_MARRUSAULT)
|
||||||
nPounce = TRUE;
|
nPounce = TRUE;
|
||||||
|
//:: Lion of Talisid
|
||||||
|
if(GetHasFeat(FEAT_LOT_LIONS_POUNCE, oPC))
|
||||||
|
nPounce = TRUE;
|
||||||
|
|
||||||
// Checks for a White Raven Stance
|
// Checks for a White Raven Stance
|
||||||
// If it exists, +1 damage/initiator level
|
// If it exists, +1 damage/initiator level
|
||||||
|
|||||||
@@ -133,6 +133,7 @@ const int METAMAGIC_QUICKEN_LEVEL = 4;
|
|||||||
#include "prc_inc_damage"
|
#include "prc_inc_damage"
|
||||||
#include "prc_inc_sb_const" // Spell Book Constants
|
#include "prc_inc_sb_const" // Spell Book Constants
|
||||||
#include "x0_i0_position"
|
#include "x0_i0_position"
|
||||||
|
#include "inc_newspellbook"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
access to prc_inc_nwscript via prc_inc_damage
|
access to prc_inc_nwscript via prc_inc_damage
|
||||||
@@ -410,6 +411,8 @@ int PRCGetSpellLevelForClass(int nSpell, int nClass)
|
|||||||
sSpellLevel = Get2DACache("spells", "Cleric", nSpell);
|
sSpellLevel = Get2DACache("spells", "Cleric", nSpell);
|
||||||
else if (nClass == CLASS_TYPE_BARD)
|
else if (nClass == CLASS_TYPE_BARD)
|
||||||
sSpellLevel = Get2DACache("spells", "Bard", nSpell);
|
sSpellLevel = Get2DACache("spells", "Bard", nSpell);
|
||||||
|
else if (nClass == CLASS_TYPE_ASSASSIN)
|
||||||
|
sSpellLevel = Get2DACache("spells", "Assassin", nSpell);
|
||||||
else if (nClass == CLASS_TYPE_CULTIST_SHATTERED_PEAK)
|
else if (nClass == CLASS_TYPE_CULTIST_SHATTERED_PEAK)
|
||||||
sSpellLevel = Get2DACache("spells", "Cultist", nSpell);
|
sSpellLevel = Get2DACache("spells", "Cultist", nSpell);
|
||||||
else if (nClass == CLASS_TYPE_NENTYAR_HUNTER)
|
else if (nClass == CLASS_TYPE_NENTYAR_HUNTER)
|
||||||
@@ -462,7 +465,7 @@ int PRCGetSpellLevelForClass(int nSpell, int nClass)
|
|||||||
return nSpellLevel;
|
return nSpellLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns the spelllevel of nSpell as it can be cast by oCreature
|
// returns the spell circle level of nSpell as it can be cast by oCreature
|
||||||
int PRCGetSpellLevel(object oCreature, int nSpell)
|
int PRCGetSpellLevel(object oCreature, int nSpell)
|
||||||
{
|
{
|
||||||
/*if (!PRCGetHasSpell(nSpell, oCreature))
|
/*if (!PRCGetHasSpell(nSpell, oCreature))
|
||||||
@@ -605,7 +608,7 @@ int PRCGetHasSpell(int nRealSpellID, object oCreature = OBJECT_SELF)
|
|||||||
if(nSpellbookType == SPELLBOOK_TYPE_PREPARED)
|
if(nSpellbookType == SPELLBOOK_TYPE_PREPARED)
|
||||||
{
|
{
|
||||||
nCount = persistant_array_get_int(oCreature, "NewSpellbookMem_" + IntToString(nClass), j);
|
nCount = persistant_array_get_int(oCreature, "NewSpellbookMem_" + IntToString(nClass), j);
|
||||||
if(DEBUG) DoDebug("PRCGetHasSpell: NewSpellbookMem_" + IntToString(nClass) + "[" + IntToString(j) + "] = " + IntToString(nCount));
|
if(DEBUG) DoDebug("prc_inc_core >> PRCGetHasSpell: NewSpellbookMem_" + IntToString(nClass) + "[" + IntToString(j) + "] = " + IntToString(nCount));
|
||||||
if(nCount > 0)
|
if(nCount > 0)
|
||||||
{
|
{
|
||||||
nUses += nCount;
|
nUses += nCount;
|
||||||
@@ -615,7 +618,7 @@ int PRCGetHasSpell(int nRealSpellID, object oCreature = OBJECT_SELF)
|
|||||||
{
|
{
|
||||||
nSpellLevel = StringToInt(Get2DACache(sFile, "Level", j));
|
nSpellLevel = StringToInt(Get2DACache(sFile, "Level", j));
|
||||||
nCount = persistant_array_get_int(oCreature, "NewSpellbookMem_" + IntToString(nClass), nSpellLevel);
|
nCount = persistant_array_get_int(oCreature, "NewSpellbookMem_" + IntToString(nClass), nSpellLevel);
|
||||||
if(DEBUG) DoDebug("PRCGetHasSpell: NewSpellbookMem_" + IntToString(nClass) + "[" + IntToString(j) + "] = " + IntToString(nCount));
|
if(DEBUG) DoDebug("prc_inc_core >> PRCGetHasSpell: NewSpellbookMem_" + IntToString(nClass) + "[" + IntToString(j) + "] = " + IntToString(nCount));
|
||||||
if(nCount > 0)
|
if(nCount > 0)
|
||||||
{
|
{
|
||||||
nUses += nCount;
|
nUses += nCount;
|
||||||
|
|||||||
@@ -169,8 +169,8 @@ int GetSubschoolFlags(int nSpellID);
|
|||||||
/* Includes */
|
/* Includes */
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "inc_2dacache" // already has access via inc_utility
|
#include "inc_2dacache"
|
||||||
//#include "inc_utility"
|
#include "inc_utility"
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Function definitions */
|
/* Function definitions */
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ const int BRILLIANCE_SLOT_3 = 3919;
|
|||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Function definitions */
|
/* Function definitions */
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
void TriggerInspiration(object oPC, int nCombat);
|
||||||
|
|
||||||
|
|
||||||
void PrepareArcDilSpell(object oPC, int nSpell)
|
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++)
|
for(i = FEAT_FONT_INSPIRATION_1; i <= FEAT_FONT_INSPIRATION_10; i++)
|
||||||
if(GetHasFeat(i, oPC)) nFont++;
|
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);
|
SetLocalInt(oPC, "InspirationPool", nInspiration);
|
||||||
FloatingTextStringOnCreature("Encounter begins with "+IntToString(nInspiration)+" inspiration", oPC, FALSE);
|
FloatingTextStringOnCreature("Encounter begins with "+IntToString(nInspiration)+" inspiration", oPC, FALSE);
|
||||||
}
|
}
|
||||||
@@ -201,6 +204,8 @@ void ClearInspiration(object oPC)
|
|||||||
|
|
||||||
int ExpendInspiration(object oPC, int nCost)
|
int ExpendInspiration(object oPC, int nCost)
|
||||||
{
|
{
|
||||||
|
if (nCost <= 0) return FALSE;
|
||||||
|
|
||||||
int nInspiration = GetLocalInt(oPC, "InspirationPool");
|
int nInspiration = GetLocalInt(oPC, "InspirationPool");
|
||||||
if (nInspiration >= nCost)
|
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);
|
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)
|
/*void AddCunningBrillianceAbility(object oPC, int nAbil)
|
||||||
{
|
{
|
||||||
if (DEBUG) DoDebug("AddCunningBrillianceAbility "+IntToString(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_OVERWHELMING_CRITICAL = 6;
|
||||||
const int FEAT_TYPE_DEVASTATING_CRITICAL = 7;
|
const int FEAT_TYPE_DEVASTATING_CRITICAL = 7;
|
||||||
const int FEAT_TYPE_WEAPON_OF_CHOICE = 8;
|
const int FEAT_TYPE_WEAPON_OF_CHOICE = 8;
|
||||||
|
const int FEAT_TYPE_WEAPON_PROFICIENCY = 9;
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Function prototypes */
|
/* Function prototypes */
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
|
int GetProficiencyFeatOfWeaponType(int iWeaponType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the appropriate weapon feat given a weapon type.
|
* 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_OVERWHELMING_CRITICAL: return GetOverwhelmingCriticalFeatOfWeaponType(iWeaponType);
|
||||||
case FEAT_TYPE_DEVASTATING_CRITICAL: return GetDevastatingCriticalFeatOfWeaponType(iWeaponType);
|
case FEAT_TYPE_DEVASTATING_CRITICAL: return GetDevastatingCriticalFeatOfWeaponType(iWeaponType);
|
||||||
case FEAT_TYPE_WEAPON_OF_CHOICE: return GetWeaponOfChoiceFeatOfWeaponType(iWeaponType);
|
case FEAT_TYPE_WEAPON_OF_CHOICE: return GetWeaponOfChoiceFeatOfWeaponType(iWeaponType);
|
||||||
|
case FEAT_TYPE_WEAPON_PROFICIENCY: return GetProficiencyFeatOfWeaponType(iWeaponType);
|
||||||
}
|
}
|
||||||
return -1;
|
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)
|
int GetFocusFeatOfWeaponType(int iWeaponType)
|
||||||
{
|
{
|
||||||
switch(iWeaponType)
|
switch(iWeaponType)
|
||||||
@@ -226,6 +305,7 @@ int GetFocusFeatOfWeaponType(int iWeaponType)
|
|||||||
case BASE_ITEM_BASTARDSWORD: return FEAT_WEAPON_FOCUS_BASTARD_SWORD;
|
case BASE_ITEM_BASTARDSWORD: return FEAT_WEAPON_FOCUS_BASTARD_SWORD;
|
||||||
case BASE_ITEM_BATTLEAXE: return FEAT_WEAPON_FOCUS_BATTLE_AXE;
|
case BASE_ITEM_BATTLEAXE: return FEAT_WEAPON_FOCUS_BATTLE_AXE;
|
||||||
case BASE_ITEM_CLUB: return FEAT_WEAPON_FOCUS_CLUB;
|
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_DAGGER: return FEAT_WEAPON_FOCUS_DAGGER;
|
||||||
case BASE_ITEM_DART: return FEAT_WEAPON_FOCUS_DART;
|
case BASE_ITEM_DART: return FEAT_WEAPON_FOCUS_DART;
|
||||||
case BASE_ITEM_DIREMACE: return FEAT_WEAPON_FOCUS_DIRE_MACE;
|
case BASE_ITEM_DIREMACE: return FEAT_WEAPON_FOCUS_DIRE_MACE;
|
||||||
@@ -248,6 +328,7 @@ int GetFocusFeatOfWeaponType(int iWeaponType)
|
|||||||
case BASE_ITEM_LONGSWORD: return FEAT_WEAPON_FOCUS_LONG_SWORD;
|
case BASE_ITEM_LONGSWORD: return FEAT_WEAPON_FOCUS_LONG_SWORD;
|
||||||
case BASE_ITEM_MORNINGSTAR: return FEAT_WEAPON_FOCUS_MORNING_STAR;
|
case BASE_ITEM_MORNINGSTAR: return FEAT_WEAPON_FOCUS_MORNING_STAR;
|
||||||
case BASE_ITEM_QUARTERSTAFF: return FEAT_WEAPON_FOCUS_STAFF;
|
case BASE_ITEM_QUARTERSTAFF: return FEAT_WEAPON_FOCUS_STAFF;
|
||||||
|
case BASE_ITEM_MAGICSTAFF: return FEAT_WEAPON_FOCUS_STAFF;
|
||||||
case BASE_ITEM_RAPIER: return FEAT_WEAPON_FOCUS_RAPIER;
|
case BASE_ITEM_RAPIER: return FEAT_WEAPON_FOCUS_RAPIER;
|
||||||
case BASE_ITEM_SCIMITAR: return FEAT_WEAPON_FOCUS_SCIMITAR;
|
case BASE_ITEM_SCIMITAR: return FEAT_WEAPON_FOCUS_SCIMITAR;
|
||||||
case BASE_ITEM_SCYTHE: return FEAT_WEAPON_FOCUS_SCYTHE;
|
case BASE_ITEM_SCYTHE: return FEAT_WEAPON_FOCUS_SCYTHE;
|
||||||
@@ -296,6 +377,7 @@ int GetSpecializationFeatOfWeaponType(int iWeaponType)
|
|||||||
case BASE_ITEM_BASTARDSWORD: return FEAT_WEAPON_SPECIALIZATION_BASTARD_SWORD;
|
case BASE_ITEM_BASTARDSWORD: return FEAT_WEAPON_SPECIALIZATION_BASTARD_SWORD;
|
||||||
case BASE_ITEM_BATTLEAXE: return FEAT_WEAPON_SPECIALIZATION_BATTLE_AXE;
|
case BASE_ITEM_BATTLEAXE: return FEAT_WEAPON_SPECIALIZATION_BATTLE_AXE;
|
||||||
case BASE_ITEM_CLUB: return FEAT_WEAPON_SPECIALIZATION_CLUB;
|
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_DAGGER: return FEAT_WEAPON_SPECIALIZATION_DAGGER;
|
||||||
case BASE_ITEM_DART: return FEAT_WEAPON_SPECIALIZATION_DART;
|
case BASE_ITEM_DART: return FEAT_WEAPON_SPECIALIZATION_DART;
|
||||||
case BASE_ITEM_DIREMACE: return FEAT_WEAPON_SPECIALIZATION_DIRE_MACE;
|
case BASE_ITEM_DIREMACE: return FEAT_WEAPON_SPECIALIZATION_DIRE_MACE;
|
||||||
@@ -318,6 +400,7 @@ int GetSpecializationFeatOfWeaponType(int iWeaponType)
|
|||||||
case BASE_ITEM_LONGSWORD: return FEAT_WEAPON_SPECIALIZATION_LONG_SWORD;
|
case BASE_ITEM_LONGSWORD: return FEAT_WEAPON_SPECIALIZATION_LONG_SWORD;
|
||||||
case BASE_ITEM_MORNINGSTAR: return FEAT_WEAPON_SPECIALIZATION_MORNING_STAR;
|
case BASE_ITEM_MORNINGSTAR: return FEAT_WEAPON_SPECIALIZATION_MORNING_STAR;
|
||||||
case BASE_ITEM_QUARTERSTAFF: return FEAT_WEAPON_SPECIALIZATION_STAFF;
|
case BASE_ITEM_QUARTERSTAFF: return FEAT_WEAPON_SPECIALIZATION_STAFF;
|
||||||
|
case BASE_ITEM_MAGICSTAFF: return FEAT_WEAPON_SPECIALIZATION_STAFF;
|
||||||
case BASE_ITEM_RAPIER: return FEAT_WEAPON_SPECIALIZATION_RAPIER;
|
case BASE_ITEM_RAPIER: return FEAT_WEAPON_SPECIALIZATION_RAPIER;
|
||||||
case BASE_ITEM_SCIMITAR: return FEAT_WEAPON_SPECIALIZATION_SCIMITAR;
|
case BASE_ITEM_SCIMITAR: return FEAT_WEAPON_SPECIALIZATION_SCIMITAR;
|
||||||
case BASE_ITEM_SCYTHE: return FEAT_WEAPON_SPECIALIZATION_SCYTHE;
|
case BASE_ITEM_SCYTHE: return FEAT_WEAPON_SPECIALIZATION_SCYTHE;
|
||||||
@@ -366,6 +449,7 @@ int GetEpicFocusFeatOfWeaponType(int iWeaponType)
|
|||||||
case BASE_ITEM_BASTARDSWORD: return FEAT_EPIC_WEAPON_FOCUS_BASTARDSWORD;
|
case BASE_ITEM_BASTARDSWORD: return FEAT_EPIC_WEAPON_FOCUS_BASTARDSWORD;
|
||||||
case BASE_ITEM_BATTLEAXE: return FEAT_EPIC_WEAPON_FOCUS_BATTLEAXE;
|
case BASE_ITEM_BATTLEAXE: return FEAT_EPIC_WEAPON_FOCUS_BATTLEAXE;
|
||||||
case BASE_ITEM_CLUB: return FEAT_EPIC_WEAPON_FOCUS_CLUB;
|
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_DAGGER: return FEAT_EPIC_WEAPON_FOCUS_DAGGER;
|
||||||
case BASE_ITEM_DART: return FEAT_EPIC_WEAPON_FOCUS_DART;
|
case BASE_ITEM_DART: return FEAT_EPIC_WEAPON_FOCUS_DART;
|
||||||
case BASE_ITEM_DIREMACE: return FEAT_EPIC_WEAPON_FOCUS_DIREMACE;
|
case BASE_ITEM_DIREMACE: return FEAT_EPIC_WEAPON_FOCUS_DIREMACE;
|
||||||
@@ -388,6 +472,7 @@ int GetEpicFocusFeatOfWeaponType(int iWeaponType)
|
|||||||
case BASE_ITEM_LONGSWORD: return FEAT_EPIC_WEAPON_FOCUS_LONGSWORD;
|
case BASE_ITEM_LONGSWORD: return FEAT_EPIC_WEAPON_FOCUS_LONGSWORD;
|
||||||
case BASE_ITEM_MORNINGSTAR: return FEAT_EPIC_WEAPON_FOCUS_MORNINGSTAR;
|
case BASE_ITEM_MORNINGSTAR: return FEAT_EPIC_WEAPON_FOCUS_MORNINGSTAR;
|
||||||
case BASE_ITEM_QUARTERSTAFF: return FEAT_EPIC_WEAPON_FOCUS_QUARTERSTAFF;
|
case BASE_ITEM_QUARTERSTAFF: return FEAT_EPIC_WEAPON_FOCUS_QUARTERSTAFF;
|
||||||
|
case BASE_ITEM_MAGICSTAFF: return FEAT_EPIC_WEAPON_FOCUS_QUARTERSTAFF;
|
||||||
case BASE_ITEM_RAPIER: return FEAT_EPIC_WEAPON_FOCUS_RAPIER;
|
case BASE_ITEM_RAPIER: return FEAT_EPIC_WEAPON_FOCUS_RAPIER;
|
||||||
case BASE_ITEM_SCIMITAR: return FEAT_EPIC_WEAPON_FOCUS_SCIMITAR;
|
case BASE_ITEM_SCIMITAR: return FEAT_EPIC_WEAPON_FOCUS_SCIMITAR;
|
||||||
case BASE_ITEM_SCYTHE: return FEAT_EPIC_WEAPON_FOCUS_SCYTHE;
|
case BASE_ITEM_SCYTHE: return FEAT_EPIC_WEAPON_FOCUS_SCYTHE;
|
||||||
@@ -436,6 +521,7 @@ int GetEpicSpecializationFeatOfWeaponType(int iWeaponType)
|
|||||||
case BASE_ITEM_BASTARDSWORD: return FEAT_EPIC_WEAPON_SPECIALIZATION_BASTARDSWORD;
|
case BASE_ITEM_BASTARDSWORD: return FEAT_EPIC_WEAPON_SPECIALIZATION_BASTARDSWORD;
|
||||||
case BASE_ITEM_BATTLEAXE: return FEAT_EPIC_WEAPON_SPECIALIZATION_BATTLEAXE;
|
case BASE_ITEM_BATTLEAXE: return FEAT_EPIC_WEAPON_SPECIALIZATION_BATTLEAXE;
|
||||||
case BASE_ITEM_CLUB: return FEAT_EPIC_WEAPON_SPECIALIZATION_CLUB;
|
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_DAGGER: return FEAT_EPIC_WEAPON_SPECIALIZATION_DAGGER;
|
||||||
case BASE_ITEM_DART: return FEAT_EPIC_WEAPON_SPECIALIZATION_DART;
|
case BASE_ITEM_DART: return FEAT_EPIC_WEAPON_SPECIALIZATION_DART;
|
||||||
case BASE_ITEM_DIREMACE: return FEAT_EPIC_WEAPON_SPECIALIZATION_DIREMACE;
|
case BASE_ITEM_DIREMACE: return FEAT_EPIC_WEAPON_SPECIALIZATION_DIREMACE;
|
||||||
@@ -458,6 +544,7 @@ int GetEpicSpecializationFeatOfWeaponType(int iWeaponType)
|
|||||||
case BASE_ITEM_LONGSWORD: return FEAT_EPIC_WEAPON_SPECIALIZATION_LONGSWORD;
|
case BASE_ITEM_LONGSWORD: return FEAT_EPIC_WEAPON_SPECIALIZATION_LONGSWORD;
|
||||||
case BASE_ITEM_MORNINGSTAR: return FEAT_EPIC_WEAPON_SPECIALIZATION_MORNINGSTAR;
|
case BASE_ITEM_MORNINGSTAR: return FEAT_EPIC_WEAPON_SPECIALIZATION_MORNINGSTAR;
|
||||||
case BASE_ITEM_QUARTERSTAFF: return FEAT_EPIC_WEAPON_SPECIALIZATION_QUARTERSTAFF;
|
case BASE_ITEM_QUARTERSTAFF: return FEAT_EPIC_WEAPON_SPECIALIZATION_QUARTERSTAFF;
|
||||||
|
case BASE_ITEM_MAGICSTAFF: return FEAT_EPIC_WEAPON_SPECIALIZATION_QUARTERSTAFF;
|
||||||
case BASE_ITEM_RAPIER: return FEAT_EPIC_WEAPON_SPECIALIZATION_RAPIER;
|
case BASE_ITEM_RAPIER: return FEAT_EPIC_WEAPON_SPECIALIZATION_RAPIER;
|
||||||
case BASE_ITEM_SCIMITAR: return FEAT_EPIC_WEAPON_SPECIALIZATION_SCIMITAR;
|
case BASE_ITEM_SCIMITAR: return FEAT_EPIC_WEAPON_SPECIALIZATION_SCIMITAR;
|
||||||
case BASE_ITEM_SCYTHE: return FEAT_EPIC_WEAPON_SPECIALIZATION_SCYTHE;
|
case BASE_ITEM_SCYTHE: return FEAT_EPIC_WEAPON_SPECIALIZATION_SCYTHE;
|
||||||
@@ -506,6 +593,7 @@ int GetImprovedCriticalFeatOfWeaponType(int iWeaponType)
|
|||||||
case BASE_ITEM_BASTARDSWORD: return FEAT_IMPROVED_CRITICAL_BASTARD_SWORD;
|
case BASE_ITEM_BASTARDSWORD: return FEAT_IMPROVED_CRITICAL_BASTARD_SWORD;
|
||||||
case BASE_ITEM_BATTLEAXE: return FEAT_IMPROVED_CRITICAL_BATTLE_AXE;
|
case BASE_ITEM_BATTLEAXE: return FEAT_IMPROVED_CRITICAL_BATTLE_AXE;
|
||||||
case BASE_ITEM_CLUB: return FEAT_IMPROVED_CRITICAL_CLUB;
|
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_DAGGER: return FEAT_IMPROVED_CRITICAL_DAGGER;
|
||||||
case BASE_ITEM_DART: return FEAT_IMPROVED_CRITICAL_DART;
|
case BASE_ITEM_DART: return FEAT_IMPROVED_CRITICAL_DART;
|
||||||
case BASE_ITEM_DIREMACE: return FEAT_IMPROVED_CRITICAL_DIRE_MACE;
|
case BASE_ITEM_DIREMACE: return FEAT_IMPROVED_CRITICAL_DIRE_MACE;
|
||||||
@@ -528,6 +616,7 @@ int GetImprovedCriticalFeatOfWeaponType(int iWeaponType)
|
|||||||
case BASE_ITEM_LONGSWORD: return FEAT_IMPROVED_CRITICAL_LONG_SWORD;
|
case BASE_ITEM_LONGSWORD: return FEAT_IMPROVED_CRITICAL_LONG_SWORD;
|
||||||
case BASE_ITEM_MORNINGSTAR: return FEAT_IMPROVED_CRITICAL_MORNING_STAR;
|
case BASE_ITEM_MORNINGSTAR: return FEAT_IMPROVED_CRITICAL_MORNING_STAR;
|
||||||
case BASE_ITEM_QUARTERSTAFF: return FEAT_IMPROVED_CRITICAL_STAFF;
|
case BASE_ITEM_QUARTERSTAFF: return FEAT_IMPROVED_CRITICAL_STAFF;
|
||||||
|
case BASE_ITEM_MAGICSTAFF: return FEAT_IMPROVED_CRITICAL_STAFF;
|
||||||
case BASE_ITEM_RAPIER: return FEAT_IMPROVED_CRITICAL_RAPIER;
|
case BASE_ITEM_RAPIER: return FEAT_IMPROVED_CRITICAL_RAPIER;
|
||||||
case BASE_ITEM_SCIMITAR: return FEAT_IMPROVED_CRITICAL_SCIMITAR;
|
case BASE_ITEM_SCIMITAR: return FEAT_IMPROVED_CRITICAL_SCIMITAR;
|
||||||
case BASE_ITEM_SCYTHE: return FEAT_IMPROVED_CRITICAL_SCYTHE;
|
case BASE_ITEM_SCYTHE: return FEAT_IMPROVED_CRITICAL_SCYTHE;
|
||||||
@@ -576,6 +665,7 @@ int GetOverwhelmingCriticalFeatOfWeaponType(int iWeaponType)
|
|||||||
case BASE_ITEM_BASTARDSWORD: return FEAT_EPIC_OVERWHELMING_CRITICAL_BASTARDSWORD;
|
case BASE_ITEM_BASTARDSWORD: return FEAT_EPIC_OVERWHELMING_CRITICAL_BASTARDSWORD;
|
||||||
case BASE_ITEM_BATTLEAXE: return FEAT_EPIC_OVERWHELMING_CRITICAL_BATTLEAXE;
|
case BASE_ITEM_BATTLEAXE: return FEAT_EPIC_OVERWHELMING_CRITICAL_BATTLEAXE;
|
||||||
case BASE_ITEM_CLUB: return FEAT_EPIC_OVERWHELMING_CRITICAL_CLUB;
|
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_DAGGER: return FEAT_EPIC_OVERWHELMING_CRITICAL_DAGGER;
|
||||||
case BASE_ITEM_DART: return FEAT_EPIC_OVERWHELMING_CRITICAL_DART;
|
case BASE_ITEM_DART: return FEAT_EPIC_OVERWHELMING_CRITICAL_DART;
|
||||||
case BASE_ITEM_DIREMACE: return FEAT_EPIC_OVERWHELMING_CRITICAL_DIREMACE;
|
case BASE_ITEM_DIREMACE: return FEAT_EPIC_OVERWHELMING_CRITICAL_DIREMACE;
|
||||||
@@ -598,6 +688,7 @@ int GetOverwhelmingCriticalFeatOfWeaponType(int iWeaponType)
|
|||||||
case BASE_ITEM_LONGSWORD: return FEAT_EPIC_OVERWHELMING_CRITICAL_LONGSWORD;
|
case BASE_ITEM_LONGSWORD: return FEAT_EPIC_OVERWHELMING_CRITICAL_LONGSWORD;
|
||||||
case BASE_ITEM_MORNINGSTAR: return FEAT_EPIC_OVERWHELMING_CRITICAL_MORNINGSTAR;
|
case BASE_ITEM_MORNINGSTAR: return FEAT_EPIC_OVERWHELMING_CRITICAL_MORNINGSTAR;
|
||||||
case BASE_ITEM_QUARTERSTAFF: return FEAT_EPIC_OVERWHELMING_CRITICAL_QUARTERSTAFF;
|
case BASE_ITEM_QUARTERSTAFF: return FEAT_EPIC_OVERWHELMING_CRITICAL_QUARTERSTAFF;
|
||||||
|
case BASE_ITEM_MAGICSTAFF: return FEAT_EPIC_OVERWHELMING_CRITICAL_QUARTERSTAFF;
|
||||||
case BASE_ITEM_RAPIER: return FEAT_EPIC_OVERWHELMING_CRITICAL_RAPIER;
|
case BASE_ITEM_RAPIER: return FEAT_EPIC_OVERWHELMING_CRITICAL_RAPIER;
|
||||||
case BASE_ITEM_SCIMITAR: return FEAT_EPIC_OVERWHELMING_CRITICAL_SCIMITAR;
|
case BASE_ITEM_SCIMITAR: return FEAT_EPIC_OVERWHELMING_CRITICAL_SCIMITAR;
|
||||||
case BASE_ITEM_SCYTHE: return FEAT_EPIC_OVERWHELMING_CRITICAL_SCYTHE;
|
case BASE_ITEM_SCYTHE: return FEAT_EPIC_OVERWHELMING_CRITICAL_SCYTHE;
|
||||||
@@ -646,6 +737,7 @@ int GetDevastatingCriticalFeatOfWeaponType(int iWeaponType)
|
|||||||
case BASE_ITEM_BASTARDSWORD: return FEAT_EPIC_DEVASTATING_CRITICAL_BASTARDSWORD;
|
case BASE_ITEM_BASTARDSWORD: return FEAT_EPIC_DEVASTATING_CRITICAL_BASTARDSWORD;
|
||||||
case BASE_ITEM_BATTLEAXE: return FEAT_EPIC_DEVASTATING_CRITICAL_BATTLEAXE;
|
case BASE_ITEM_BATTLEAXE: return FEAT_EPIC_DEVASTATING_CRITICAL_BATTLEAXE;
|
||||||
case BASE_ITEM_CLUB: return FEAT_EPIC_DEVASTATING_CRITICAL_CLUB;
|
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_DAGGER: return FEAT_EPIC_DEVASTATING_CRITICAL_DAGGER;
|
||||||
case BASE_ITEM_DART: return FEAT_EPIC_DEVASTATING_CRITICAL_DART;
|
case BASE_ITEM_DART: return FEAT_EPIC_DEVASTATING_CRITICAL_DART;
|
||||||
case BASE_ITEM_DIREMACE: return FEAT_EPIC_DEVASTATING_CRITICAL_DIREMACE;
|
case BASE_ITEM_DIREMACE: return FEAT_EPIC_DEVASTATING_CRITICAL_DIREMACE;
|
||||||
@@ -668,6 +760,7 @@ int GetDevastatingCriticalFeatOfWeaponType(int iWeaponType)
|
|||||||
case BASE_ITEM_LONGSWORD: return FEAT_EPIC_DEVASTATING_CRITICAL_LONGSWORD;
|
case BASE_ITEM_LONGSWORD: return FEAT_EPIC_DEVASTATING_CRITICAL_LONGSWORD;
|
||||||
case BASE_ITEM_MORNINGSTAR: return FEAT_EPIC_DEVASTATING_CRITICAL_MORNINGSTAR;
|
case BASE_ITEM_MORNINGSTAR: return FEAT_EPIC_DEVASTATING_CRITICAL_MORNINGSTAR;
|
||||||
case BASE_ITEM_QUARTERSTAFF: return FEAT_EPIC_DEVASTATING_CRITICAL_QUARTERSTAFF;
|
case BASE_ITEM_QUARTERSTAFF: return FEAT_EPIC_DEVASTATING_CRITICAL_QUARTERSTAFF;
|
||||||
|
case BASE_ITEM_MAGICSTAFF: return FEAT_EPIC_DEVASTATING_CRITICAL_QUARTERSTAFF;
|
||||||
case BASE_ITEM_RAPIER: return FEAT_EPIC_DEVASTATING_CRITICAL_RAPIER;
|
case BASE_ITEM_RAPIER: return FEAT_EPIC_DEVASTATING_CRITICAL_RAPIER;
|
||||||
case BASE_ITEM_SCIMITAR: return FEAT_EPIC_DEVASTATING_CRITICAL_SCIMITAR;
|
case BASE_ITEM_SCIMITAR: return FEAT_EPIC_DEVASTATING_CRITICAL_SCIMITAR;
|
||||||
case BASE_ITEM_SCYTHE: return FEAT_EPIC_DEVASTATING_CRITICAL_SCYTHE;
|
case BASE_ITEM_SCYTHE: return FEAT_EPIC_DEVASTATING_CRITICAL_SCYTHE;
|
||||||
@@ -711,6 +804,7 @@ int GetWeaponOfChoiceFeatOfWeaponType(int iWeaponType)
|
|||||||
case BASE_ITEM_BASTARDSWORD: return FEAT_WEAPON_OF_CHOICE_BASTARDSWORD;
|
case BASE_ITEM_BASTARDSWORD: return FEAT_WEAPON_OF_CHOICE_BASTARDSWORD;
|
||||||
case BASE_ITEM_BATTLEAXE: return FEAT_WEAPON_OF_CHOICE_BATTLEAXE;
|
case BASE_ITEM_BATTLEAXE: return FEAT_WEAPON_OF_CHOICE_BATTLEAXE;
|
||||||
case BASE_ITEM_CLUB: return FEAT_WEAPON_OF_CHOICE_CLUB;
|
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_DAGGER: return FEAT_WEAPON_OF_CHOICE_DAGGER;
|
||||||
case BASE_ITEM_DIREMACE: return FEAT_WEAPON_OF_CHOICE_DIREMACE;
|
case BASE_ITEM_DIREMACE: return FEAT_WEAPON_OF_CHOICE_DIREMACE;
|
||||||
case BASE_ITEM_DOUBLEAXE: return FEAT_WEAPON_OF_CHOICE_DOUBLEAXE;
|
case BASE_ITEM_DOUBLEAXE: return FEAT_WEAPON_OF_CHOICE_DOUBLEAXE;
|
||||||
@@ -729,6 +823,7 @@ int GetWeaponOfChoiceFeatOfWeaponType(int iWeaponType)
|
|||||||
case BASE_ITEM_LONGSWORD: return FEAT_WEAPON_OF_CHOICE_LONGSWORD;
|
case BASE_ITEM_LONGSWORD: return FEAT_WEAPON_OF_CHOICE_LONGSWORD;
|
||||||
case BASE_ITEM_MORNINGSTAR: return FEAT_WEAPON_OF_CHOICE_MORNINGSTAR;
|
case BASE_ITEM_MORNINGSTAR: return FEAT_WEAPON_OF_CHOICE_MORNINGSTAR;
|
||||||
case BASE_ITEM_QUARTERSTAFF: return FEAT_WEAPON_OF_CHOICE_QUARTERSTAFF;
|
case BASE_ITEM_QUARTERSTAFF: return FEAT_WEAPON_OF_CHOICE_QUARTERSTAFF;
|
||||||
|
case BASE_ITEM_MAGICSTAFF: return FEAT_WEAPON_OF_CHOICE_QUARTERSTAFF;
|
||||||
case BASE_ITEM_RAPIER: return FEAT_WEAPON_OF_CHOICE_RAPIER;
|
case BASE_ITEM_RAPIER: return FEAT_WEAPON_OF_CHOICE_RAPIER;
|
||||||
case BASE_ITEM_SCIMITAR: return FEAT_WEAPON_OF_CHOICE_SCIMITAR;
|
case BASE_ITEM_SCIMITAR: return FEAT_WEAPON_OF_CHOICE_SCIMITAR;
|
||||||
case BASE_ITEM_SCYTHE: return FEAT_WEAPON_OF_CHOICE_SCYTHE;
|
case BASE_ITEM_SCYTHE: return FEAT_WEAPON_OF_CHOICE_SCYTHE;
|
||||||
@@ -787,6 +882,7 @@ int GetWeaponSize(object oWeapon)
|
|||||||
case BASE_ITEM_GREATAXE:
|
case BASE_ITEM_GREATAXE:
|
||||||
case BASE_ITEM_HEAVYFLAIL:
|
case BASE_ITEM_HEAVYFLAIL:
|
||||||
case BASE_ITEM_QUARTERSTAFF:
|
case BASE_ITEM_QUARTERSTAFF:
|
||||||
|
//case BASE_ITEM_MAGICSTAFF:
|
||||||
case BASE_ITEM_SCYTHE:
|
case BASE_ITEM_SCYTHE:
|
||||||
case BASE_ITEM_SHORTSPEAR:
|
case BASE_ITEM_SHORTSPEAR:
|
||||||
case BASE_ITEM_ELVEN_COURTBLADE:
|
case BASE_ITEM_ELVEN_COURTBLADE:
|
||||||
@@ -823,6 +919,7 @@ int PRCLargeWeaponCheck(int iBaseType, int nSize)
|
|||||||
case BASE_ITEM_GREATAXE:
|
case BASE_ITEM_GREATAXE:
|
||||||
case BASE_ITEM_HEAVYFLAIL:
|
case BASE_ITEM_HEAVYFLAIL:
|
||||||
case BASE_ITEM_QUARTERSTAFF:
|
case BASE_ITEM_QUARTERSTAFF:
|
||||||
|
//case BASE_ITEM_MAGICSTAFF:
|
||||||
case BASE_ITEM_SCYTHE:
|
case BASE_ITEM_SCYTHE:
|
||||||
case BASE_ITEM_SHORTSPEAR:
|
case BASE_ITEM_SHORTSPEAR:
|
||||||
case BASE_ITEM_ELVEN_COURTBLADE:
|
case BASE_ITEM_ELVEN_COURTBLADE:
|
||||||
@@ -835,3 +932,5 @@ int PRCLargeWeaponCheck(int iBaseType, int nSize)
|
|||||||
}
|
}
|
||||||
return sTest != "" && sTest != IntToString(nSize);
|
return sTest != "" && sTest != IntToString(nSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//::void main(){}
|
||||||
@@ -108,8 +108,8 @@ void SetupCharacterData(object oPC)
|
|||||||
case CLASS_TYPE_ALIENIST: sScript = "prc_alienist"; break;
|
case CLASS_TYPE_ALIENIST: sScript = "prc_alienist"; break;
|
||||||
case CLASS_TYPE_ARCANE_DUELIST: sScript = "prc_arcduel"; break;
|
case CLASS_TYPE_ARCANE_DUELIST: sScript = "prc_arcduel"; break;
|
||||||
case CLASS_TYPE_ARCHIVIST: sScript = "prc_archivist"; iData |= 0x01; break;
|
case CLASS_TYPE_ARCHIVIST: sScript = "prc_archivist"; iData |= 0x01; break;
|
||||||
case CLASS_TYPE_ASSASSIN: iData |= 0x03; break;
|
case CLASS_TYPE_ASSASSIN: break;
|
||||||
case CLASS_TYPE_BAELNORN: sScript = "prc_baelnorn"; break;
|
//case CLASS_TYPE_BAELNORN: sScript = "prc_baelnorn"; break;
|
||||||
case CLASS_TYPE_BARD: iData |= 0x07; break;
|
case CLASS_TYPE_BARD: iData |= 0x07; break;
|
||||||
case CLASS_TYPE_BATTLESMITH: sScript = "prc_battlesmith"; break;
|
case CLASS_TYPE_BATTLESMITH: sScript = "prc_battlesmith"; break;
|
||||||
case CLASS_TYPE_BEGUILER: iData |= 0x03; break;
|
case CLASS_TYPE_BEGUILER: iData |= 0x03; break;
|
||||||
@@ -121,7 +121,7 @@ void SetupCharacterData(object oPC)
|
|||||||
case CLASS_TYPE_BLIGHTLORD: sScript = "prc_blightlord"; break;
|
case CLASS_TYPE_BLIGHTLORD: sScript = "prc_blightlord"; break;
|
||||||
case CLASS_TYPE_BLOODCLAW_MASTER: sScript = "tob_bloodclaw"; break;
|
case CLASS_TYPE_BLOODCLAW_MASTER: sScript = "tob_bloodclaw"; break;
|
||||||
case CLASS_TYPE_BONDED_SUMMONNER: sScript = "prc_bondedsumm"; break;
|
case CLASS_TYPE_BONDED_SUMMONNER: sScript = "prc_bondedsumm"; break;
|
||||||
case CLASS_TYPE_CELEBRANT_SHARESS: iData |= 0x03; break;
|
case CLASS_TYPE_CELEBRANT_SHARESS: iData |= 0x07; break;
|
||||||
case CLASS_TYPE_CHILD_OF_NIGHT: sScript = "shd_childnight"; break;
|
case CLASS_TYPE_CHILD_OF_NIGHT: sScript = "shd_childnight"; break;
|
||||||
case CLASS_TYPE_COC: sScript = "prc_coc"; break;
|
case CLASS_TYPE_COC: sScript = "prc_coc"; break;
|
||||||
case CLASS_TYPE_COMBAT_MEDIC: sScript = "prc_cbtmed"; break;
|
case CLASS_TYPE_COMBAT_MEDIC: sScript = "prc_cbtmed"; break;
|
||||||
@@ -180,6 +180,7 @@ void SetupCharacterData(object oPC)
|
|||||||
case CLASS_TYPE_LASHER: sScript = "prc_lasher"; break;
|
case CLASS_TYPE_LASHER: sScript = "prc_lasher"; break;
|
||||||
case CLASS_TYPE_LEGENDARY_DREADNOUGHT: sScript = "prc_legendread"; break;
|
case CLASS_TYPE_LEGENDARY_DREADNOUGHT: sScript = "prc_legendread"; break;
|
||||||
case CLASS_TYPE_LICH: sScript = "pnp_lich_level"; break;
|
case CLASS_TYPE_LICH: sScript = "pnp_lich_level"; break;
|
||||||
|
case CLASS_TYPE_LION_OF_TALISID: sScript = "prc_lot"; break;
|
||||||
case CLASS_TYPE_MAGEKILLER: sScript = "prc_magekill"; break;
|
case CLASS_TYPE_MAGEKILLER: sScript = "prc_magekill"; break;
|
||||||
case CLASS_TYPE_MASTER_HARPER: sScript = "prc_masterh"; break;
|
case CLASS_TYPE_MASTER_HARPER: sScript = "prc_masterh"; break;
|
||||||
case CLASS_TYPE_MASTER_OF_NINE: sScript = "tob_masterofnine"; break;
|
case CLASS_TYPE_MASTER_OF_NINE: sScript = "tob_masterofnine"; break;
|
||||||
@@ -245,6 +246,7 @@ void SetupCharacterData(object oPC)
|
|||||||
case CLASS_TYPE_TOTEM_RAGER: sScript = "moi_totemrager"; break;
|
case CLASS_TYPE_TOTEM_RAGER: sScript = "moi_totemrager"; break;
|
||||||
case CLASS_TYPE_TRUENAMER: sScript = "true_truenamer"; iData |= 0x01; break;
|
case CLASS_TYPE_TRUENAMER: sScript = "true_truenamer"; iData |= 0x01; break;
|
||||||
case CLASS_TYPE_VASSAL: sScript = "prc_vassal"; break;
|
case CLASS_TYPE_VASSAL: sScript = "prc_vassal"; break;
|
||||||
|
case CLASS_TYPE_VERDANT_LORD: sScript = "prc_verdantlord"; break;
|
||||||
case CLASS_TYPE_VIGILANT: sScript = "prc_vigilant"; break;
|
case CLASS_TYPE_VIGILANT: sScript = "prc_vigilant"; break;
|
||||||
case CLASS_TYPE_WARBLADE: sScript = "tob_warblade"; iData |= 0x01; break;
|
case CLASS_TYPE_WARBLADE: sScript = "tob_warblade"; iData |= 0x01; break;
|
||||||
case CLASS_TYPE_WARCHIEF: sScript = "prc_warchief"; break;
|
case CLASS_TYPE_WARCHIEF: sScript = "prc_warchief"; break;
|
||||||
@@ -2264,6 +2266,8 @@ void FeatSpecialUsePerDay(object oPC)
|
|||||||
FeatUsePerDay(oPC, FEAT_FM_FOREST_DOMINION, ABILITY_CHARISMA, 3);
|
FeatUsePerDay(oPC, FEAT_FM_FOREST_DOMINION, ABILITY_CHARISMA, 3);
|
||||||
FeatUsePerDay(oPC, FEAT_SOD_DEATH_TOUCH, -1, (GetLevelByClass(CLASS_TYPE_SLAYER_OF_DOMIEL, oPC)+4)/4);
|
FeatUsePerDay(oPC, FEAT_SOD_DEATH_TOUCH, -1, (GetLevelByClass(CLASS_TYPE_SLAYER_OF_DOMIEL, oPC)+4)/4);
|
||||||
FeatUsePerDay(oPC, FEAT_SUEL_DISPELLING_STRIKE, -1, (GetLevelByClass(CLASS_TYPE_SUEL_ARCHANAMACH, oPC) + 2) / 4);
|
FeatUsePerDay(oPC, FEAT_SUEL_DISPELLING_STRIKE, -1, (GetLevelByClass(CLASS_TYPE_SUEL_ARCHANAMACH, oPC) + 2) / 4);
|
||||||
|
FeatUsePerDay(oPC, FEAT_PLANT_CONTROL, ABILITY_CHARISMA, 3);
|
||||||
|
FeatUsePerDay(oPC, FEAT_PLANT_DEFIANCE, ABILITY_CHARISMA, 3);
|
||||||
FeatDiabolist(oPC);
|
FeatDiabolist(oPC);
|
||||||
FeatAlaghar(oPC);
|
FeatAlaghar(oPC);
|
||||||
ShadowShieldUses(oPC);
|
ShadowShieldUses(oPC);
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
#include "prc_feat_const"
|
#include "prc_feat_const"
|
||||||
|
#include "inc_item_props"
|
||||||
|
#include "prc_inc_spells"
|
||||||
|
|
||||||
const string BRUTAL_STRIKE_MODE_VAR = "PRC_BRUTAL_STRIKE_MODE";
|
const string BRUTAL_STRIKE_MODE_VAR = "PRC_BRUTAL_STRIKE_MODE";
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,8 @@ void CheckForPnPHolyAvenger(object oItem);
|
|||||||
|
|
||||||
#include "inc_utility"
|
#include "inc_utility"
|
||||||
#include "prc_inc_newip"
|
#include "prc_inc_newip"
|
||||||
|
#include "prc_inc_castlvl"
|
||||||
|
#include "inc_newspellbook"
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|||||||
1993
src/include/prc_inc_json.nss
Normal file
1993
src/include/prc_inc_json.nss
Normal file
File diff suppressed because it is too large
Load Diff
@@ -16,26 +16,28 @@ const int MATERIAL_TYPE_UNKNOWN = 0;
|
|||||||
const int MATERIAL_TYPE_BONE = 1;
|
const int MATERIAL_TYPE_BONE = 1;
|
||||||
const int MATERIAL_TYPE_CERAMIC = 2;
|
const int MATERIAL_TYPE_CERAMIC = 2;
|
||||||
const int MATERIAL_TYPE_CRYSTAL = 3;
|
const int MATERIAL_TYPE_CRYSTAL = 3;
|
||||||
const int MATERIAL_TYPE_FABRIC = 4;
|
const int MATERIAL_TYPE_FIBER = 4;
|
||||||
const int MATERIAL_TYPE_LEATHER = 5;
|
const int MATERIAL_TYPE_LEATHER = 5;
|
||||||
const int MATERIAL_TYPE_METAL = 6;
|
const int MATERIAL_TYPE_METAL = 6;
|
||||||
const int MATERIAL_TYPE_PAPER = 7;
|
const int MATERIAL_TYPE_PAPER = 7;
|
||||||
const int MATERIAL_TYPE_ROPE = 8;
|
const int MATERIAL_TYPE_ROPE = 8;
|
||||||
const int MATERIAL_TYPE_STONE = 9;
|
const int MATERIAL_TYPE_STONE = 9;
|
||||||
const int MATERIAL_TYPE_WOOD = 10;
|
const int MATERIAL_TYPE_WOOD = 10;
|
||||||
|
const int MATERIAL_TYPE_BOTANICAL = 11;
|
||||||
|
|
||||||
const string MATERIAL_TYPE_NAME_INVALID = "";
|
const string MATERIAL_TYPE_NAME_INVALID = "";
|
||||||
const string MATERIAL_TYPE_NAME_UNKNOWN = "Unknown";
|
const string MATERIAL_TYPE_NAME_UNKNOWN = "Unknown";
|
||||||
const string MATERIAL_TYPE_NAME_BONE = "Bone";
|
const string MATERIAL_TYPE_NAME_BONE = "Bone";
|
||||||
const string MATERIAL_TYPE_NAME_CERAMIC = "Ceramic";
|
const string MATERIAL_TYPE_NAME_CERAMIC = "Ceramic";
|
||||||
const string MATERIAL_TYPE_NAME_CRYSTAL = "Crystal";
|
const string MATERIAL_TYPE_NAME_CRYSTAL = "Crystal";
|
||||||
const string MATERIAL_TYPE_NAME_FABRIC = "Fabric";
|
const string MATERIAL_TYPE_NAME_FIBER = "Fiber";
|
||||||
const string MATERIAL_TYPE_NAME_LEATHER = "Leather";
|
const string MATERIAL_TYPE_NAME_LEATHER = "Leather";
|
||||||
const string MATERIAL_TYPE_NAME_METAL = "Metal";
|
const string MATERIAL_TYPE_NAME_METAL = "Metal";
|
||||||
const string MATERIAL_TYPE_NAME_PAPER = "Paper";
|
const string MATERIAL_TYPE_NAME_PAPER = "Paper";
|
||||||
const string MATERIAL_TYPE_NAME_ROPE = "Rope";
|
const string MATERIAL_TYPE_NAME_ROPE = "Rope";
|
||||||
const string MATERIAL_TYPE_NAME_STONE = "Stone";
|
const string MATERIAL_TYPE_NAME_STONE = "Stone";
|
||||||
const string MATERIAL_TYPE_NAME_WOOD = "Wood";
|
const string MATERIAL_TYPE_NAME_WOOD = "Wood";
|
||||||
|
const string MATERIAL_TYPE_NAME_BOTANICAL = "Bontanical";
|
||||||
|
|
||||||
//:: Material Itemproperty Constants
|
//:: Material Itemproperty Constants
|
||||||
//::////////////////////////////////////////////////////////////////////////////////
|
//::////////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -163,7 +165,8 @@ const int IP_MATERIAL_OBSIDIAN = 140;
|
|||||||
const int IP_MATERIAL_BAMBOO = 141;
|
const int IP_MATERIAL_BAMBOO = 141;
|
||||||
const int IP_MATERIAL_POTTERY = 142;
|
const int IP_MATERIAL_POTTERY = 142;
|
||||||
const int IP_MATERIAL_GLASSTEEL = 143;
|
const int IP_MATERIAL_GLASSTEEL = 143;
|
||||||
const int IP_NUM_MATERIALS = 143;
|
const int IP_MATERIAL_HERB = 144;
|
||||||
|
const int IP_NUM_MATERIALS = 144;
|
||||||
|
|
||||||
const string IP_MATERIAL_NAME_INVALID = "";
|
const string IP_MATERIAL_NAME_INVALID = "";
|
||||||
const string IP_MATERIAL_NAME_UNKNOWN = "Unknown";
|
const string IP_MATERIAL_NAME_UNKNOWN = "Unknown";
|
||||||
@@ -288,6 +291,7 @@ const string IP_MATERIAL_NAME_OBSIDIAN = "Obsidian";
|
|||||||
const string IP_MATERIAL_NAME_BAMBOO = "Bamboo";
|
const string IP_MATERIAL_NAME_BAMBOO = "Bamboo";
|
||||||
const string IP_MATERIAL_NAME_POTTERY = "Pottery";
|
const string IP_MATERIAL_NAME_POTTERY = "Pottery";
|
||||||
const string IP_MATERIAL_NAME_GLASSTEEL = "Glassteel";
|
const string IP_MATERIAL_NAME_GLASSTEEL = "Glassteel";
|
||||||
|
const string IP_MATERIAL_NAME_HERB = "Herbs";
|
||||||
|
|
||||||
//::///////////////////////////////////////////////////////////////
|
//::///////////////////////////////////////////////////////////////
|
||||||
// GetMaterialName( int iMaterialType, int bLowerCase = FALSE)
|
// GetMaterialName( int iMaterialType, int bLowerCase = FALSE)
|
||||||
@@ -428,6 +432,7 @@ string GetMaterialName( int iMaterialType, int bLowerCase = FALSE)
|
|||||||
case IP_MATERIAL_BAMBOO: sName = IP_MATERIAL_NAME_BAMBOO; break;
|
case IP_MATERIAL_BAMBOO: sName = IP_MATERIAL_NAME_BAMBOO; break;
|
||||||
case IP_MATERIAL_POTTERY: sName = IP_MATERIAL_NAME_POTTERY; break;
|
case IP_MATERIAL_POTTERY: sName = IP_MATERIAL_NAME_POTTERY; break;
|
||||||
case IP_MATERIAL_GLASSTEEL: sName = IP_MATERIAL_NAME_GLASSTEEL; break;
|
case IP_MATERIAL_GLASSTEEL: sName = IP_MATERIAL_NAME_GLASSTEEL; break;
|
||||||
|
case IP_MATERIAL_HERB: sName = IP_MATERIAL_NAME_HERB; break;
|
||||||
|
|
||||||
default: return "";
|
default: return "";
|
||||||
}
|
}
|
||||||
@@ -573,6 +578,7 @@ int GetIPMaterial( string sMaterialName)
|
|||||||
else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_BAMBOO)) return IP_MATERIAL_BAMBOO;
|
else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_BAMBOO)) return IP_MATERIAL_BAMBOO;
|
||||||
else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_POTTERY)) return IP_MATERIAL_POTTERY;
|
else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_POTTERY)) return IP_MATERIAL_POTTERY;
|
||||||
else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_GLASSTEEL)) return IP_MATERIAL_GLASSTEEL;
|
else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_GLASSTEEL)) return IP_MATERIAL_GLASSTEEL;
|
||||||
|
else if( sMaterialName == GetStringUpperCase(IP_MATERIAL_NAME_HERB)) return IP_MATERIAL_HERB;
|
||||||
|
|
||||||
return IP_MATERIAL_INVALID;
|
return IP_MATERIAL_INVALID;
|
||||||
}
|
}
|
||||||
@@ -806,6 +812,9 @@ int GetMaterialType(int nMaterial)
|
|||||||
|| nMaterial == IP_MATERIAL_DRAKE_IVORY )
|
|| nMaterial == IP_MATERIAL_DRAKE_IVORY )
|
||||||
return MATERIAL_TYPE_BONE;
|
return MATERIAL_TYPE_BONE;
|
||||||
|
|
||||||
|
else if ( nMaterial == IP_MATERIAL_HERB )
|
||||||
|
return MATERIAL_TYPE_BOTANICAL;
|
||||||
|
|
||||||
else if ( nMaterial == IP_MATERIAL_ELUKIAN_CLAY
|
else if ( nMaterial == IP_MATERIAL_ELUKIAN_CLAY
|
||||||
|| nMaterial == IP_MATERIAL_POTTERY )
|
|| nMaterial == IP_MATERIAL_POTTERY )
|
||||||
return MATERIAL_TYPE_CERAMIC;
|
return MATERIAL_TYPE_CERAMIC;
|
||||||
@@ -814,7 +823,7 @@ int GetMaterialType(int nMaterial)
|
|||||||
|| nMaterial == IP_MATERIAL_COTTON
|
|| nMaterial == IP_MATERIAL_COTTON
|
||||||
|| nMaterial == IP_MATERIAL_SILK
|
|| nMaterial == IP_MATERIAL_SILK
|
||||||
|| nMaterial == IP_MATERIAL_WOOL )
|
|| nMaterial == IP_MATERIAL_WOOL )
|
||||||
return MATERIAL_TYPE_FABRIC;
|
return MATERIAL_TYPE_FIBER;
|
||||||
|
|
||||||
else if ( nMaterial == IP_MATERIAL_GEM
|
else if ( nMaterial == IP_MATERIAL_GEM
|
||||||
|| nMaterial == IP_MATERIAL_GEM_ALEXANDRITE
|
|| nMaterial == IP_MATERIAL_GEM_ALEXANDRITE
|
||||||
|
|||||||
@@ -1,9 +1,68 @@
|
|||||||
|
//:: prc_inc_nat_hb
|
||||||
|
//::
|
||||||
|
//:: void main(){}
|
||||||
|
|
||||||
|
|
||||||
void DoNaturalWeaponHB(object oPC = OBJECT_SELF);
|
void DoNaturalWeaponHB(object oPC = OBJECT_SELF);
|
||||||
|
|
||||||
#include "prc_inc_combat"
|
#include "prc_inc_combat"
|
||||||
#include "prc_inc_template"
|
#include "prc_inc_template"
|
||||||
|
/**
|
||||||
|
* 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;
|
||||||
|
}
|
||||||
|
|
||||||
object GetProperTarget(object oPC, object oTarget)
|
// 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);
|
location lTarget = GetLocation(oPC);
|
||||||
// Use the function to get the closest creature as a target
|
// Use the function to get the closest creature as a target
|
||||||
@@ -21,7 +80,7 @@ object GetProperTarget(object oPC, object oTarget)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return oTarget;
|
return oTarget;
|
||||||
}
|
} */
|
||||||
|
|
||||||
void DoNaturalAttack(object oWeapon)
|
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
|
//not in combat, abort
|
||||||
if(!GetIsInCombat(oPC))
|
if(!GetIsInCombat(oPC))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// if(DEBUG) DoDebug("entered DoNaturalWeaponHB");
|
if(DEBUG) DoDebug("prc_inc_nat_hb: entered DoNaturalWeaponHB");
|
||||||
|
|
||||||
float fDelay = 0.1 + IntToFloat(Random(10))/100.0;
|
float fDelay = 0.1 + IntToFloat(Random(10))/100.0;
|
||||||
|
|
||||||
//no natural weapons, abort
|
//no natural weapons, abort
|
||||||
//in a different form, abort for now fix it later
|
//in a different form, abort for now fix it later
|
||||||
if(array_exists(oPC, ARRAY_NAT_SEC_WEAP_RESREF)
|
if(array_exists(oPC, ARRAY_NAT_SEC_WEAP_RESREF)
|
||||||
&& !GetIsPolyMorphedOrShifted(oPC))
|
&& !GetIsPolyMorphedOrShifted(oPC))
|
||||||
{
|
{
|
||||||
// DoDebug("DoNaturalWeaponHB: creature has natural secondary weapons");
|
DoDebug("prc_inc_nat_hb >> DoNaturalWeaponHB: creature has natural secondary weapons");
|
||||||
UpdateSecondaryWeaponSizes(oPC);
|
UpdateSecondaryWeaponSizes(oPC);
|
||||||
int i;
|
int i;
|
||||||
while(i < array_get_size(oPC, ARRAY_NAT_SEC_WEAP_RESREF))
|
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);
|
string sResRef = array_get_string(oPC, ARRAY_NAT_SEC_WEAP_RESREF, i);
|
||||||
//if null, move to next
|
|
||||||
if(sResRef != "")
|
if(sResRef != "")
|
||||||
{
|
{
|
||||||
//get the created item
|
// Get stored weapon object, or create if doesn't exist
|
||||||
object oWeapon = GetObjectByTag(sResRef);
|
object oWeapon = GetLocalObject(oPC, "NAT_SEC_WEAP_" + sResRef);
|
||||||
|
|
||||||
if(!GetIsObjectValid(oWeapon))
|
if(!GetIsObjectValid(oWeapon))
|
||||||
{
|
{
|
||||||
object oLimbo = GetObjectByTag("HEARTOFCHAOS");
|
DoDebug("prc_inc_nat_hb >> DoNaturalWeaponHB: creating and storing creature weapon " + sResRef);
|
||||||
location lLimbo = GetLocation(oLimbo);
|
oWeapon = CreateItemOnObject(sResRef, oPC);
|
||||||
if(!GetIsObjectValid(oLimbo))
|
|
||||||
lLimbo = GetStartingLocation();
|
if(!GetIsObjectValid(oWeapon))
|
||||||
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));
|
// Double-check validity before scheduling
|
||||||
//do the attack within a delay
|
if(GetIsObjectValid(oWeapon))
|
||||||
/*
|
{
|
||||||
// motu99: commented this out; AssignCommand ist not needed, because OBJECT_SELF is oPC - using AssignCommand will only degrade performance
|
DoDebug("prc_inc_nat_hb >> DoNaturalWeaponHB: scheduling a secondary natural attack with "+GetName(oWeapon)+" at delay "+FloatToString(fDelay));
|
||||||
AssignCommand(oPC, DelayCommand(fDelay, DoNaturalAttack(oWeapon)));
|
|
||||||
*/
|
|
||||||
|
|
||||||
DelayCommand(fDelay, DoNaturalAttack(oWeapon));
|
DelayCommand(fDelay, DoNaturalAttack(oWeapon));
|
||||||
|
|
||||||
//calculate the delay to use next time
|
|
||||||
fDelay += 2.05;
|
fDelay += 2.05;
|
||||||
if(fDelay > 6.0)
|
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
|
int iMod = 5; // motu99: added check for monk weapon
|
||||||
if(GetHasMonkWeaponEquipped(oPC)) iMod = 3;
|
if(GetHasMonkWeaponEquipped(oPC)) iMod = 3;
|
||||||
@@ -357,10 +429,10 @@ void DoNaturalWeaponHB(object oPC = OBJECT_SELF)
|
|||||||
for(i = 0; i < nOverflowAttackCount; i++)
|
for(i = 0; i < nOverflowAttackCount; i++)
|
||||||
{
|
{
|
||||||
// DoDebug(COLOR_WHITE + "DoNaturalWeaponHB(): scheduling a scripted overflow attack with attack mod "+IntToString(nAttackPenalty)+" at delay "+FloatToString(fDelay));
|
// 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
|
// 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));
|
DelayCommand(fDelay, DoOverflowOnhandAttack(nAttackPenalty));
|
||||||
|
|
||||||
//calculate the delay to use
|
//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
|
* 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);
|
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)
|
void AddNaturalPrimaryWeapon(object oPC, string sResRef, int nCount = 1, int nForceUse = FALSE)
|
||||||
{
|
{
|
||||||
int nFirstNaturalWeapon = FALSE;
|
int nFirstNaturalWeapon = FALSE;
|
||||||
|
|||||||
@@ -572,7 +572,10 @@ int GetMaxEssentiaCapacity(object oMeldshaper, int nClass, int nMeld)
|
|||||||
{
|
{
|
||||||
int nMax = 1; // Always can invest one
|
int nMax = 1; // Always can invest one
|
||||||
int nHD = GetHitDice(oMeldshaper);
|
int nHD = GetHitDice(oMeldshaper);
|
||||||
if (nHD >= 31) nMax = 5;
|
if (nHD >= 61) nMax = 8;
|
||||||
|
else if (nHD >= 51) nMax = 7;
|
||||||
|
else if (nHD >= 41) nMax = 6;
|
||||||
|
else if (nHD >= 31) nMax = 5;
|
||||||
else if (nHD >= 18) nMax = 4;
|
else if (nHD >= 18) nMax = 4;
|
||||||
else if (nHD >= 12) nMax = 3;
|
else if (nHD >= 12) nMax = 3;
|
||||||
else if (nHD >= 6) nMax = 2;
|
else if (nHD >= 6) nMax = 2;
|
||||||
|
|||||||
@@ -808,7 +808,24 @@ int GetIsOnHitCastSpell(object oSpellTarget = OBJECT_INVALID, object oSpellCastI
|
|||||||
if (DEBUG) DoDebug("GetIsOnHitCastSpell: item "+GetName(oSpellCastItem)+" is armor; attacker = "+GetName(oAttacker)+", defender = "+GetName(oDefender));
|
if (DEBUG) DoDebug("GetIsOnHitCastSpell: item "+GetName(oSpellCastItem)+" is armor; attacker = "+GetName(oAttacker)+", defender = "+GetName(oDefender));
|
||||||
}
|
}
|
||||||
// is the spell type item a weapon?
|
// is the spell type item a weapon?
|
||||||
else if (iWeaponType == StringToInt(Get2DACache("baseitems", "WeaponType", iBaseType)))
|
int nWT = StringToInt(Get2DACache("baseitems", "WeaponType", iBaseType));
|
||||||
|
if (nWT > 0)
|
||||||
|
{
|
||||||
|
if (oSpellTarget == OBJECT_INVALID)
|
||||||
|
oSpellTarget = PRCGetSpellTargetObject(oSpellOrigin);
|
||||||
|
|
||||||
|
oAttacker = oSpellOrigin;
|
||||||
|
oDefender = oSpellTarget;
|
||||||
|
|
||||||
|
if (DEBUG) DoDebug("GetIsOnHitCastSpell: item "+GetName(oSpellCastItem)+" is weapon [WT="+IntToString(nWT)+"]; attacker="+GetName(oAttacker)+", defender="+GetName(oDefender));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (DEBUG) DoDebug("GetIsOnHitCastSpell: item "+GetName(oSpellCastItem)+" is neither weapon nor armor; returning FALSE");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* else if (iWeaponType == StringToInt(Get2DACache("baseitems", "WeaponType", iBaseType)))
|
||||||
{
|
{
|
||||||
// determine the target, if not already given
|
// determine the target, if not already given
|
||||||
if (oSpellTarget == OBJECT_INVALID)
|
if (oSpellTarget == OBJECT_INVALID)
|
||||||
@@ -823,7 +840,7 @@ int GetIsOnHitCastSpell(object oSpellTarget = OBJECT_INVALID, object oSpellCastI
|
|||||||
{
|
{
|
||||||
if (DEBUG) DoDebug("GetIsOnHitCastSpell: item "+GetName(oSpellCastItem)+" is neither weapon nor armor; returning FALSE");
|
if (DEBUG) DoDebug("GetIsOnHitCastSpell: item "+GetName(oSpellCastItem)+" is neither weapon nor armor; returning FALSE");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
} */
|
||||||
|
|
||||||
|
|
||||||
// the spell origin must possess the item that cast the spell (at least for the aurora engine, in prc_inc_combat that may differ)
|
// the spell origin must possess the item that cast the spell (at least for the aurora engine, in prc_inc_combat that may differ)
|
||||||
|
|||||||
@@ -1370,7 +1370,9 @@ void _prc_inc_shifting_ShiftIntoTemplateAux(object oShifter, int nShifterType, o
|
|||||||
if(GetIsObjectValid(oShifterCWpR)) MyDestroyObject(oShifterCWpR);
|
if(GetIsObjectValid(oShifterCWpR)) MyDestroyObject(oShifterCWpR);
|
||||||
if(GetIsObjectValid(oShifterCWpL)) MyDestroyObject(oShifterCWpL);
|
if(GetIsObjectValid(oShifterCWpL)) MyDestroyObject(oShifterCWpL);
|
||||||
if(GetIsObjectValid(oShifterCWpB)) MyDestroyObject(oShifterCWpB);
|
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
|
// 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(){}
|
||||||
@@ -115,11 +115,11 @@ int PerformJump(object oPC, location lLoc, int bDoKnockDown = TRUE)
|
|||||||
iBonus = 4;
|
iBonus = 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*if (GetHasSpellEffect(MOVE_TC_LEAPING_DRAGON, oPC))
|
if (GetHasSpellEffect(MOVE_TC_LEAPING_DRAGON, oPC))
|
||||||
{
|
{
|
||||||
bIsRunningJump = TRUE;
|
bIsRunningJump = TRUE;
|
||||||
iBonus = 10;
|
//iBonus = 10; //:: This is granted in the stance.
|
||||||
} */
|
}
|
||||||
// PnP rules are height * 6 for run and height * 2 for jump.
|
// PnP rules are height * 6 for run and height * 2 for jump.
|
||||||
// I can't get height so that is assumed to be 6.
|
// I can't get height so that is assumed to be 6.
|
||||||
// Changed maxed jump distance because the NwN distance is rather short
|
// Changed maxed jump distance because the NwN distance is rather short
|
||||||
@@ -363,7 +363,10 @@ int PRCIsFlying(object oCreature)
|
|||||||
bFlying = TRUE;
|
bFlying = TRUE;
|
||||||
}
|
}
|
||||||
if(!bFlying
|
if(!bFlying
|
||||||
&& ((nWings > 0 && nWings < 79) || nWings == 90))//CEP and Project Q wing models
|
&& ((nWings > 0 && nWings < 79)
|
||||||
|
|| (nWings > 1959 && nWings < 1962)
|
||||||
|
|| (nWings > 1962 && nWings < 1966)
|
||||||
|
|| nWings == 90))//CEP and Project Q wing models
|
||||||
bFlying = TRUE;
|
bFlying = TRUE;
|
||||||
|
|
||||||
if (GetHasSpellEffect(MOVE_SH_BALANCE_SKY, oCreature))
|
if (GetHasSpellEffect(MOVE_SH_BALANCE_SKY, oCreature))
|
||||||
@@ -375,6 +378,12 @@ int PRCIsFlying(object oCreature)
|
|||||||
if(GetRacialType(oCreature) == RACIAL_TYPE_GLOURA)
|
if(GetRacialType(oCreature) == RACIAL_TYPE_GLOURA)
|
||||||
bFlying = TRUE;
|
bFlying = TRUE;
|
||||||
|
|
||||||
|
if(GetRacialType(oCreature) == RACIAL_TYPE_AVARIEL)
|
||||||
|
bFlying = TRUE;
|
||||||
|
|
||||||
|
if(GetRacialType(oCreature) == RACIAL_TYPE_FEYRI)
|
||||||
|
bFlying = TRUE;
|
||||||
|
|
||||||
if(GetRacialType(oCreature) == RACIAL_TYPE_SPIRETOPDRAGON)
|
if(GetRacialType(oCreature) == RACIAL_TYPE_SPIRETOPDRAGON)
|
||||||
bFlying = TRUE;
|
bFlying = TRUE;
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,11 @@
|
|||||||
/* Function prototypes */
|
/* Function prototypes */
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//:: Calculates total Shield AC bonuses from all sources
|
||||||
|
int GetTotalShieldACBonus(object oCreature);
|
||||||
|
|
||||||
//:: Handles psuedo-Foritifcation
|
//:: Handles psuedo-Foritifcation
|
||||||
void DoFortification(object oPC = OBJECT_SELF, int nFortification = 25);
|
void DoFortification(object oPC = OBJECT_SELF, int nFortification = 25);
|
||||||
|
|
||||||
@@ -376,6 +381,36 @@ const int TYPE_DIVINE = -2;
|
|||||||
/* Function definitions */
|
/* Function definitions */
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
// Returns TRUE if nSpellID is a subradial spell, FALSE otherwise
|
||||||
|
int GetIsSubradialSpell(int nSpellID)
|
||||||
|
{
|
||||||
|
string sMaster = Get2DACache("spells", "Master", nSpellID);
|
||||||
|
|
||||||
|
// If the Master column is numeric, this spell is a subradial of that master
|
||||||
|
if (sMaster != "" && sMaster != "****")
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns the masterspell SpellID for a subradial spell.
|
||||||
|
int GetMasterSpellFromSubradial(int nSpellID)
|
||||||
|
{
|
||||||
|
string sMaster = Get2DAString("spells", "Master", nSpellID);
|
||||||
|
|
||||||
|
if (sMaster != "****")
|
||||||
|
{
|
||||||
|
return StringToInt(sMaster);
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1; // No master
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int GetPrCAdjustedClassLevel(int nClass, object oCaster = OBJECT_SELF)
|
int GetPrCAdjustedClassLevel(int nClass, object oCaster = OBJECT_SELF)
|
||||||
{
|
{
|
||||||
int iTemp;
|
int iTemp;
|
||||||
@@ -412,7 +447,9 @@ int GetPrCAdjustedCasterLevelByType(int nClassType, object oCaster = OBJECT_SELF
|
|||||||
{
|
{
|
||||||
int nClassLvl;
|
int nClassLvl;
|
||||||
int nClass1, nClass2, nClass3, nClass4, nClass5, nClass6, nClass7, nClass8;
|
int nClass1, nClass2, nClass3, nClass4, nClass5, nClass6, nClass7, nClass8;
|
||||||
int nClass1Lvl, nClass2Lvl, nClass3Lvl, nClass4Lvl, nClass5Lvl, nClass6Lvl, nClass7Lvl, nClass8Lvl;
|
int nClass1Lvl = 0, nClass2Lvl = 0, nClass3Lvl = 0, nClass4Lvl = 0,
|
||||||
|
nClass5Lvl = 0, nClass6Lvl = 0, nClass7Lvl = 0, nClass8Lvl = 0;
|
||||||
|
|
||||||
|
|
||||||
nClass1 = GetClassByPosition(1, oCaster);
|
nClass1 = GetClassByPosition(1, oCaster);
|
||||||
nClass2 = GetClassByPosition(2, oCaster);
|
nClass2 = GetClassByPosition(2, oCaster);
|
||||||
@@ -974,11 +1011,16 @@ int PRCMySavingThrow(int nSavingThrow, object oTarget, int nDC, int nSaveType =
|
|||||||
// Plague Resistant gives a +4 bonus on disease saves
|
// Plague Resistant gives a +4 bonus on disease saves
|
||||||
if(GetHasFeat(FEAT_PLAGUE_RESISTANT, oTarget))
|
if(GetHasFeat(FEAT_PLAGUE_RESISTANT, oTarget))
|
||||||
nDC -= 4;
|
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
|
// +4/+2 bonus on saves against disease, done here
|
||||||
if(GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oTarget) > 13)
|
if(GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oTarget) > 13)
|
||||||
nDC -= 4;
|
nDC -= 4;
|
||||||
else if(GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oTarget) > 3)
|
else if(GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oTarget) > 3)
|
||||||
nDC -= 2;
|
nDC -= 2;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else if(nSaveType == SAVING_THROW_TYPE_POISON)
|
else if(nSaveType == SAVING_THROW_TYPE_POISON)
|
||||||
{
|
{
|
||||||
@@ -2223,6 +2265,78 @@ int GetControlledCelestialTotalHD(object oPC = OBJECT_SELF)
|
|||||||
return nTotalHD;
|
return nTotalHD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//:: Calculates total Shield AC bonuses from all sources
|
||||||
|
int GetTotalShieldACBonus(object oCreature)
|
||||||
|
{
|
||||||
|
int nShieldBonus = 0;
|
||||||
|
object oItem;
|
||||||
|
|
||||||
|
// Check left hand for shield
|
||||||
|
oItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCreature);
|
||||||
|
if (GetIsObjectValid(oItem))
|
||||||
|
{
|
||||||
|
int nBaseItem = GetBaseItemType(oItem);
|
||||||
|
if (nBaseItem == BASE_ITEM_SMALLSHIELD ||
|
||||||
|
nBaseItem == BASE_ITEM_LARGESHIELD ||
|
||||||
|
nBaseItem == BASE_ITEM_TOWERSHIELD)
|
||||||
|
{
|
||||||
|
nShieldBonus += GetItemACValue(oItem);
|
||||||
|
if(DEBUG) DoDebug("prc_inc_spells >> GetTotalShieldACBonus: Found Shield AC, bonus = " + IntToString(nShieldBonus)+".");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check creature weapon slots for shield AC bonus
|
||||||
|
oItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oCreature);
|
||||||
|
if (GetIsObjectValid(oItem))
|
||||||
|
nShieldBonus += GetItemACValue(oItem);
|
||||||
|
|
||||||
|
oItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oCreature);
|
||||||
|
if (GetIsObjectValid(oItem))
|
||||||
|
nShieldBonus += GetItemACValue(oItem);
|
||||||
|
|
||||||
|
oItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oCreature);
|
||||||
|
if (GetIsObjectValid(oItem))
|
||||||
|
nShieldBonus += GetItemACValue(oItem);
|
||||||
|
|
||||||
|
// Add shield AC bonuses from magical effects
|
||||||
|
effect eEffect = GetFirstEffect(oCreature);
|
||||||
|
while (GetIsEffectValid(eEffect))
|
||||||
|
{
|
||||||
|
int nACType = GetEffectInteger(eEffect, 0);
|
||||||
|
int nACAmount = GetEffectInteger(eEffect, 1);
|
||||||
|
|
||||||
|
if(GetEffectType(eEffect) == EFFECT_TYPE_AC_INCREASE && nACType == AC_SHIELD_ENCHANTMENT_BONUS)
|
||||||
|
{
|
||||||
|
if(DEBUG) DoDebug("prc_inc_spells >> GetTotalShieldACBonus: Found Shield AC effect, bonus = " + IntToString(nACAmount)+".");
|
||||||
|
nShieldBonus += nACAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
eEffect = GetNextEffect(oCreature);
|
||||||
|
}
|
||||||
|
return nShieldBonus;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Add shield AC bonuses from magical effects
|
||||||
|
/* effect eEffect = GetFirstEffect(oCreature);
|
||||||
|
while (GetIsEffectValid(eEffect))
|
||||||
|
{
|
||||||
|
if (GetEffectType(eEffect) == EFFECT_TYPE_AC_INCREASE &&
|
||||||
|
GetEffectInteger(eEffect, 1) == AC_SHIELD_ENCHANTMENT_BONUS)
|
||||||
|
{
|
||||||
|
int nMod = GetEffectInteger(eEffect, 0);
|
||||||
|
int nType = GetEffectInteger(eEffect, 1);
|
||||||
|
nShieldBonus += GetEffectInteger(eEffect, 0);
|
||||||
|
string s = "Found AC effect: bonus = " + IntToString(nMod) + ", type = " + IntToString(nType);
|
||||||
|
SendMessageToPC(GetFirstPC(), s);
|
||||||
|
}
|
||||||
|
eEffect = GetNextEffect(oCreature);
|
||||||
|
}
|
||||||
|
|
||||||
|
return nShieldBonus;
|
||||||
|
}*/
|
||||||
|
//
|
||||||
//:: Handles psuedo-Foritifcation
|
//:: Handles psuedo-Foritifcation
|
||||||
void DoFortification(object oPC = OBJECT_SELF, int nFortification = 25)
|
void DoFortification(object oPC = OBJECT_SELF, int nFortification = 25)
|
||||||
{
|
{
|
||||||
@@ -2275,7 +2389,7 @@ void DoFortification(object oPC = OBJECT_SELF, int nFortification = 25)
|
|||||||
IPSafeAddItemProperty(oHide, ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_BACKSTAB));
|
IPSafeAddItemProperty(oHide, ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_BACKSTAB));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
|
||||||
// wrapper for DecrementRemainingSpellUses, works for newspellbook 'fake' spells too
|
// wrapper for DecrementRemainingSpellUses, works for newspellbook 'fake' spells too
|
||||||
// should also find and decrement metamagics for newspellbooks
|
// should also find and decrement metamagics for newspellbooks
|
||||||
|
|||||||
@@ -70,11 +70,13 @@
|
|||||||
43 PRC_CRAFTING_BASE_ITEMS int 1
|
43 PRC_CRAFTING_BASE_ITEMS int 1
|
||||||
44 PRC_XP_USE_SIMPLE_LA int 1
|
44 PRC_XP_USE_SIMPLE_LA int 1
|
||||||
45 PRC_XP_USE_SIMPLE_RACIAL_HD 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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* This variable MUST be updated with every new version of the PRC!!! */
|
/* 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!!! */
|
/* This variable MUST be updated every time 'assemble_spellbooks.bat' is run!!! */
|
||||||
|
|
||||||
@@ -612,7 +614,7 @@ const string PRC_PSIONIC_SLAYER_REQUIRE_KILL_TOKEN = "PRC_PSIONIC_SLAYER_R
|
|||||||
* Values: 0 [Default] (Werewolf Hybrid Shapchange uses Bioware Polymorph)
|
* 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
|
* Sets the max bonus for the PnP Shifter shifting systems
|
||||||
@@ -1202,8 +1204,11 @@ const string PRC_SPELL_ALIGNMENT_RESTRICT = "PRC_SPELL_ALIGNMENT_REST
|
|||||||
*/
|
*/
|
||||||
const string PRC_APPEARNCE_CHANGE_DISABLE = "PRC_APPEARNCE_CHANGE_DISABLE";
|
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 *
|
* Death/Bleeding system *
|
||||||
@@ -1491,7 +1496,7 @@ const string PRC_POISON_ALLOW_CLEAN_IN_EQUIP = "PRC_POISON_ALLOW_CLEAN_I
|
|||||||
*
|
*
|
||||||
* Default: crafting requires only gold and xp
|
* 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 *
|
* PRGT system switches *
|
||||||
@@ -1906,7 +1911,7 @@ const string PRC_CRAFT_TIMER_MAX = "PRC_CRAFT_TIMER_MAX";
|
|||||||
*/
|
*/
|
||||||
const string PRC_CRAFT_TIMER_MIN = "PRC_CRAFT_TIMER_MIN";
|
const string PRC_CRAFT_TIMER_MIN = "PRC_CRAFT_TIMER_MIN";
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* These three switches modify Bioware crafting so that the items produced have the
|
* 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
|
* 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
|
* for a level 3 caster to produce level 9 items and for a level 40 caster to only produce
|
||||||
@@ -1952,6 +1957,23 @@ const string PRC_CRAFT_ROD_CASTER_LEVEL = "PRC_CRAFT_ROD_CASTER_LEVE
|
|||||||
*/
|
*/
|
||||||
const string PRC_CRAFT_STAFF_CASTER_LEVEL = "PRC_CRAFT_STAFF_CASTER_LEVEL";
|
const string PRC_CRAFT_STAFF_CASTER_LEVEL = "PRC_CRAFT_STAFF_CASTER_LEVEL";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* As above, except it applies to scepters
|
||||||
|
*/
|
||||||
|
const string PRC_CRAFT_SCEPTER_CASTER_LEVEL = "PRC_CRAFT_SCEPTER_CASTER_LEVEL";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Characters with a crafting feat always have the appropriate base item in their inventory
|
* Characters with a crafting feat always have the appropriate base item in their inventory
|
||||||
*/
|
*/
|
||||||
@@ -1961,45 +1983,59 @@ const string PRC_CRAFTING_BASE_ITEMS = "PRC_CRAFTING_BASE_ITEMS";
|
|||||||
* Max level of spells brewed into potions
|
* Max level of spells brewed into potions
|
||||||
* defaults to 3
|
* defaults to 3
|
||||||
*/
|
*/
|
||||||
const string X2_CI_BREWPOTION_MAXLEVEL = "X2_CI_BREWPOTION_MAXLEVEL";
|
//const string X2_CI_BREWPOTION_MAXLEVEL = "X2_CI_BREWPOTION_MAXLEVEL";
|
||||||
|
const string PRC_X2_BREWPOTION_MAXLEVEL = "PRC_X2_BREWPOTION_MAXLEVEL";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cost modifier of spells brewed into poitions
|
* cost modifier of spells brewed into poitions
|
||||||
* defaults to 50
|
* defaults to 50
|
||||||
*/
|
*/
|
||||||
const string X2_CI_BREWPOTION_COSTMODIFIER = "X2_CI_BREWPOTION_COSTMODIFIER";
|
const string PRC_X2_BREWPOTION_COSTMODIFIER = "PRC_X2_BREWPOTION_COSTMODIFIER";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cost modifier of spells scribed into scrolls
|
* cost modifier of spells scribed into scrolls
|
||||||
* defaults to 25
|
* defaults to 25
|
||||||
*/
|
*/
|
||||||
const string X2_CI_SCRIBESCROLL_COSTMODIFIER = "X2_CI_SCRIBESCROLL_COSTMODIFIER";
|
const string PRC_X2_SCRIBESCROLL_COSTMODIFIER = "PRC_X2_SCRIBESCROLL_COSTMODIFIER";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cost modifier of spells infused into herbs
|
||||||
|
* defaults to 25
|
||||||
|
*/
|
||||||
|
const string PRC_X2_CREATEINFUSION_COSTMODIFIER = "PRC_X2_CREATEINFUSION_COSTMODIFIER";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Max level of spells crafted into wands
|
* Max level of spells crafted into wands
|
||||||
* defaults to 4
|
* defaults to 4
|
||||||
*/
|
*/
|
||||||
const string X2_CI_CRAFTWAND_MAXLEVEL = "X2_CI_CRAFTWAND_MAXLEVEL";
|
const string PRC_X2_CRAFTWAND_MAXLEVEL = "PRC_X2_CRAFTWAND_MAXLEVEL";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cost modifier of spells crafted into wands
|
* cost modifier of spells crafted into wands
|
||||||
* defaults to 750
|
* defaults to 750
|
||||||
*/
|
*/
|
||||||
const string X2_CI_CRAFTWAND_COSTMODIFIER = "X2_CI_CRAFTWAND_COSTMODIFIER";
|
const string PRC_X2_CRAFTWAND_COSTMODIFIER = "PRC_X2_CRAFTWAND_COSTMODIFIER";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cost modifier of spells crafted into rods
|
* cost modifier of spells crafted into rods
|
||||||
* note that adding a second spell costs 75% and 3 or more costs 50%
|
* note that adding a second spell costs 75% and 3 or more costs 50%
|
||||||
* defaults to 750
|
* defaults to 750
|
||||||
*/
|
*/
|
||||||
const string X2_CI_CRAFTROD_COSTMODIFIER = "X2_CI_CRAFTROD_COSTMODIFIER";
|
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
|
* cost modifier of spells crafted into staffs
|
||||||
* note that adding a second spell costs 75% and 3 or more costs 50%
|
* note that adding a second spell costs 75% and 3 or more costs 50%
|
||||||
* defaults to 750
|
* defaults to 750
|
||||||
*/
|
*/
|
||||||
const string X2_CI_CRAFTSTAFF_COSTMODIFIER = "X2_CI_CRAFTSTAFF_COSTMODIFIER";
|
const string PRC_X2_CRAFTSTAFF_COSTMODIFIER = "PRC_X2_CRAFTSTAFF_COSTMODIFIER";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows the use of arbitrary itemproperties and uses NWN item costs
|
* Allows the use of arbitrary itemproperties and uses NWN item costs
|
||||||
@@ -2920,6 +2956,20 @@ const string PRC_PW_SECURITY_CD_CHECK = "PRC_PW_SECURITY_CD_CHECK";
|
|||||||
*/
|
*/
|
||||||
const string PRC_DEBUG = "PRC_DEBUG";
|
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";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -10,21 +10,12 @@
|
|||||||
//:://////////////////////////////////////////////
|
//:://////////////////////////////////////////////
|
||||||
//:://////////////////////////////////////////////
|
//:://////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "prc_spell_const"
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Function prototypes */
|
/* Function prototypes */
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//gets the number of class levels that count for turning
|
//gets the number of class levels that count for turning
|
||||||
int GetTurningClassLevel(object oCaster = OBJECT_SELF, int nTurnType = SPELL_TURN_UNDEAD);
|
int GetTurningClassLevel(object oCaster = OBJECT_SELF, int nTurnType = SPELL_TURN_UNDEAD);
|
||||||
|
|
||||||
@@ -189,6 +180,20 @@ int GetIsTurnOrRebuke(object oTarget, int nTurnType, int nTargetRace)
|
|||||||
if(nTargetRace == RACIAL_TYPE_OOZE)
|
if(nTargetRace == RACIAL_TYPE_OOZE)
|
||||||
nReturn = ACTION_REBUKE;
|
nReturn = ACTION_REBUKE;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SPELL_PLANT_DEFIANCE:
|
||||||
|
{
|
||||||
|
if(nTargetRace == RACIAL_TYPE_PLANT)
|
||||||
|
nReturn = ACTION_TURN;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SPELL_PLANT_CONTROL:
|
||||||
|
{
|
||||||
|
if(nTargetRace == RACIAL_TYPE_PLANT)
|
||||||
|
nReturn = ACTION_REBUKE;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SPELL_TURN_PLANT:
|
case SPELL_TURN_PLANT:
|
||||||
@@ -384,6 +389,13 @@ int GetTurningClassLevel(object oCaster = OBJECT_SELF, int nTurnType = SPELL_TUR
|
|||||||
if (nTurnType == SPELL_OPPORTUNISTIC_PIETY_TURN)
|
if (nTurnType == SPELL_OPPORTUNISTIC_PIETY_TURN)
|
||||||
return GetLevelByClass(CLASS_TYPE_FACTOTUM, oCaster);
|
return GetLevelByClass(CLASS_TYPE_FACTOTUM, oCaster);
|
||||||
|
|
||||||
|
if (nTurnType == SPELL_PLANT_DEFIANCE || nTurnType == SPELL_PLANT_CONTROL)
|
||||||
|
{
|
||||||
|
int nDivineLvl = GetPrCAdjustedCasterLevelByType(TYPE_DIVINE, oCaster);
|
||||||
|
|
||||||
|
return nDivineLvl;
|
||||||
|
}
|
||||||
|
|
||||||
//Baelnorn & Archlich adds all class levels.
|
//Baelnorn & Archlich adds all class levels.
|
||||||
if(GetLevelByClass(CLASS_TYPE_BAELNORN, oCaster) || GetHasFeat(FEAT_TEMPLATE_ARCHLICH_MARKER, oCaster)) //:: Archlich
|
if(GetLevelByClass(CLASS_TYPE_BAELNORN, oCaster) || GetHasFeat(FEAT_TEMPLATE_ARCHLICH_MARKER, oCaster)) //:: Archlich
|
||||||
nLevel = GetHitDice(oCaster);
|
nLevel = GetHitDice(oCaster);
|
||||||
|
|||||||
@@ -91,6 +91,107 @@ float DamageAvg(int iDamage);
|
|||||||
/* Function defintions */
|
/* Function defintions */
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// StepDie: increases a damage die by 'nSteps' steps according to d20 SRD progression
|
||||||
|
// Increment the unarmed damage by nSteps
|
||||||
|
int StepDie(int nDamage, int nSteps)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < nSteps; i++)
|
||||||
|
{
|
||||||
|
switch (nDamage)
|
||||||
|
{
|
||||||
|
// 1-dice increments
|
||||||
|
case IP_CONST_MONSTERDAMAGE_1d2: nDamage = IP_CONST_MONSTERDAMAGE_1d3; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_1d3: nDamage = IP_CONST_MONSTERDAMAGE_1d4; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_1d4: nDamage = IP_CONST_MONSTERDAMAGE_1d6; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_1d6: nDamage = IP_CONST_MONSTERDAMAGE_1d8; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_1d8: nDamage = IP_CONST_MONSTERDAMAGE_1d10; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_1d10: nDamage = IP_CONST_MONSTERDAMAGE_1d12; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_1d12: nDamage = IP_CONST_MONSTERDAMAGE_2d8; break;
|
||||||
|
|
||||||
|
// 2-dice increments
|
||||||
|
//case IP_CONST_MONSTERDAMAGE_2d3: nDamage = IP_CONST_MONSTERDAMAGE_2d4; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_2d4: nDamage = IP_CONST_MONSTERDAMAGE_2d6; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_2d6: nDamage = IP_CONST_MONSTERDAMAGE_2d8; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_2d8: nDamage = IP_CONST_MONSTERDAMAGE_2d10; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_2d10: nDamage = IP_CONST_MONSTERDAMAGE_2d12; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_2d12: nDamage = IP_CONST_MONSTERDAMAGE_3d10; break;
|
||||||
|
|
||||||
|
// 3-dice increments
|
||||||
|
case IP_CONST_MONSTERDAMAGE_3d4: nDamage = IP_CONST_MONSTERDAMAGE_3d6; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_3d6: nDamage = IP_CONST_MONSTERDAMAGE_3d8; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_3d8: nDamage = IP_CONST_MONSTERDAMAGE_3d10; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_3d10: nDamage = IP_CONST_MONSTERDAMAGE_3d12; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_3d12: nDamage = IP_CONST_MONSTERDAMAGE_4d8; break;
|
||||||
|
|
||||||
|
// 4-dice increments
|
||||||
|
case IP_CONST_MONSTERDAMAGE_4d4: nDamage = IP_CONST_MONSTERDAMAGE_4d6; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_4d6: nDamage = IP_CONST_MONSTERDAMAGE_4d8; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_4d8: nDamage = IP_CONST_MONSTERDAMAGE_4d10; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_4d10: nDamage = IP_CONST_MONSTERDAMAGE_4d12; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_4d12: nDamage = IP_CONST_MONSTERDAMAGE_5d8; break;
|
||||||
|
|
||||||
|
// 5-dice increments
|
||||||
|
case IP_CONST_MONSTERDAMAGE_5d4: nDamage = IP_CONST_MONSTERDAMAGE_5d6; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_5d6: nDamage = IP_CONST_MONSTERDAMAGE_5d8; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_5d8: nDamage = IP_CONST_MONSTERDAMAGE_5d10; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_5d10: nDamage = IP_CONST_MONSTERDAMAGE_5d12; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_5d12: nDamage = IP_CONST_MONSTERDAMAGE_6d10; break;
|
||||||
|
|
||||||
|
// 6-dice increments
|
||||||
|
//case IP_CONST_MONSTERDAMAGE_6d4: nDamage = IP_CONST_MONSTERDAMAGE_6d6; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_6d6: nDamage = IP_CONST_MONSTERDAMAGE_6d8; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_6d8: nDamage = IP_CONST_MONSTERDAMAGE_6d10; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_6d10: nDamage = IP_CONST_MONSTERDAMAGE_6d12; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_6d12: nDamage = IP_CONST_MONSTERDAMAGE_7d10; break;
|
||||||
|
|
||||||
|
// 7-dice increments
|
||||||
|
case IP_CONST_MONSTERDAMAGE_7d4: nDamage = IP_CONST_MONSTERDAMAGE_7d6; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_7d6: nDamage = IP_CONST_MONSTERDAMAGE_7d8; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_7d8: nDamage = IP_CONST_MONSTERDAMAGE_7d10; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_7d10: nDamage = IP_CONST_MONSTERDAMAGE_7d12; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_7d12: nDamage = IP_CONST_MONSTERDAMAGE_9d10; break;
|
||||||
|
|
||||||
|
// 8-dice increments
|
||||||
|
//case IP_CONST_MONSTERDAMAGE_8d4: nDamage = IP_CONST_MONSTERDAMAGE_8d6; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_8d6: nDamage = IP_CONST_MONSTERDAMAGE_8d8; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_8d8: nDamage = IP_CONST_MONSTERDAMAGE_8d10; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_8d10: nDamage = IP_CONST_MONSTERDAMAGE_8d12; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_8d12: nDamage = IP_CONST_MONSTERDAMAGE_10d10; break;
|
||||||
|
|
||||||
|
// 9-dice increments
|
||||||
|
//case IP_CONST_MONSTERDAMAGE_9d4: nDamage = IP_CONST_MONSTERDAMAGE_9d6; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_9d6: nDamage = IP_CONST_MONSTERDAMAGE_9d8; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_9d8: nDamage = IP_CONST_MONSTERDAMAGE_9d10; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_9d10: nDamage = IP_CONST_MONSTERDAMAGE_9d12; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_9d12: nDamage = IP_CONST_MONSTERDAMAGE_6d20; break;
|
||||||
|
|
||||||
|
// 10-dice increments
|
||||||
|
//case IP_CONST_MONSTERDAMAGE_10d4: nDamage = IP_CONST_MONSTERDAMAGE_10d6; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_10d6: nDamage = IP_CONST_MONSTERDAMAGE_10d8; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_10d8: nDamage = IP_CONST_MONSTERDAMAGE_10d10; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_10d10: nDamage = IP_CONST_MONSTERDAMAGE_10d12; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_10d12: nDamage = IP_CONST_MONSTERDAMAGE_7d20; break;
|
||||||
|
|
||||||
|
// d20 increments
|
||||||
|
case IP_CONST_MONSTERDAMAGE_1d20: nDamage = IP_CONST_MONSTERDAMAGE_3d8; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_2d20: nDamage = IP_CONST_MONSTERDAMAGE_4d12; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_3d20: nDamage = IP_CONST_MONSTERDAMAGE_8d8; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_4d20: nDamage = IP_CONST_MONSTERDAMAGE_8d12; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_5d20: nDamage = IP_CONST_MONSTERDAMAGE_9d12; break; //:: Everything breaks down here
|
||||||
|
case IP_CONST_MONSTERDAMAGE_6d20: nDamage = IP_CONST_MONSTERDAMAGE_1d20; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_7d20: nDamage = IP_CONST_MONSTERDAMAGE_8d20; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_8d20: nDamage = IP_CONST_MONSTERDAMAGE_9d20; break;
|
||||||
|
case IP_CONST_MONSTERDAMAGE_9d20: nDamage = IP_CONST_MONSTERDAMAGE_10d20; break;
|
||||||
|
|
||||||
|
default: break; // top tier or unknown
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nDamage;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Clean up any extras in the inventory.
|
// Clean up any extras in the inventory.
|
||||||
void CleanExtraFists(object oCreature)
|
void CleanExtraFists(object oCreature)
|
||||||
{
|
{
|
||||||
@@ -168,12 +269,169 @@ void ApplyUnarmedAttackEffects(object oCreature)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Determines the amount of damage a character can do.
|
// Determines the amount of damage a character can do.
|
||||||
// IoDM: +1 dice at level 4, +2 dice at level 8
|
// IoDM: +1 die at level 4, +2 dice at level 8
|
||||||
// Sacred Fist: Levels add to monk levels, or stand alone as monk levels.
|
// Sacred Fist: Levels add to monk levels, or stand alone as monk levels.
|
||||||
// Shou: 1d6 at level 1, 1d8 at level 2, 1d10 at level 3, 2d6 at level 5
|
// Shou: 1d6 at level 1, 1d8 at level 2, 1d10 at level 3, 2d6 at level 5
|
||||||
// Monk: 1d6 at level 1, 1d8 at level 4, 1d10 at level 8, 2d6 at level 12, 2d8 at level 16, 2d10 at level 20
|
// Monk: 1d6 at level 1, 1d8 at level 4, 1d10 at level 8, 2d6 at level 12, 2d8 at level 16, 2d10 at level 20
|
||||||
// Frostrager: 1d6 at level 1, 1d8 at level 4
|
// Frostrager: 1d6 at level 1, 1d8 at level 4
|
||||||
int FindUnarmedDamage(object oCreature)
|
int FindUnarmedDamage(object oCreature)
|
||||||
|
{
|
||||||
|
int iDamage = 0;
|
||||||
|
int iMonk = GetLevelByClass(CLASS_TYPE_MONK, oCreature) + GetLocalInt(oCreature, "LiPengMonk");
|
||||||
|
int iShou = GetLevelByClass(CLASS_TYPE_SHOU, oCreature);
|
||||||
|
int iBrawler = GetLevelByClass(CLASS_TYPE_BRAWLER, oCreature);
|
||||||
|
int iSacredFist = GetLevelByClass(CLASS_TYPE_SACREDFIST, oCreature);
|
||||||
|
int iEnlightenedFist = GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCreature);
|
||||||
|
int iHenshin = GetLevelByClass(CLASS_TYPE_HENSHIN_MYSTIC, oCreature);
|
||||||
|
int iZuoken = GetLevelByClass(CLASS_TYPE_FIST_OF_ZUOKEN, oCreature);
|
||||||
|
int iShadowSunNinja = GetLevelByClass(CLASS_TYPE_SHADOW_SUN_NINJA, oCreature);
|
||||||
|
int iFrost = GetLevelByClass(CLASS_TYPE_FROSTRAGER, oCreature);
|
||||||
|
int iAscetic = GetLevelByClass(CLASS_TYPE_NINJA, oCreature);
|
||||||
|
int iRonove = 0;
|
||||||
|
int iMonkDamage = 1;
|
||||||
|
int iShouDamage = 1;
|
||||||
|
int iBrawlerDamage = 1;
|
||||||
|
int iFrostDamage = 1;
|
||||||
|
int iSUSDamage = 1;
|
||||||
|
int iDieIncrease = 0;
|
||||||
|
int iSize;
|
||||||
|
|
||||||
|
if (GetHasSpellEffect(VESTIGE_RONOVE, oCreature) && GetLevelByClass(CLASS_TYPE_BINDER, oCreature))
|
||||||
|
iRonove = GetLocalInt(oCreature, "RonovesFists");
|
||||||
|
|
||||||
|
//:: Determine creature size
|
||||||
|
if( GetIsPolyMorphedOrShifted(oCreature) || GetPRCSwitch(PRC_APPEARANCE_SIZE))
|
||||||
|
{
|
||||||
|
iSize = PRCGetCreatureSize(oCreature) - CREATURE_SIZE_MEDIUM + 5;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
iSize = 5; // medium
|
||||||
|
if (GetHasFeat(FEAT_TINY, oCreature)) iSize = 3;
|
||||||
|
if (GetHasFeat(FEAT_SMALL, oCreature)) iSize = 4;
|
||||||
|
if (GetHasFeat(FEAT_LARGE, oCreature)) iSize = 6;
|
||||||
|
if (GetHasFeat(FEAT_HUGE, oCreature)) iSize = 7;
|
||||||
|
iSize += PRCGetCreatureSize(oCreature) - PRCGetCreatureSize(oCreature, PRC_SIZEMASK_NONE);
|
||||||
|
if (iSize < 1) iSize = 1;
|
||||||
|
if (iSize > 9) iSize = 9;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sacred Fist code break protection
|
||||||
|
if (GetHasFeat(FEAT_SF_CODE, oCreature)) iSacredFist = 0;
|
||||||
|
|
||||||
|
// Combine monk-like levels
|
||||||
|
iMonk += iSacredFist + iHenshin + iEnlightenedFist + iShou + iZuoken + iShadowSunNinja;
|
||||||
|
|
||||||
|
// Superior Unarmed Strike
|
||||||
|
if (GetHasFeat(FEAT_SUPERIOR_UNARMED_STRIKE, oCreature))
|
||||||
|
{
|
||||||
|
iMonk += 4;
|
||||||
|
int nHD = GetHitDice(oCreature);
|
||||||
|
if (nHD >= 16) iSUSDamage = IP_CONST_MONSTERDAMAGE_2d6;
|
||||||
|
else if (nHD >= 12) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d10;
|
||||||
|
else if (nHD >= 8) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d8;
|
||||||
|
else if (nHD >= 4) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d6;
|
||||||
|
else if (nHD >= 3) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d4;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ascetic Stalker
|
||||||
|
if (GetHasFeat(FEAT_ASCETIC_STALKER, oCreature))
|
||||||
|
iMonk += iAscetic;
|
||||||
|
|
||||||
|
// Cap monk progression
|
||||||
|
if (iMonk > 16 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE)) iMonk = 16;
|
||||||
|
else if (iMonk > 20) iMonk = 20;
|
||||||
|
|
||||||
|
// Ronove replacement
|
||||||
|
if (iRonove > iMonk) iMonk = iRonove;
|
||||||
|
|
||||||
|
// Monk damage calculation (2DA row)
|
||||||
|
if (iMonk > 0) iMonkDamage = iMonk / 4 + 3;
|
||||||
|
if (iSize == 5 && iMonkDamage == 7 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE))
|
||||||
|
iMonkDamage = 8;
|
||||||
|
|
||||||
|
// Shou Disciple base damage
|
||||||
|
if (iShou > 0)
|
||||||
|
{
|
||||||
|
int nRow;
|
||||||
|
if (iShou == 1) nRow = 3;
|
||||||
|
else if (iShou == 2) nRow = 4;
|
||||||
|
else if (iShou == 3) nRow = 5;
|
||||||
|
else if (iShou == 4) nRow = 5;
|
||||||
|
else if (iShou == 5) nRow = 6;
|
||||||
|
else nRow = 3;
|
||||||
|
|
||||||
|
if (nRow > 6) nRow = 6;
|
||||||
|
|
||||||
|
iShouDamage = StringToInt(Get2DACache("unarmed_dmg", "size" + IntToString(iSize), nRow));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Frostrager
|
||||||
|
if (iFrost > 0) iFrostDamage = IP_CONST_MONSTERDAMAGE_1d6;
|
||||||
|
if (iFrost > 3) iFrostDamage = IP_CONST_MONSTERDAMAGE_1d8;
|
||||||
|
|
||||||
|
// Brawler
|
||||||
|
if (iBrawler > 0) iBrawlerDamage = iBrawler / 6 + 3;
|
||||||
|
if (iBrawler >= 36) iBrawlerDamage += 2;
|
||||||
|
|
||||||
|
// Armor/shield penalties
|
||||||
|
if (iMonkDamage > 1)
|
||||||
|
{
|
||||||
|
object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oCreature);
|
||||||
|
object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCreature);
|
||||||
|
int bShieldEq = GetBaseItemType(oShield) == BASE_ITEM_SMALLSHIELD ||
|
||||||
|
GetBaseItemType(oShield) == BASE_ITEM_LARGESHIELD ||
|
||||||
|
GetBaseItemType(oShield) == BASE_ITEM_TOWERSHIELD;
|
||||||
|
if (GetBaseAC(oArmor) > 0 || bShieldEq)
|
||||||
|
iMonkDamage = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (iShouDamage > 1)
|
||||||
|
{
|
||||||
|
object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oCreature);
|
||||||
|
object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCreature);
|
||||||
|
int bShieldEq = GetBaseItemType(oShield) == BASE_ITEM_SMALLSHIELD ||
|
||||||
|
GetBaseItemType(oShield) == BASE_ITEM_LARGESHIELD ||
|
||||||
|
GetBaseItemType(oShield) == BASE_ITEM_TOWERSHIELD;
|
||||||
|
if (GetBaseAC(oArmor) > 3 || bShieldEq)
|
||||||
|
iShouDamage = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine IoDM die increase
|
||||||
|
if (GetHasFeat(FEAT_INCREASE_DAMAGE2, oCreature)) iDieIncrease = 2;
|
||||||
|
else if (GetHasFeat(FEAT_INCREASE_DAMAGE1, oCreature)) iDieIncrease = 1;
|
||||||
|
|
||||||
|
// Lookup monk damage in 2DA
|
||||||
|
iMonkDamage = StringToInt(Get2DACache("unarmed_dmg","size" + IntToString(iSize), iMonkDamage));
|
||||||
|
|
||||||
|
// 3.0e monk special cases
|
||||||
|
if (iSize <= 5 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE))
|
||||||
|
{
|
||||||
|
if (iMonkDamage == IP_CONST_MONSTERDAMAGE_2d6) iMonkDamage = IP_CONST_MONSTERDAMAGE_1d12;
|
||||||
|
if (iMonkDamage == IP_CONST_MONSTERDAMAGE_2d10) iMonkDamage = IP_CONST_MONSTERDAMAGE_1d20;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply IoDM die increase last, after 2DA lookups
|
||||||
|
if (iMonkDamage > 0) iMonkDamage = StepDie(iMonkDamage, iDieIncrease);
|
||||||
|
if (iShouDamage > 0) iShouDamage = StepDie(iShouDamage, iDieIncrease);
|
||||||
|
if (iBrawlerDamage > 0) iBrawlerDamage = StepDie(iBrawlerDamage, iDieIncrease);
|
||||||
|
if (iFrostDamage > 0) iFrostDamage = StepDie(iFrostDamage, iDieIncrease);
|
||||||
|
if (iSUSDamage > 0) iSUSDamage = StepDie(iSUSDamage, iDieIncrease);
|
||||||
|
|
||||||
|
// Select best damage
|
||||||
|
iDamage = iMonkDamage;
|
||||||
|
iDamage = (DamageAvg(iShouDamage ) > DamageAvg(iDamage)) ? iShouDamage : iDamage;
|
||||||
|
iDamage = (DamageAvg(iFrostDamage ) > DamageAvg(iDamage)) ? iFrostDamage : iDamage;
|
||||||
|
iDamage = (DamageAvg(iSUSDamage ) > DamageAvg(iDamage)) ? iSUSDamage : iDamage;
|
||||||
|
iDamage = (DamageAvg(iBrawlerDamage) > DamageAvg(iDamage)) ? iBrawlerDamage : iDamage;
|
||||||
|
|
||||||
|
if (DEBUG) DoDebug("prc_inc_unarmed: iDamage "+IntToString(iDamage));
|
||||||
|
|
||||||
|
return iDamage;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* int FindUnarmedDamage(object oCreature)
|
||||||
{
|
{
|
||||||
int iDamage = 0;
|
int iDamage = 0;
|
||||||
int iMonk = GetLevelByClass(CLASS_TYPE_MONK, oCreature) + GetLocalInt(oCreature, "LiPengMonk");
|
int iMonk = GetLevelByClass(CLASS_TYPE_MONK, oCreature) + GetLocalInt(oCreature, "LiPengMonk");
|
||||||
@@ -195,36 +453,30 @@ int FindUnarmedDamage(object oCreature)
|
|||||||
int iDieIncrease = 0;
|
int iDieIncrease = 0;
|
||||||
int iSize;
|
int iSize;
|
||||||
|
|
||||||
if (GetHasSpellEffect(VESTIGE_RONOVE, oCreature) && GetLevelByClass(CLASS_TYPE_BINDER, oCreature)) iRonove = GetLocalInt(oCreature, "RonovesFists");
|
if (GetHasSpellEffect(VESTIGE_RONOVE, oCreature) && GetLevelByClass(CLASS_TYPE_BINDER, oCreature))
|
||||||
|
iRonove = GetLocalInt(oCreature, "RonovesFists");
|
||||||
|
|
||||||
// if the creature is shifted, use model size
|
// Determine creature size
|
||||||
// otherwise, we want to stick to what the feats say they "should" be.
|
if( GetIsPolyMorphedOrShifted(oCreature) || GetPRCSwitch(PRC_APPEARANCE_SIZE))
|
||||||
// No making pixies with Dragon Appearance for "huge" fist damage.
|
|
||||||
if( GetIsPolyMorphedOrShifted(oCreature)
|
|
||||||
|| GetPRCSwitch(PRC_APPEARANCE_SIZE))
|
|
||||||
{
|
{
|
||||||
iSize = PRCGetCreatureSize(oCreature) - CREATURE_SIZE_MEDIUM + 5; // medium is size 5 for us
|
iSize = PRCGetCreatureSize(oCreature) - CREATURE_SIZE_MEDIUM + 5;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Determine creature size by feats.
|
iSize = 5; // medium
|
||||||
iSize = 5; // medium is size 5 for us
|
|
||||||
if (GetHasFeat(FEAT_TINY, oCreature)) iSize = 3;
|
if (GetHasFeat(FEAT_TINY, oCreature)) iSize = 3;
|
||||||
if (GetHasFeat(FEAT_SMALL, oCreature)) iSize = 4;
|
if (GetHasFeat(FEAT_SMALL, oCreature)) iSize = 4;
|
||||||
if (GetHasFeat(FEAT_LARGE, oCreature)) iSize = 6;
|
if (GetHasFeat(FEAT_LARGE, oCreature)) iSize = 6;
|
||||||
if (GetHasFeat(FEAT_HUGE, oCreature)) iSize = 7;
|
if (GetHasFeat(FEAT_HUGE, oCreature)) iSize = 7;
|
||||||
// include size changes
|
|
||||||
iSize += PRCGetCreatureSize(oCreature) - PRCGetCreatureSize(oCreature, PRC_SIZEMASK_NONE);
|
iSize += PRCGetCreatureSize(oCreature) - PRCGetCreatureSize(oCreature, PRC_SIZEMASK_NONE);
|
||||||
// cap if needed
|
|
||||||
if (iSize < 1) iSize = 1;
|
if (iSize < 1) iSize = 1;
|
||||||
if (iSize > 9) iSize = 9;
|
if (iSize > 9) iSize = 9;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sacred Fist cannot add their levels if they've broken their code.
|
// Sacred Fist code break protection
|
||||||
if (GetHasFeat(FEAT_SF_CODE, oCreature)) iSacredFist = 0;
|
if (GetHasFeat(FEAT_SF_CODE, oCreature)) iSacredFist = 0;
|
||||||
|
|
||||||
// several classes add their levels to the monk class,
|
// Combine monk-like levels
|
||||||
// or use monk progression if the character has no monk levels
|
|
||||||
iMonk += iSacredFist + iHenshin + iEnlightenedFist + iShou + iZuoken + iShadowSunNinja;
|
iMonk += iSacredFist + iHenshin + iEnlightenedFist + iShou + iZuoken + iShadowSunNinja;
|
||||||
|
|
||||||
// Superior Unarmed Strike
|
// Superior Unarmed Strike
|
||||||
@@ -243,38 +495,55 @@ int FindUnarmedDamage(object oCreature)
|
|||||||
if (GetHasFeat(FEAT_ASCETIC_STALKER, oCreature))
|
if (GetHasFeat(FEAT_ASCETIC_STALKER, oCreature))
|
||||||
iMonk += iAscetic;
|
iMonk += iAscetic;
|
||||||
|
|
||||||
// In 3.0e, Monk progression stops after level 16:
|
// Cap monk progression
|
||||||
if (iMonk > 16 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE) ) iMonk = 16;
|
if (iMonk > 16 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE)) iMonk = 16;
|
||||||
// in 3.5e, monk progression stops at 20.
|
else if (iMonk > 20) iMonk = 20;
|
||||||
else if(iMonk > 20) iMonk = 20;
|
|
||||||
|
|
||||||
// Ronove is in place of monk, does not stack
|
// Ronove replacement
|
||||||
if (iRonove > iMonk) iMonk = iRonove;
|
if (iRonove > iMonk) iMonk = iRonove;
|
||||||
|
|
||||||
// monks damage progesses every four levels, starts at 1d6
|
// Monk damage calculation
|
||||||
if (iMonk > 0)
|
if (iMonk > 0) iMonkDamage = iMonk / 4 + 3;
|
||||||
iMonkDamage = iMonk / 4 + 3;
|
|
||||||
|
|
||||||
// For medium monks in 3.0e skip 2d8 and go to 1d20
|
if(iSize == 5 && iMonkDamage == 7 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE))
|
||||||
if(iSize == 5 && iMonkDamage == 7 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE) ) iMonkDamage = 8;
|
iMonkDamage = 8;
|
||||||
|
|
||||||
// Shou Disciple either adds its level to existing class or does its own damage, depending
|
// Shou Disciple either adds its level to existing class or does its own damage, depending
|
||||||
// on which is better. Here we will determine how much damage the Shou Disciple does
|
// on which is better. Here we will determine how much damage the Shou Disciple does
|
||||||
// without stacking.
|
// without stacking.
|
||||||
if (iShou > 0) iShouDamage = iShou + 2; // Lv. 1: 1d6, Lv. 2: 1d8, Lv. 3: 1d10
|
//if (iShou > 0) iShouDamage = iShou + 2; // Lv. 1: 1d6, Lv. 2: 1d8, Lv. 3: 1d10
|
||||||
if (iShou > 3) iShouDamage--; // Lv. 4: 1d10, Lv. 5: 2d6
|
//if (iShou > 3) iShouDamage--; // Lv. 4: 1d10, Lv. 5: 2d6
|
||||||
iShouDamage = StringToInt(Get2DACache("unarmed_dmg","size" + IntToString(iSize), iShouDamage));
|
//iShouDamage = StringToInt(Get2DACache("unarmed_dmg","size" + IntToString(iSize), iShouDamage));
|
||||||
|
|
||||||
// Frostrager does not stack with other damage types
|
if (iShou > 0)
|
||||||
if (iFrost > 0) iFrostDamage = IP_CONST_MONSTERDAMAGE_1d6; // Lv. 1: 1d6
|
{
|
||||||
if (iFrost > 3) iFrostDamage = IP_CONST_MONSTERDAMAGE_1d8; // Lv. 3: 1d8
|
// Determine 2DA row for Shou progression
|
||||||
|
int nRow;
|
||||||
|
if (iShou == 1) nRow = 3; // monk1
|
||||||
|
else if (iShou == 2) nRow = 4; // monk2
|
||||||
|
else if (iShou == 3) nRow = 5; // monk3
|
||||||
|
else if (iShou == 4) nRow = 6; // monk4
|
||||||
|
else if (iShou == 5) nRow = 7; // monk5
|
||||||
|
else if (iShou == 6) nRow = 8; // monk6
|
||||||
|
else if (iShou == 7) nRow = 9; // monk7
|
||||||
|
else nRow = 10; // monk8+
|
||||||
|
|
||||||
// Brawler follows monk progression except for the last one (3d8)
|
nRow += iDieIncrease;
|
||||||
if (iBrawler > 0) iBrawlerDamage = iBrawler / 6 + 3; // 1d6, 1d8, 1d10, 2d6, 2d8, 2d10
|
if (nRow > 10) nRow = 10; // clamp to max row
|
||||||
if (iBrawler >= 36) iBrawlerDamage += 2; // 3d8
|
|
||||||
|
|
||||||
// Monks and monk-like classes deal no additional damage when wearing any armor, at
|
// Lookup damage in unarmed_damage.2da using size column
|
||||||
// least in NWN. This is to reflect that. No shields too.
|
iShouDamage = StringToInt(Get2DACache("unarmed_dmg","size" + IntToString(iSize), nRow));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Frostrager
|
||||||
|
if (iFrost > 0) iFrostDamage = IP_CONST_MONSTERDAMAGE_1d6;
|
||||||
|
if (iFrost > 3) iFrostDamage = IP_CONST_MONSTERDAMAGE_1d8;
|
||||||
|
|
||||||
|
// Brawler
|
||||||
|
if (iBrawler > 0) iBrawlerDamage = iBrawler / 6 + 3;
|
||||||
|
if (iBrawler >= 36) iBrawlerDamage += 2;
|
||||||
|
|
||||||
|
// Armor/shield penalties
|
||||||
if (iMonkDamage > 1)
|
if (iMonkDamage > 1)
|
||||||
{
|
{
|
||||||
object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oCreature);
|
object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oCreature);
|
||||||
@@ -284,12 +553,9 @@ int FindUnarmedDamage(object oCreature)
|
|||||||
GetBaseItemType(oShield) == BASE_ITEM_TOWERSHIELD;
|
GetBaseItemType(oShield) == BASE_ITEM_TOWERSHIELD;
|
||||||
|
|
||||||
if (GetBaseAC(oArmor) > 0 || bShieldEq)
|
if (GetBaseAC(oArmor) > 0 || bShieldEq)
|
||||||
{
|
|
||||||
iMonkDamage = 1;
|
iMonkDamage = 1;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Shou Disciples can wear light armor
|
|
||||||
if (iShouDamage > 1)
|
if (iShouDamage > 1)
|
||||||
{
|
{
|
||||||
object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oCreature);
|
object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oCreature);
|
||||||
@@ -299,28 +565,12 @@ int FindUnarmedDamage(object oCreature)
|
|||||||
GetBaseItemType(oShield) == BASE_ITEM_TOWERSHIELD;
|
GetBaseItemType(oShield) == BASE_ITEM_TOWERSHIELD;
|
||||||
|
|
||||||
if (GetBaseAC(oArmor) > 3 || bShieldEq)
|
if (GetBaseAC(oArmor) > 3 || bShieldEq)
|
||||||
{
|
|
||||||
iShouDamage = 1;
|
iShouDamage = 1;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// For Initiate of Draconic Mysteries
|
// IoDM die increase
|
||||||
if (GetHasFeat(FEAT_INCREASE_DAMAGE2, oCreature)) iDieIncrease = 2;
|
if (GetHasFeat(FEAT_INCREASE_DAMAGE2, oCreature)) iDieIncrease += 2;
|
||||||
else if (GetHasFeat(FEAT_INCREASE_DAMAGE1, oCreature)) iDieIncrease = 1;
|
else if (GetHasFeat(FEAT_INCREASE_DAMAGE1, oCreature)) iDieIncrease += 1;
|
||||||
|
|
||||||
//:: Expansion / Compression powers
|
|
||||||
int nExpansion = GetLocalInt(oCreature, "PRC_Power_Expansion_SizeIncrease");
|
|
||||||
int nCompression = GetLocalInt(oCreature, "PRC_Power_Compression_SizeReduction");
|
|
||||||
|
|
||||||
if (nExpansion)
|
|
||||||
{
|
|
||||||
iSize += nExpansion;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nCompression)
|
|
||||||
{
|
|
||||||
iSize -= nCompression;
|
|
||||||
}
|
|
||||||
|
|
||||||
iMonkDamage += iDieIncrease;
|
iMonkDamage += iDieIncrease;
|
||||||
iShouDamage += iDieIncrease;
|
iShouDamage += iDieIncrease;
|
||||||
@@ -328,24 +578,18 @@ int FindUnarmedDamage(object oCreature)
|
|||||||
iFrostDamage += iDieIncrease;
|
iFrostDamage += iDieIncrease;
|
||||||
iSUSDamage += iDieIncrease;
|
iSUSDamage += iDieIncrease;
|
||||||
|
|
||||||
//FloatingTextStringOnCreature("prc_inc_unarmed: Size is: "+IntToString(iSize)+".", oCreature);
|
// Lookup final monk damage in 2DA
|
||||||
//FloatingTextStringOnCreature("prc_inc_unarmed: Pre 2DA Lookup >> iMonkDamage = "+IntToString(iMonkDamage)+".", oCreature);
|
|
||||||
|
|
||||||
// now, read the damage from the table in unarmed_dmg.2da
|
|
||||||
iMonkDamage = StringToInt(Get2DACache("unarmed_dmg","size" + IntToString(iSize), iMonkDamage));
|
iMonkDamage = StringToInt(Get2DACache("unarmed_dmg","size" + IntToString(iSize), iMonkDamage));
|
||||||
iShouDamage = StringToInt(Get2DACache("unarmed_dmg","size" + IntToString(iSize), iShouDamage));
|
|
||||||
|
|
||||||
//FloatingTextStringOnCreature("prc_inc_unarmed: Post 2DA Lookup >> iMonkDamage = "+IntToString(iMonkDamage)+".", oCreature);
|
// 3.0e monk special cases
|
||||||
|
|
||||||
// Medium+ monks have some special values on the table in 3.0:
|
|
||||||
if (iSize >= 5 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE))
|
if (iSize >= 5 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE))
|
||||||
{
|
{
|
||||||
if (iMonkDamage == IP_CONST_MONSTERDAMAGE_2d6) iMonkDamage = IP_CONST_MONSTERDAMAGE_1d12;
|
if (iMonkDamage == IP_CONST_MONSTERDAMAGE_2d6) iMonkDamage = IP_CONST_MONSTERDAMAGE_1d12;
|
||||||
if (iMonkDamage == IP_CONST_MONSTERDAMAGE_2d10) iMonkDamage = IP_CONST_MONSTERDAMAGE_1d20;
|
if (iMonkDamage == IP_CONST_MONSTERDAMAGE_2d10) iMonkDamage = IP_CONST_MONSTERDAMAGE_1d20;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Select best damage
|
||||||
iDamage = iMonkDamage;
|
iDamage = iMonkDamage;
|
||||||
// Future unarmed classes: if you do your own damage, add in "comparisons" below here.
|
|
||||||
iDamage = (DamageAvg(iShouDamage ) > DamageAvg(iDamage)) ? iShouDamage : iDamage;
|
iDamage = (DamageAvg(iShouDamage ) > DamageAvg(iDamage)) ? iShouDamage : iDamage;
|
||||||
iDamage = (DamageAvg(iFrostDamage ) > DamageAvg(iDamage)) ? iFrostDamage : iDamage;
|
iDamage = (DamageAvg(iFrostDamage ) > DamageAvg(iDamage)) ? iFrostDamage : iDamage;
|
||||||
iDamage = (DamageAvg(iSUSDamage ) > DamageAvg(iDamage)) ? iSUSDamage : iDamage;
|
iDamage = (DamageAvg(iSUSDamage ) > DamageAvg(iDamage)) ? iSUSDamage : iDamage;
|
||||||
@@ -354,6 +598,8 @@ int FindUnarmedDamage(object oCreature)
|
|||||||
|
|
||||||
return iDamage;
|
return iDamage;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
// Adds appropriate feats to the skin. Stolen from SoulTaker + expanded with overwhelming/devastating critical.
|
// Adds appropriate feats to the skin. Stolen from SoulTaker + expanded with overwhelming/devastating critical.
|
||||||
void UnarmedFeats(object oCreature)
|
void UnarmedFeats(object oCreature)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
//::///////////////////////////////////////////////
|
//::///////////////////////////////////////////////
|
||||||
//:: Weapon Restriction System Include
|
//:: Weapon Restriction System Include
|
||||||
//:: prc_inc_restwpn.nss
|
//:: prc_inc_wpnrest.nss
|
||||||
//::///////////////////////////////////////////////
|
//::///////////////////////////////////////////////
|
||||||
/*
|
/*
|
||||||
Functions to support PnP Weapon Proficiency and
|
Functions to support PnP Weapon Proficiency and
|
||||||
@@ -15,6 +15,56 @@
|
|||||||
#include "inc_item_props"
|
#include "inc_item_props"
|
||||||
#include "prc_x2_itemprop"
|
#include "prc_x2_itemprop"
|
||||||
|
|
||||||
|
//:: Detects if "monk" gloves are being equipped & set a
|
||||||
|
//:: variable if TRUE for use with other functions
|
||||||
|
void DetectMonkGloveEquip(object oItem)
|
||||||
|
{
|
||||||
|
int nItemType = GetBaseItemType(oItem);
|
||||||
|
|
||||||
|
object oPC = GetItemPossessor(oItem);
|
||||||
|
if (!GetIsObjectValid(oItem))
|
||||||
|
{
|
||||||
|
if (DEBUG) DoDebug("prc_inc_wpnrest >> DetectMonkGloveEquip(): Unable to determine item possessor");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(nItemType != BASE_ITEM_GLOVES && nItemType != BASE_ITEM_BRACER) {return;}
|
||||||
|
|
||||||
|
else if (nItemType == BASE_ITEM_BRACER)
|
||||||
|
{
|
||||||
|
if(DEBUG) DoDebug("prc_inc_wpnrest >> DetectMonkGloveEquip(): Bracer found!");
|
||||||
|
DeleteLocalInt(oPC, "WEARING_MONK_GLOVES");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
itemproperty ipG = GetFirstItemProperty(oItem);
|
||||||
|
|
||||||
|
while(GetIsItemPropertyValid(ipG))
|
||||||
|
{
|
||||||
|
int nTypeG = GetItemPropertyType(ipG);
|
||||||
|
|
||||||
|
// Damage related properties we care about
|
||||||
|
if(nTypeG == ITEM_PROPERTY_DAMAGE_BONUS
|
||||||
|
|| nTypeG == ITEM_PROPERTY_ATTACK_BONUS
|
||||||
|
|| nTypeG == ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP
|
||||||
|
|| nTypeG == ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP
|
||||||
|
|| nTypeG == ITEM_PROPERTY_DAMAGE_BONUS_VS_SPECIFIC_ALIGNMENT)
|
||||||
|
{
|
||||||
|
if(DEBUG) DoDebug("prc_inc_wpnrest >> DetectMonkGloves(): Monk gloves found!");
|
||||||
|
SetLocalInt(oPC, "WEARING_MONK_GLOVES", 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(DEBUG) DoDebug("prc_inc_wpnrest >> DetectMonkGloves(): Monk gloves not found! You should never see this.");
|
||||||
|
DeleteLocalInt(oPC, "WEARING_MONK_GLOVES");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* All of the following functions use the following parameters:
|
* All of the following functions use the following parameters:
|
||||||
*
|
*
|
||||||
@@ -23,6 +73,69 @@
|
|||||||
* @param nHand The hand the weapon is wielded in. In the form of
|
* @param nHand The hand the weapon is wielded in. In the form of
|
||||||
* ATTACK_BONUS_ONHAND or ATTACK_BONUS_OFFHAND.
|
* ATTACK_BONUS_ONHAND or ATTACK_BONUS_OFFHAND.
|
||||||
*/
|
*/
|
||||||
|
//:: returns TRUE if the wielded weapon works with the Swashbuckler's class abilities.
|
||||||
|
int GetHasSwashbucklerWeapon(object oPC)
|
||||||
|
{
|
||||||
|
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
|
||||||
|
if (!GetIsObjectValid(oWeap)) return FALSE;
|
||||||
|
|
||||||
|
int nType = GetBaseItemType(oWeap);
|
||||||
|
|
||||||
|
switch (nType)
|
||||||
|
{
|
||||||
|
case BASE_ITEM_DAGGER:
|
||||||
|
case BASE_ITEM_KATAR:
|
||||||
|
case BASE_ITEM_HANDAXE:
|
||||||
|
case BASE_ITEM_KAMA:
|
||||||
|
case BASE_ITEM_KUKRI:
|
||||||
|
case BASE_ITEM_LIGHTHAMMER:
|
||||||
|
case BASE_ITEM_LIGHTMACE:
|
||||||
|
case BASE_ITEM_LIGHT_PICK:
|
||||||
|
case BASE_ITEM_RAPIER:
|
||||||
|
case BASE_ITEM_SHORTSWORD:
|
||||||
|
case BASE_ITEM_SICKLE:
|
||||||
|
case BASE_ITEM_WHIP:
|
||||||
|
case BASE_ITEM_SAI:
|
||||||
|
case BASE_ITEM_SAP:
|
||||||
|
case BASE_ITEM_NUNCHAKU:
|
||||||
|
case BASE_ITEM_GOAD:
|
||||||
|
case BASE_ITEM_ELVEN_LIGHTBLADE:
|
||||||
|
case BASE_ITEM_ELVEN_THINBLADE:
|
||||||
|
case BASE_ITEM_EAGLE_CLAW:
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Iaijutsu Master allows katana
|
||||||
|
if (GetLevelByClass(CLASS_TYPE_IAIJUTSU_MASTER, oPC) > 0)
|
||||||
|
{
|
||||||
|
if (nType == BASE_ITEM_KATANA) return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//:: returns TRUE if the wielded weapon works with the Champion of Corellon's Elegant Strike.
|
||||||
|
int GetHasCorellonWeapon(object oPC)
|
||||||
|
{
|
||||||
|
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
|
||||||
|
if (!GetIsObjectValid(oWeap)) return FALSE;
|
||||||
|
|
||||||
|
int nType = GetBaseItemType(oWeap);
|
||||||
|
|
||||||
|
switch (nType)
|
||||||
|
{
|
||||||
|
case BASE_ITEM_SCIMITAR:
|
||||||
|
case BASE_ITEM_LONGSWORD:
|
||||||
|
case BASE_ITEM_RAPIER:
|
||||||
|
case BASE_ITEM_ELVEN_COURTBLADE:
|
||||||
|
case BASE_ITEM_ELVEN_LIGHTBLADE:
|
||||||
|
case BASE_ITEM_ELVEN_THINBLADE:
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
void DoRacialEquip(object oPC, int nBaseType);
|
void DoRacialEquip(object oPC, int nBaseType);
|
||||||
|
|
||||||
//return if PC has proficiency in an item
|
//return if PC has proficiency in an item
|
||||||
@@ -41,11 +154,29 @@ int IsProficient(object oPC, int nBaseItem)
|
|||||||
case BASE_ITEM_CLUB:
|
case BASE_ITEM_CLUB:
|
||||||
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC)
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC)
|
||||||
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC)
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC)
|
||||||
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_WIZARD, oPC)
|
||||||
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC)
|
||||||
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_CLUB, oPC);
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_CLUB, oPC);
|
||||||
|
|
||||||
|
case BASE_ITEM_HEAVYCROSSBOW:
|
||||||
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC)
|
||||||
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC)
|
||||||
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_WIZARD, oPC)
|
||||||
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC)
|
||||||
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_HEAVY_XBOW, oPC);
|
||||||
|
|
||||||
|
case BASE_ITEM_LIGHTCROSSBOW:
|
||||||
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC)
|
||||||
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC)
|
||||||
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_WIZARD, oPC)
|
||||||
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC)
|
||||||
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_LIGHT_XBOW, oPC);
|
||||||
|
|
||||||
case BASE_ITEM_DAGGER:
|
case BASE_ITEM_DAGGER:
|
||||||
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC)
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC)
|
||||||
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC)
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC)
|
||||||
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_WIZARD, oPC)
|
||||||
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC)
|
||||||
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_DAGGER, oPC);
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_DAGGER, oPC);
|
||||||
|
|
||||||
case BASE_ITEM_LONGSWORD:
|
case BASE_ITEM_LONGSWORD:
|
||||||
@@ -152,7 +283,14 @@ int IsProficient(object oPC, int nBaseItem)
|
|||||||
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC);
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oPC);
|
||||||
|
|
||||||
case BASE_ITEM_QUARTERSTAFF:
|
case BASE_ITEM_QUARTERSTAFF:
|
||||||
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC)
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_QUARTERSTAFF, oPC)
|
||||||
|
||GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC)
|
||||||
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC)
|
||||||
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_WIZARD, oPC);
|
||||||
|
|
||||||
|
case BASE_ITEM_MAGICSTAFF:
|
||||||
|
return GetHasFeat(FEAT_WEAPON_PROFICIENCY_QUARTERSTAFF, oPC)
|
||||||
|
||GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oPC)
|
||||||
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC)
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oPC)
|
||||||
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_WIZARD, oPC);
|
|| GetHasFeat(FEAT_WEAPON_PROFICIENCY_WIZARD, oPC);
|
||||||
|
|
||||||
@@ -295,6 +433,24 @@ int GetWeaponProfFeatByType(int nBaseType)
|
|||||||
{
|
{
|
||||||
switch(nBaseType)
|
switch(nBaseType)
|
||||||
{
|
{
|
||||||
|
case BASE_ITEM_CLUB:
|
||||||
|
return FEAT_WEAPON_PROFICIENCY_CLUB;
|
||||||
|
|
||||||
|
case BASE_ITEM_QUARTERSTAFF:
|
||||||
|
return FEAT_WEAPON_PROFICIENCY_QUARTERSTAFF;
|
||||||
|
|
||||||
|
case BASE_ITEM_MAGICSTAFF:
|
||||||
|
return FEAT_WEAPON_PROFICIENCY_QUARTERSTAFF;
|
||||||
|
|
||||||
|
case BASE_ITEM_DAGGER:
|
||||||
|
return FEAT_WEAPON_PROFICIENCY_DAGGER;
|
||||||
|
|
||||||
|
case BASE_ITEM_HEAVYCROSSBOW:
|
||||||
|
return FEAT_WEAPON_PROFICIENCY_HEAVY_XBOW;
|
||||||
|
|
||||||
|
case BASE_ITEM_LIGHTCROSSBOW:
|
||||||
|
return FEAT_WEAPON_PROFICIENCY_LIGHT_XBOW;
|
||||||
|
|
||||||
case BASE_ITEM_SHORTSWORD:
|
case BASE_ITEM_SHORTSWORD:
|
||||||
return FEAT_WEAPON_PROFICIENCY_SHORTSWORD;
|
return FEAT_WEAPON_PROFICIENCY_SHORTSWORD;
|
||||||
|
|
||||||
@@ -720,6 +876,7 @@ int IsMeleeWeapon(int nBaseItemType)
|
|||||||
case BASE_ITEM_CLOAK:
|
case BASE_ITEM_CLOAK:
|
||||||
case BASE_ITEM_CRAFTED_ROD:
|
case BASE_ITEM_CRAFTED_ROD:
|
||||||
case BASE_ITEM_CRAFTED_STAFF:
|
case BASE_ITEM_CRAFTED_STAFF:
|
||||||
|
case BASE_ITEM_CRAFTED_SCEPTER:
|
||||||
case BASE_ITEM_CRAFTMATERIALMED:
|
case BASE_ITEM_CRAFTMATERIALMED:
|
||||||
case BASE_ITEM_CRAFTMATERIALSML:
|
case BASE_ITEM_CRAFTMATERIALSML:
|
||||||
case BASE_ITEM_CREATUREITEM:
|
case BASE_ITEM_CREATUREITEM:
|
||||||
|
|||||||
@@ -262,7 +262,7 @@ const int IP_CONST_FEAT_WEAPON_PROFICIENCY_LIGHT_LANCE = 4638;
|
|||||||
const int IP_CONST_FEAT_WEAPON_PROFICIENCY_HEAVY_PICK = 4639;
|
const int IP_CONST_FEAT_WEAPON_PROFICIENCY_HEAVY_PICK = 4639;
|
||||||
const int IP_CONST_FEAT_WEAPON_PROFICIENCY_LIGHT_PICK = 4640;
|
const int IP_CONST_FEAT_WEAPON_PROFICIENCY_LIGHT_PICK = 4640;
|
||||||
const int IP_CONST_FEAT_WEAPON_PROFICIENCY_SAI = 4641;
|
const int IP_CONST_FEAT_WEAPON_PROFICIENCY_SAI = 4641;
|
||||||
const int IP_CONST_FEAT_WEAPON_PROFICIENCY_NUNCHUKU = 4642;
|
const int IP_CONST_FEAT_WEAPON_PROFICIENCY_NUNCHAKU = 4642;
|
||||||
const int IP_CONST_FEAT_WEAPON_PROFICIENCY_FALCHION = 4643;
|
const int IP_CONST_FEAT_WEAPON_PROFICIENCY_FALCHION = 4643;
|
||||||
const int IP_CONST_FEAT_WEAPON_PROFICIENCY_SAP = 4644;
|
const int IP_CONST_FEAT_WEAPON_PROFICIENCY_SAP = 4644;
|
||||||
const int IP_CONST_FEAT_WEAPON_PROFICIENCY_KATAR = 4645;
|
const int IP_CONST_FEAT_WEAPON_PROFICIENCY_KATAR = 4645;
|
||||||
@@ -1208,6 +1208,7 @@ const int IP_CONST_FEAT_GIANT_RACIAL_TYPE = 24822;
|
|||||||
|
|
||||||
const int IP_CONST_FEAT_TEMPLATE_ARCHLICH_MARKER = 16401; //:: Archlich
|
const int IP_CONST_FEAT_TEMPLATE_ARCHLICH_MARKER = 16401; //:: Archlich
|
||||||
const int IP_CONST_FEAT_TEMPLATE_TURN_UNDEAD = 16402;
|
const int IP_CONST_FEAT_TEMPLATE_TURN_UNDEAD = 16402;
|
||||||
|
const int IP_CONST_FEAT_TEMPLATE_BAELNORN_MARKER = 16409; //:: Baelnorn
|
||||||
const int IP_CONST_FEAT_TEMPLATE_PROJECTION = 24823;
|
const int IP_CONST_FEAT_TEMPLATE_PROJECTION = 24823;
|
||||||
const int IP_CONST_FEAT_TEMPLATE_END_PROJECTION = 24824;
|
const int IP_CONST_FEAT_TEMPLATE_END_PROJECTION = 24824;
|
||||||
const int IP_CONST_FEAT_TEMPLATE_ANIMATE_DEAD = 24825;
|
const int IP_CONST_FEAT_TEMPLATE_ANIMATE_DEAD = 24825;
|
||||||
|
|||||||
@@ -29,6 +29,10 @@ const int BASE_ITEM_CRAFTED_STAFF = 201;
|
|||||||
const int BASE_ITEM_ELVEN_LIGHTBLADE = 202;
|
const int BASE_ITEM_ELVEN_LIGHTBLADE = 202;
|
||||||
const int BASE_ITEM_ELVEN_THINBLADE = 203;
|
const int BASE_ITEM_ELVEN_THINBLADE = 203;
|
||||||
const int BASE_ITEM_ELVEN_COURTBLADE = 204;
|
const int BASE_ITEM_ELVEN_COURTBLADE = 204;
|
||||||
|
const int BASE_ITEM_CRAFTED_SCEPTER = 249;
|
||||||
|
const int BASE_ITEM_CRAFTED_VIAL = 250;
|
||||||
|
const int BASE_ITEM_MUNDANE_HERB = 252;
|
||||||
|
const int BASE_ITEM_INFUSED_HERB = 253;
|
||||||
|
|
||||||
//:://////////////////////////////////////////////
|
//:://////////////////////////////////////////////
|
||||||
//:: Player Health Const
|
//:: Player Health Const
|
||||||
|
|||||||
615
src/include/prc_nui_com_inc.nss
Normal file
615
src/include/prc_nui_com_inc.nss
Normal file
@@ -0,0 +1,615 @@
|
|||||||
|
#include "prc_nui_consts"
|
||||||
|
#include "inc_newspellbook"
|
||||||
|
#include "psi_inc_psifunc"
|
||||||
|
#include "inc_lookups"
|
||||||
|
#include "nw_inc_nui"
|
||||||
|
#include "tob_inc_tobfunc"
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetCurrentSpellLevel
|
||||||
|
// Gets the current spell level the class can achieve at the current
|
||||||
|
// caster level (ranging from 0-9)
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// nClass:int the ClassID
|
||||||
|
// nLevel:int the caster level
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// int the circle the class can achieve currently
|
||||||
|
//
|
||||||
|
int GetCurrentSpellLevel(int nClass, int nLevel);
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetMaxSpellLevel
|
||||||
|
// Gets the highest possible circle the class can achieve (from 0-9)
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// nClass:int the ClassID
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// int the highest circle that can be achieved
|
||||||
|
//
|
||||||
|
int GetMaxSpellLevel(int nClass);
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetMinSpellLevel
|
||||||
|
// Gets the lowest possible circle the class can achieve (from 0-9)
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// nClass:int the ClassID
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// int the lowest circle that can be achieved
|
||||||
|
//
|
||||||
|
int GetMinSpellLevel(int nClass);
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetHighestLevelPossibleInClass
|
||||||
|
// Given a class Id this will determine what the max level of a class can be
|
||||||
|
// achieved
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// nClass:int the ClassID
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// int the highest possible level the class can achieve
|
||||||
|
//
|
||||||
|
int GetHighestLevelPossibleInClass(int nClass);
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetClassSpellbookFile
|
||||||
|
// Gets the class 2da spellbook/ability for the given class Id
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// nClass:int the classID
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// string the 2da file name for the spell/abilities of the ClassID
|
||||||
|
//
|
||||||
|
string GetClassSpellbookFile(int nClass);
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetBinderSpellToFeatDictionary
|
||||||
|
// Sets up the Binder Spell Dictionary that is used to match a binder's vestige
|
||||||
|
// to their feat. This is constructed based off the binder's known location of
|
||||||
|
// their feat and spell ranges in the base 2das respectivly. After constructing
|
||||||
|
// this it will be saved to the player locally as a cached result since we do
|
||||||
|
// not need to call this again.
|
||||||
|
//
|
||||||
|
// Argument:
|
||||||
|
// oPlayer:object the player
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// json:Dictionary<String,Int> a dictionary of mapping between the SpellID
|
||||||
|
// and the FeatID of a vestige ability
|
||||||
|
//
|
||||||
|
json GetBinderSpellToFeatDictionary(object oPlayer=OBJECT_SELF);
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetSpellLevelIcon
|
||||||
|
// Takes the spell circle int and gets the icon appropriate for it (i.e. 0 turns
|
||||||
|
// into "ir_cantrips"
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// spellLevel:int the spell level we want the icon for
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// string the spell level icon
|
||||||
|
//
|
||||||
|
string GetSpellLevelIcon(int spellLevel);
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetSpellLevelToolTip
|
||||||
|
// Gets the spell level tool tip text based on the int spell level provided (i.e.
|
||||||
|
// 0 turns into "Cantrips")
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// spellLevel:int the spell level we want the tooltip for
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// string the spell level toop tip
|
||||||
|
//
|
||||||
|
string GetSpellLevelToolTip(int spellLevel);
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetSpellIcon
|
||||||
|
// Gets the spell icon based off the spellId, or featId supplied
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// nClass:int the class Id
|
||||||
|
// featId:int the featId we can use the icon for
|
||||||
|
// spellId:int the spell Id we want the icon for
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// json:String the string of the icon we want.
|
||||||
|
//
|
||||||
|
json GetSpellIcon(int spellId, int featId=0, int nClass=0);
|
||||||
|
string GetSpellName(int spellId, int realSpellID=0, int featId=0, int nClass=0);
|
||||||
|
|
||||||
|
//
|
||||||
|
// GreyOutButton
|
||||||
|
// Takes NUI Button along with it's width and height and greys it out it with a drawn
|
||||||
|
// colored rectangle to represent it's not been selected or not valid.
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// jButton:json the NUI Button
|
||||||
|
// w:float the width of the button
|
||||||
|
// h:float the height of the button
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// json the NUI button greyed out
|
||||||
|
//
|
||||||
|
json GreyOutButton(json jButton, float w, float h);
|
||||||
|
|
||||||
|
//
|
||||||
|
// CreateGreyOutRectangle
|
||||||
|
// Creates a grey out rectangle for buttons
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// w:float the width of the button
|
||||||
|
// h:float the height of the button
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// json the transparant black rectangle
|
||||||
|
//
|
||||||
|
json CreateGreyOutRectangle(float w, float h);
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetTrueClassType
|
||||||
|
// Gets the true class Id for a provided class Id, mostly for RHD and for
|
||||||
|
// ToB prestige classes
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// nClass:int classId
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// int the true classId based off nClass
|
||||||
|
//
|
||||||
|
int GetTrueClassType(int nClass, object oPC=OBJECT_SELF);
|
||||||
|
|
||||||
|
void CreateSpellDescriptionNUI(object oPlayer, int featID, int spellId=0, int realSpellId=0, int nClass=0);
|
||||||
|
|
||||||
|
void CallSpellUnlevelScript(object oPC, int nClass, int nLevel);
|
||||||
|
void ClearSpellDescriptionNUI(object oPlayer=OBJECT_SELF);
|
||||||
|
void RemoveIPFeat(object oPC, int ipFeatID);
|
||||||
|
|
||||||
|
void CallSpellUnlevelScript(object oPC, int nClass, int nLevel)
|
||||||
|
{
|
||||||
|
SetScriptParam("UnLevel_ClassChoice", IntToString(nClass));
|
||||||
|
SetScriptParam("UnLevel_LevelChoice", IntToString(nLevel));
|
||||||
|
ExecuteScript("prc_unlvl_script", oPC);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RemoveIPFeat(object oPC, int ipFeatID)
|
||||||
|
{
|
||||||
|
object oSkin = GetPCSkin(oPC);
|
||||||
|
itemproperty ipTest = GetFirstItemProperty(oSkin);
|
||||||
|
while(GetIsItemPropertyValid(ipTest))
|
||||||
|
{
|
||||||
|
// Check if the itemproperty is a bonus feat that has been marked for removal
|
||||||
|
if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_BONUS_FEAT)
|
||||||
|
{
|
||||||
|
if (GetItemPropertySubType(ipTest) == ipFeatID)
|
||||||
|
{
|
||||||
|
if(DEBUG) DoDebug("_ManeuverRecurseRemoveArray(): Removing bonus feat itemproperty:\n" + DebugIProp2Str(ipTest));
|
||||||
|
// If so, remove it
|
||||||
|
RemoveItemProperty(oSkin, ipTest);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ipTest = GetNextItemProperty(oSkin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetCurrentSpellLevel(int nClass, int nLevel)
|
||||||
|
{
|
||||||
|
int currentLevel = nLevel;
|
||||||
|
|
||||||
|
// ToB doesn't have a concept of spell levels, but still match up to it
|
||||||
|
if(nClass == CLASS_TYPE_WARBLADE
|
||||||
|
|| nClass == CLASS_TYPE_SWORDSAGE
|
||||||
|
|| nClass == CLASS_TYPE_CRUSADER
|
||||||
|
|| nClass == CLASS_TYPE_SHADOWCASTER)
|
||||||
|
{
|
||||||
|
return 9;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Binders don't really have a concept of spell level
|
||||||
|
if (nClass == CLASS_TYPE_BINDER
|
||||||
|
|| nClass == CLASS_TYPE_DRAGON_SHAMAN) // they can only reach 1st circle
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
//Shadowsmith has no concept of spell levels
|
||||||
|
if (nClass == CLASS_TYPE_SHADOWSMITH)
|
||||||
|
return 2;
|
||||||
|
|
||||||
|
if (nClass == CLASS_TYPE_WARLOCK
|
||||||
|
|| nClass == CLASS_TYPE_DRAGONFIRE_ADEPT)
|
||||||
|
return 4;
|
||||||
|
|
||||||
|
// Spont casters have their own function
|
||||||
|
if(GetSpellbookTypeForClass(nClass) == SPELLBOOK_TYPE_SPONTANEOUS
|
||||||
|
|| nClass == CLASS_TYPE_ARCHIVIST)
|
||||||
|
{
|
||||||
|
|
||||||
|
int maxLevel = GetMaxSpellLevelForCasterLevel(nClass, currentLevel);
|
||||||
|
return maxLevel;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// everyone else uses this
|
||||||
|
string spellLevel2da = GetAMSKnownFileName(nClass);
|
||||||
|
|
||||||
|
currentLevel = nLevel - 1; // Level is 1 off of the row in the 2da
|
||||||
|
|
||||||
|
if (nClass == CLASS_TYPE_FIST_OF_ZUOKEN
|
||||||
|
|| nClass == CLASS_TYPE_PSION
|
||||||
|
|| nClass == CLASS_TYPE_PSYWAR
|
||||||
|
|| nClass == CLASS_TYPE_WILDER
|
||||||
|
|| nClass == CLASS_TYPE_PSYCHIC_ROGUE
|
||||||
|
|| nClass == CLASS_TYPE_WARMIND)
|
||||||
|
currentLevel = GetManifesterLevel(OBJECT_SELF, nClass, TRUE) - 1;
|
||||||
|
|
||||||
|
int totalLevel = Get2DARowCount(spellLevel2da);
|
||||||
|
|
||||||
|
// in case we somehow go over bounds just don't :)
|
||||||
|
if (currentLevel >= totalLevel)
|
||||||
|
currentLevel = totalLevel - 1;
|
||||||
|
|
||||||
|
//Psionics have MaxPowerLevel as their column name
|
||||||
|
string columnName = "MaxPowerLevel";
|
||||||
|
|
||||||
|
//Invokers have MaxInvocationLevel
|
||||||
|
if (nClass == CLASS_TYPE_WARLOCK
|
||||||
|
|| nClass == CLASS_TYPE_DRAGON_SHAMAN
|
||||||
|
|| nClass == CLASS_TYPE_DRAGONFIRE_ADEPT)
|
||||||
|
columnName = "MaxInvocationLevel";
|
||||||
|
|
||||||
|
// Truenamers have 3 sets of utterances, ranging from 1-6, EvolvingMind covers the entire range
|
||||||
|
if (nClass == CLASS_TYPE_TRUENAMER)
|
||||||
|
{
|
||||||
|
columnName = "EvolvingMind";
|
||||||
|
spellLevel2da = "cls_true_maxlvl"; //has a different 2da we want to look at
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nClass == CLASS_TYPE_BINDER)
|
||||||
|
{
|
||||||
|
columnName = "VestigeLvl";
|
||||||
|
spellLevel2da = "cls_bind_binder";
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToB doesn't have a concept of this, but we don't care.
|
||||||
|
|
||||||
|
int maxLevel = StringToInt(Get2DACache(spellLevel2da, columnName, currentLevel));
|
||||||
|
return maxLevel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetMinSpellLevel(int nClass)
|
||||||
|
{
|
||||||
|
// again sponts have their own function
|
||||||
|
if(GetSpellbookTypeForClass(nClass) == SPELLBOOK_TYPE_SPONTANEOUS
|
||||||
|
|| nClass == CLASS_TYPE_ARCHIVIST)
|
||||||
|
{
|
||||||
|
return GetMinSpellLevelForCasterLevel(nClass, GetHighestLevelPossibleInClass(nClass));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (nClass == CLASS_TYPE_FIST_OF_ZUOKEN
|
||||||
|
|| nClass == CLASS_TYPE_PSION
|
||||||
|
|| nClass == CLASS_TYPE_PSYWAR
|
||||||
|
|| nClass == CLASS_TYPE_WILDER
|
||||||
|
|| nClass == CLASS_TYPE_PSYCHIC_ROGUE
|
||||||
|
|| nClass == CLASS_TYPE_WARMIND
|
||||||
|
|| nClass == CLASS_TYPE_WARBLADE
|
||||||
|
|| nClass == CLASS_TYPE_SWORDSAGE
|
||||||
|
|| nClass == CLASS_TYPE_CRUSADER
|
||||||
|
|| nClass == CLASS_TYPE_WARLOCK
|
||||||
|
|| nClass == CLASS_TYPE_DRAGONFIRE_ADEPT
|
||||||
|
|| nClass == CLASS_TYPE_DRAGON_SHAMAN
|
||||||
|
|| nClass == CLASS_TYPE_SHADOWCASTER
|
||||||
|
|| nClass == CLASS_TYPE_SHADOWSMITH
|
||||||
|
|| nClass == CLASS_TYPE_BINDER)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return GetCurrentSpellLevel(nClass, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetMaxSpellLevel(int nClass)
|
||||||
|
{
|
||||||
|
if (nClass == CLASS_TYPE_WILDER
|
||||||
|
|| nClass == CLASS_TYPE_PSION)
|
||||||
|
return 9;
|
||||||
|
if (nClass == CLASS_TYPE_PSYCHIC_ROGUE
|
||||||
|
|| nClass == CLASS_TYPE_FIST_OF_ZUOKEN
|
||||||
|
|| nClass == CLASS_TYPE_WARMIND)
|
||||||
|
return 5;
|
||||||
|
if (nClass == CLASS_TYPE_PSYWAR)
|
||||||
|
return 6;
|
||||||
|
|
||||||
|
return GetCurrentSpellLevel(nClass, GetHighestLevelPossibleInClass(nClass));
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetHighestLevelPossibleInClass(int nClass)
|
||||||
|
{
|
||||||
|
string sFile;
|
||||||
|
|
||||||
|
//sponts have their spells in the classes.2da
|
||||||
|
if(GetSpellbookTypeForClass(nClass) == SPELLBOOK_TYPE_SPONTANEOUS
|
||||||
|
|| nClass == CLASS_TYPE_ARCHIVIST)
|
||||||
|
{
|
||||||
|
sFile = Get2DACache("classes", "SpellGainTable", nClass);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// everyone else uses this
|
||||||
|
sFile = GetAMSKnownFileName(nClass);
|
||||||
|
|
||||||
|
if (nClass == CLASS_TYPE_TRUENAMER)
|
||||||
|
{
|
||||||
|
sFile = "cls_true_maxlvl"; //has a different 2da we want to look at
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nClass == CLASS_TYPE_BINDER)
|
||||||
|
{
|
||||||
|
sFile = "cls_bind_binder";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Get2DARowCount(sFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
string GetClassSpellbookFile(int nClass)
|
||||||
|
{
|
||||||
|
string sFile;
|
||||||
|
// Spontaneous casters use a specific file name structure
|
||||||
|
if(GetSpellbookTypeForClass(nClass) == SPELLBOOK_TYPE_SPONTANEOUS
|
||||||
|
|| nClass == CLASS_TYPE_ARCHIVIST)
|
||||||
|
{
|
||||||
|
sFile = GetFileForClass(nClass);
|
||||||
|
}
|
||||||
|
// everyone else uses this structure
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sFile = GetAMSDefinitionFileName(nClass);
|
||||||
|
|
||||||
|
if (nClass == CLASS_TYPE_BINDER)
|
||||||
|
{
|
||||||
|
sFile = "vestiges";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
string GetSpellLevelIcon(int spellLevel)
|
||||||
|
{
|
||||||
|
switch (spellLevel)
|
||||||
|
{
|
||||||
|
case 0: return "ir_cantrips";
|
||||||
|
case 1: return "ir_level1";
|
||||||
|
case 2: return "ir_level2";
|
||||||
|
case 3: return "ir_level3";
|
||||||
|
case 4: return "ir_level4";
|
||||||
|
case 5: return "ir_level5";
|
||||||
|
case 6: return "ir_level6";
|
||||||
|
case 7: return "ir_level789";
|
||||||
|
case 8: return "ir_level789";
|
||||||
|
case 9: return "ir_level789";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
string GetSpellLevelToolTip(int spellLevel)
|
||||||
|
{
|
||||||
|
switch (spellLevel)
|
||||||
|
{
|
||||||
|
case 0: return "Cantrips";
|
||||||
|
case 1: return "Level 1";
|
||||||
|
case 2: return "Level 2";
|
||||||
|
case 3: return "Level 3";
|
||||||
|
case 4: return "Level 4";
|
||||||
|
case 5: return "Level 5";
|
||||||
|
case 6: return "Level 6";
|
||||||
|
case 7: return "Level 7";
|
||||||
|
case 8: return "Level 8";
|
||||||
|
case 9: return "Level 9";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
json GetSpellIcon(int spellId,int featId=0,int nClass=0)
|
||||||
|
{
|
||||||
|
// Binder's spells don't have the FeatID on the spells.2da, so we have to use
|
||||||
|
// the mapping we constructed to get it.
|
||||||
|
if (nClass == CLASS_TYPE_BINDER)
|
||||||
|
{
|
||||||
|
json binderDict = GetBinderSpellToFeatDictionary();
|
||||||
|
int nFeatID = JsonGetInt(JsonObjectGet(binderDict, IntToString(spellId)));
|
||||||
|
return JsonString(Get2DACache("feat", "Icon", featId));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (featId)
|
||||||
|
return JsonString(Get2DACache("feat", "Icon", featId));
|
||||||
|
|
||||||
|
int masterSpellID = StringToInt(Get2DACache("spells", "Master", spellId));
|
||||||
|
|
||||||
|
// if this is a sub radial spell, then we use spell's icon instead
|
||||||
|
if (masterSpellID)
|
||||||
|
return JsonString(Get2DACache("spells", "IconResRef", spellId));
|
||||||
|
|
||||||
|
// the FeatID holds the accurate spell icon, not the SpellID
|
||||||
|
int nFeatID = StringToInt(Get2DACache("spells", "FeatID", spellId));
|
||||||
|
// however if no featId was found use the spell's icon instead
|
||||||
|
if (!nFeatID)
|
||||||
|
return JsonString(Get2DACache("spells", "IconResRef", spellId));
|
||||||
|
|
||||||
|
return JsonString(Get2DACache("feat", "Icon", nFeatID));
|
||||||
|
}
|
||||||
|
|
||||||
|
string GetSpellName(int spellId, int realSpellID=0, int featId=0, int nClass=0)
|
||||||
|
{
|
||||||
|
if ((nClass == CLASS_TYPE_SHADOWSMITH
|
||||||
|
|| nClass == CLASS_TYPE_SHADOWCASTER) && spellId)
|
||||||
|
return GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", spellId)));
|
||||||
|
if (nClass == CLASS_TYPE_TRUENAMER && featId)
|
||||||
|
return GetStringByStrRef(StringToInt(Get2DACache("feat", "FEAT", featId)));
|
||||||
|
if (realSpellID)
|
||||||
|
return GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", realSpellID)));
|
||||||
|
if (spellId)
|
||||||
|
return GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", spellId)));
|
||||||
|
if (featId)
|
||||||
|
return GetStringByStrRef(StringToInt(Get2DACache("feat", "FEAT", featId)));
|
||||||
|
|
||||||
|
return GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", spellId)));
|
||||||
|
}
|
||||||
|
|
||||||
|
json GetBinderSpellToFeatDictionary(object oPlayer=OBJECT_SELF)
|
||||||
|
{
|
||||||
|
// a dictionary of <SpellID, FeatID>
|
||||||
|
json binderDict = GetLocalJson(oPlayer, NUI_SPELLBOOK_BINDER_DICTIONARY_CACHE_VAR);
|
||||||
|
// if this hasn't been created, create it now.
|
||||||
|
if (binderDict == JsonNull())
|
||||||
|
binderDict = JsonObject();
|
||||||
|
else
|
||||||
|
return binderDict;
|
||||||
|
|
||||||
|
// the starting row for binder spells
|
||||||
|
int spellIndex = 19070;
|
||||||
|
// the starting row for binder feats
|
||||||
|
int featIndex = 9030;
|
||||||
|
//the end of the binder spells/feats
|
||||||
|
while (spellIndex <= 19156 && featIndex <= 9104)
|
||||||
|
{
|
||||||
|
// get the SpellID tied to the feat
|
||||||
|
int spellID = StringToInt(Get2DACache("feat", "SPELLID", featIndex));
|
||||||
|
// if the spellID matches the current index, then this is the spell
|
||||||
|
// attached to the feat
|
||||||
|
if (spellID == spellIndex)
|
||||||
|
{
|
||||||
|
binderDict = JsonObjectSet(binderDict, IntToString(spellID), JsonInt(featIndex));
|
||||||
|
|
||||||
|
// move to next spell/feat
|
||||||
|
featIndex++;
|
||||||
|
spellIndex++;
|
||||||
|
}
|
||||||
|
// else we have reached a subdial spell
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// loop through until we reach back at spellID
|
||||||
|
while (spellIndex < spellID)
|
||||||
|
{
|
||||||
|
int masterSpell = StringToInt(Get2DACache("spells", "Master", spellIndex));
|
||||||
|
|
||||||
|
// add the sub radial to the dict, tied to the master's FeatID
|
||||||
|
int featId = JsonGetInt(JsonObjectGet(binderDict, IntToString(masterSpell)));
|
||||||
|
binderDict = JsonObjectSet(binderDict, IntToString(spellIndex), JsonInt(featId));
|
||||||
|
|
||||||
|
spellIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// some feats overlap the same FeatID, can cause this to get stuck.
|
||||||
|
// if it happens then move on
|
||||||
|
if (spellIndex > spellID)
|
||||||
|
featIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// cache the result
|
||||||
|
SetLocalJson(oPlayer, NUI_SPELLBOOK_BINDER_DICTIONARY_CACHE_VAR, binderDict);
|
||||||
|
return binderDict;
|
||||||
|
}
|
||||||
|
|
||||||
|
json GreyOutButton(json jButton, float w, float h)
|
||||||
|
{
|
||||||
|
json retValue = jButton;
|
||||||
|
|
||||||
|
json jBorders = JsonArray();
|
||||||
|
jBorders = JsonArrayInsert(jBorders, CreateGreyOutRectangle(w, h));
|
||||||
|
|
||||||
|
return NuiDrawList(jButton, JsonBool(FALSE), jBorders);
|
||||||
|
}
|
||||||
|
|
||||||
|
json CreateGreyOutRectangle(float w, float h)
|
||||||
|
{
|
||||||
|
// set the points of the button shape
|
||||||
|
json jPoints = JsonArray();
|
||||||
|
jPoints = JsonArrayInsert(jPoints, JsonFloat(0.0));
|
||||||
|
jPoints = JsonArrayInsert(jPoints, JsonFloat(0.0));
|
||||||
|
|
||||||
|
jPoints = JsonArrayInsert(jPoints, JsonFloat(0.0));
|
||||||
|
jPoints = JsonArrayInsert(jPoints, JsonFloat(h));
|
||||||
|
|
||||||
|
jPoints = JsonArrayInsert(jPoints, JsonFloat(w));
|
||||||
|
jPoints = JsonArrayInsert(jPoints, JsonFloat(h));
|
||||||
|
|
||||||
|
jPoints = JsonArrayInsert(jPoints, JsonFloat(w));
|
||||||
|
jPoints = JsonArrayInsert(jPoints, JsonFloat(0.0));
|
||||||
|
|
||||||
|
jPoints = JsonArrayInsert(jPoints, JsonFloat(0.0));
|
||||||
|
jPoints = JsonArrayInsert(jPoints, JsonFloat(0.0));
|
||||||
|
|
||||||
|
return NuiDrawListPolyLine(JsonBool(TRUE), NuiColor(0, 0, 0, 127), JsonBool(TRUE), JsonFloat(2.0), jPoints);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CreateSpellDescriptionNUI(object oPlayer, int featID, int spellId=0, int realSpellId=0, int nClass=0)
|
||||||
|
{
|
||||||
|
SetLocalInt(oPlayer, NUI_SPELL_DESCRIPTION_FEATID_VAR, featID);
|
||||||
|
SetLocalInt(oPlayer, NUI_SPELL_DESCRIPTION_SPELLID_VAR, spellId);
|
||||||
|
SetLocalInt(oPlayer, NUI_SPELL_DESCRIPTION_REAL_SPELLID_VAR, realSpellId);
|
||||||
|
SetLocalInt(oPlayer, NUI_SPELL_DESCRIPTION_CLASSID_VAR, nClass);
|
||||||
|
ExecuteScript("prc_nui_dsc_view", oPlayer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClearSpellDescriptionNUI(object oPlayer=OBJECT_SELF)
|
||||||
|
{
|
||||||
|
DeleteLocalInt(oPlayer, NUI_SPELL_DESCRIPTION_FEATID_VAR);
|
||||||
|
DeleteLocalInt(oPlayer, NUI_SPELL_DESCRIPTION_SPELLID_VAR);
|
||||||
|
DeleteLocalInt(oPlayer, NUI_SPELL_DESCRIPTION_REAL_SPELLID_VAR);
|
||||||
|
DeleteLocalInt(oPlayer, NUI_SPELL_DESCRIPTION_CLASSID_VAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetTrueClassType(int nClass, object oPC=OBJECT_SELF)
|
||||||
|
{
|
||||||
|
if (nClass == CLASS_TYPE_JADE_PHOENIX_MAGE
|
||||||
|
|| nClass == CLASS_TYPE_MASTER_OF_NINE
|
||||||
|
|| nClass == CLASS_TYPE_DEEPSTONE_SENTINEL
|
||||||
|
|| nClass == CLASS_TYPE_BLOODCLAW_MASTER
|
||||||
|
|| nClass == CLASS_TYPE_RUBY_VINDICATOR
|
||||||
|
|| nClass == CLASS_TYPE_ETERNAL_BLADE
|
||||||
|
|| nClass == CLASS_TYPE_SHADOW_SUN_NINJA)
|
||||||
|
{
|
||||||
|
int trueClass = GetPrimaryBladeMagicClass(oPC);
|
||||||
|
return trueClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((nClass == CLASS_TYPE_SHAPECHANGER
|
||||||
|
&& GetRacialType(oPC) == RACIAL_TYPE_ARANEA)
|
||||||
|
|| (nClass == CLASS_TYPE_OUTSIDER
|
||||||
|
&& GetRacialType(oPC) == RACIAL_TYPE_RAKSHASA)
|
||||||
|
|| (nClass == CLASS_TYPE_ABERRATION
|
||||||
|
&& GetRacialType(oPC) == RACIAL_TYPE_DRIDER)
|
||||||
|
|| (nClass == CLASS_TYPE_MONSTROUS
|
||||||
|
&& GetRacialType(oPC) == RACIAL_TYPE_ARKAMOI)
|
||||||
|
|| (nClass == CLASS_TYPE_MONSTROUS
|
||||||
|
&& GetRacialType(oPC) == RACIAL_TYPE_HOBGOBLIN_WARSOUL)
|
||||||
|
|| (nClass == CLASS_TYPE_MONSTROUS
|
||||||
|
&& GetRacialType(oPC) == RACIAL_TYPE_REDSPAWN_ARCANISS)
|
||||||
|
|| (nClass == CLASS_TYPE_MONSTROUS
|
||||||
|
&& GetRacialType(oPC) == RACIAL_TYPE_MARRUTACT))
|
||||||
|
return CLASS_TYPE_SORCERER;
|
||||||
|
if (nClass == CLASS_TYPE_FEY
|
||||||
|
&& GetRacialType(oPC) == RACIAL_TYPE_GLOURA)
|
||||||
|
return CLASS_TYPE_BARD;
|
||||||
|
|
||||||
|
return nClass;
|
||||||
|
}
|
||||||
|
|
||||||
171
src/include/prc_nui_consts.nss
Normal file
171
src/include/prc_nui_consts.nss
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
//::///////////////////////////////////////////////
|
||||||
|
//:: NUI Constants
|
||||||
|
//:: prc_nui_consts
|
||||||
|
//:://////////////////////////////////////////////
|
||||||
|
/*
|
||||||
|
This file holds all the constants used by the various PRC NUI scripts.
|
||||||
|
*/
|
||||||
|
//:://////////////////////////////////////////////
|
||||||
|
//:: Created By: Rakiov
|
||||||
|
//:: Created On: 24.05.2005
|
||||||
|
//:://////////////////////////////////////////////
|
||||||
|
|
||||||
|
const int NUI_PAYLOAD_BUTTON_LEFT_CLICK = 0;
|
||||||
|
const int NUI_PAYLOAD_BUTTON_MIDDLE_CLICK = 1;
|
||||||
|
const int NUI_PAYLOAD_BUTTON_RIGHT_CLICK = 2;
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////
|
||||||
|
// //
|
||||||
|
// NUI Spellbook //
|
||||||
|
// //
|
||||||
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// This is the NUI Spellbook window ID
|
||||||
|
const string PRC_SPELLBOOK_NUI_WINDOW_ID = "prcSpellbookNui";
|
||||||
|
|
||||||
|
// This is the base Id for the Class buttons in the NUI Spellbook, the ID will
|
||||||
|
// have the ClassID attached to it (i.e. spellbookClassButton_123)
|
||||||
|
const string PRC_SPELLBOOK_NUI_CLASS_BUTTON_BASEID = "spellbookClassButton_";
|
||||||
|
|
||||||
|
// This is the base Id for the Spell Circle buttons in the NUI Spellbook, the ID will
|
||||||
|
// have the Circle attached to it (i.e. spellbookCircleButton__6)
|
||||||
|
const string PRC_SPELLBOOK_NUI_CIRCLE_BUTTON_BASEID = "spellbookCircleButton_";
|
||||||
|
|
||||||
|
// This is the base Id for the Spell Buttons in the NUI Spellbook, the ID will
|
||||||
|
// have the SpellbookId (the row of the class's spell's 2da or equivalent)
|
||||||
|
// attached to it (i.e. spellbookSpellButton_6)
|
||||||
|
const string PRC_SPELLBOOK_NUI_SPELL_BUTTON_BASEID = "spellbookSpellButton_";
|
||||||
|
|
||||||
|
// This is the base Id for the Meta Feat buttons in the NUI Spellbook, the ID will
|
||||||
|
// have the FeatID attached to it (i.e. spellbookMetaButton_12345)
|
||||||
|
const string PRC_SPELLBOOK_NUI_META_BUTTON_BASEID = "spellbookMetaButton_";
|
||||||
|
|
||||||
|
// This is the selected ClassID var used to store what class was selected to the Player
|
||||||
|
// locally
|
||||||
|
const string PRC_SPELLBOOK_SELECTED_CLASSID_VAR = "prcSpellbookSelectedClassID";
|
||||||
|
|
||||||
|
// This is the selected Circle var used to store what spell circle was selected
|
||||||
|
// to the Player locally
|
||||||
|
const string PRC_SPELLBOOK_SELECTED_CIRCLE_VAR = "prcSpellbookSelectedCircle";
|
||||||
|
|
||||||
|
// This is the Spellbook NUI geomeotry var, used to allow the location and sizing
|
||||||
|
// of the NUI to be remembered if it is ever rerendered.
|
||||||
|
const string PRC_SPELLBOOK_NUI_GEOMETRY_VAR = "sbNuiGeometry";
|
||||||
|
|
||||||
|
// This is the Selected SpellID Var, used to tell the OnTarget script what spell
|
||||||
|
// we are using after manual targetting
|
||||||
|
const string NUI_SPELLBOOK_SELECTED_SPELLID_VAR = "NUI_Spellbook_SpellId";
|
||||||
|
|
||||||
|
// This is the Selected FeatID Var, used to tell the OnTarget script what feat
|
||||||
|
// we are using after manual targetting
|
||||||
|
const string NUI_SPELLBOOK_SELECTED_FEATID_VAR = "NUI_Spellbook_FeatID";
|
||||||
|
|
||||||
|
// This is the Selected SubSpellID Var, used in conjuncture with the Selected FeatID
|
||||||
|
// to allow radial spells to work (it needs the master spell's featID and the sub spell's
|
||||||
|
// SpellID for it to work.
|
||||||
|
const string NUI_SPELLBOOK_SELECTED_SUBSPELL_SPELLID_VAR = "NUI_Spellbook_SubSpellID";
|
||||||
|
|
||||||
|
// This is the OnTarget action var saved to the player locally to say if we are
|
||||||
|
// using the NUI Spellbook spell or not.
|
||||||
|
const string NUI_SPELLBOOK_ON_TARGET_ACTION_VAR = "ONPLAYERTARGET_ACTION";
|
||||||
|
|
||||||
|
// This is a Boolean to tell the target script if the selected feat is a persoanl feat
|
||||||
|
// and can only be used on the executing object.
|
||||||
|
const string NUI_SPELLBOOK_ON_TARGET_IS_PERSONAL_FEAT = "NUI_Spellbook_IsPersonalFeat";
|
||||||
|
|
||||||
|
const string NUI_SPELL_DESCRIPTION_WINDOW_ID = "NUI_Spell_Description";
|
||||||
|
const string NUI_SPELL_DESCRIPTION_OK_BUTTON = "NUIDescriptionOKButton";
|
||||||
|
|
||||||
|
// This is the limit of how many spell buttons we can have in a row before we
|
||||||
|
// need to start a new row on the NUI Spellbook.
|
||||||
|
const int NUI_SPELLBOOK_SPELL_BUTTON_LENGTH = 9;
|
||||||
|
|
||||||
|
const string NUI_SPELLBOOK_BINDER_DICTIONARY_CACHE_VAR = "NUI_Spellbook_GetBinderSpellToFeatDictionaryCache";
|
||||||
|
const string NUI_SPELLBOOK_CLASS_STANCES_CACHE_BASE_VAR = "NUI_Spellbook_GetToBStanceSpellListCache_";
|
||||||
|
const string NUI_SPELLBOOK_CLASS_SHAPES_CACHE_BASE_VAR = "NUI_Spellbook_GetInvokerShapeSpellListCache_";
|
||||||
|
const string NUI_SPELLBOOK_CLASS_ESSENCE_CACHE_BASE_VAR = "NUISpellbookClassEssence_";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////
|
||||||
|
// //
|
||||||
|
// NUI Power Attack //
|
||||||
|
// //
|
||||||
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// The Window ID for the Power Attack NUI
|
||||||
|
const string NUI_PRC_POWER_ATTACK_WINDOW = "nui_prc_power_attack_window";
|
||||||
|
|
||||||
|
// LocalVar for the geometry of the Power Attack NUI window
|
||||||
|
const string NUI_PRC_PA_GEOMETRY_VAR = "paNuiGeometry";
|
||||||
|
|
||||||
|
// Event For Left "-" button of the Power Attack NUI
|
||||||
|
const string NUI_PRC_PA_LEFT_BUTTON_EVENT = "nui_prc_pa_left_button_event";
|
||||||
|
// Event For Right "+" Button of the Power Attack NUI
|
||||||
|
const string NUI_PRC_PA_RIGHT_BUTTON_EVENT = "nui_prc_pa_right_button_event";
|
||||||
|
|
||||||
|
// Bind for Text of the Power Attack NUI saying what the current Power Attack level is
|
||||||
|
const string NUI_PRC_PA_TEXT_BIND = "nui_prc_pa_text_bind";
|
||||||
|
// Left Button Enabled Bind for Power Attack NUI
|
||||||
|
const string NUI_PRC_PA_LEFT_BUTTON_ENABLED_BIND = "leftButtonEnabled";
|
||||||
|
// Right Button Enabled Bind for Power Attack NUI
|
||||||
|
const string NUI_PRC_PA_RIGHT_BUTTON_ENABLED_BIND = "rightButtonEnabled";
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////
|
||||||
|
// //
|
||||||
|
// NUI Level Up //
|
||||||
|
// //
|
||||||
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
|
const string NUI_LEVEL_UP_WINDOW_ID = "prcLevelUpNui";
|
||||||
|
|
||||||
|
const string NUI_LEVEL_UP_SPELL_CIRCLE_BUTTON_BASEID = "NuiLevelUpCircleButton_";
|
||||||
|
const string NUI_LEVEL_UP_SPELL_BUTTON_BASEID = "NuiLevelUpSpellButton_";
|
||||||
|
const string NUI_LEVEL_UP_SPELL_DISABLED_BUTTON_BASEID = "NuiLevelUpDisabledSpellButton_";
|
||||||
|
const string NUI_LEVEL_UP_SPELL_CHOSEN_BUTTON_BASEID = "NuiLevelUpChosenSpellButton_";
|
||||||
|
const string NUI_LEVEL_UP_SPELL_CHOSEN_DISABLED_BUTTON_BASEID = "NuiLevelUpDisabledChosenSpellButton_";
|
||||||
|
const string NUI_LEVEL_UP_DONE_BUTTON = "NuiLevelUpDoneButton";
|
||||||
|
const string NUI_LEVEL_UP_RESET_BUTTON = "NuiLevelUpResetButton";
|
||||||
|
|
||||||
|
const string NUI_LEVEL_UP_SELECTED_CLASS_VAR = "NUILevelUpSelectedClass";
|
||||||
|
const string NUI_LEVEL_UP_SELECTED_CIRCLE_VAR = "NUILevelUpSelectedCircle";
|
||||||
|
const string NUI_LEVEL_UP_KNOWN_SPELLS_VAR = "NUILevelUpKnownSpells";
|
||||||
|
const string NUI_LEVEL_UP_CHOSEN_SPELLS_VAR = "NUILevelUpChosenSpells";
|
||||||
|
const string NUI_LEVEL_UP_EXPANDED_KNOW_LIST_VAR = "NUILevelUpExpKnowList";
|
||||||
|
const string NUI_LEVEL_UP_POWER_LIST_VAR = "NUILevelUpPowerList";
|
||||||
|
const string NUI_LEVEL_UP_DISCIPLINE_INFO_VAR = "GetDisciplineInfoObjectCache_";
|
||||||
|
const string NUI_LEVEL_UP_SPELLID_LIST_VAR = "NUILevelUpSpellIDList_";
|
||||||
|
const string NUI_LEVEL_UP_REMAINING_CHOICES_CACHE_VAR = "NUIRemainingChoicesCache";
|
||||||
|
const string NUI_LEVEL_UP_RELEARN_LIST_VAR = "NUILevelUpRelearnList";
|
||||||
|
const string NUI_LEVEL_UP_ARCHIVIST_NEW_SPELLS_LIST_VAR = "NUILevelUpArchivistNewSpellsList";
|
||||||
|
|
||||||
|
const string NUI_LEVEL_UP_EXPANDED_CHOICES_VAR = "NUIExpandedChoices";
|
||||||
|
const string NUI_LEVEL_UP_EPIC_EXPANDED_CHOICES_VAR = "NUIEpicExpandedChoices";
|
||||||
|
|
||||||
|
const int NUI_LEVEL_UP_MANEUVER_PREREQ_LIMIT = 6;
|
||||||
|
|
||||||
|
const string NUI_LEVEL_UP_MANEUVER_TOTAL = "ManeuverTotal";
|
||||||
|
const string NUI_LEVEL_UP_STANCE_TOTAL = "StanceTotal";
|
||||||
|
|
||||||
|
const string NUI_LEVEL_UP_SPELLBOOK_OBJECT_CACHE_VAR = "GetSpellListObjectCache_";
|
||||||
|
const string NUI_LEVEL_UP_KNOWN_INVOCATIONS_CACHE_VAR = "GetInvokerKnownListObjectCache_";
|
||||||
|
|
||||||
|
const string NUI_SPELL_DESCRIPTION_FEATID_VAR = "NUISpellDescriptionFeatID";
|
||||||
|
const string NUI_SPELL_DESCRIPTION_CLASSID_VAR = "NUISpellDescriptionClassID";
|
||||||
|
const string NUI_SPELL_DESCRIPTION_SPELLID_VAR = "NUISpellDescriptionSpellID";
|
||||||
|
const string NUI_SPELL_DESCRIPTION_REAL_SPELLID_VAR = "NUISpellDescriptionRealSpellID";
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////
|
||||||
|
// //
|
||||||
|
// Spell Duration NUI //
|
||||||
|
// //
|
||||||
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
|
const string DURATION_NUI_WINDOW_ID = "DurationNUI";
|
||||||
|
const string NUI_DURATION_MANUALLY_OPENED_PARAM = "DurationNUIManuallyOpenedParam";
|
||||||
|
const string NUI_DURATION_NO_LOOP_PARAM = "DurationNUINoLoopParam";
|
||||||
|
const string NUI_DURATION_TRACKED_SPELLS = "durationNUI_trackedSpellList";
|
||||||
|
const string NUI_SPELL_DURATION_BASE_BIND = "durationNUI_durationSpellId";
|
||||||
|
const string NUI_SPELL_DURATION_SPELLID_BASE_CANCEL_BUTTON = "NuiDurationCancelButtonSpellID";
|
||||||
3316
src/include/prc_nui_lv_inc.nss
Normal file
3316
src/include/prc_nui_lv_inc.nss
Normal file
File diff suppressed because it is too large
Load Diff
845
src/include/prc_nui_sb_inc.nss
Normal file
845
src/include/prc_nui_sb_inc.nss
Normal file
@@ -0,0 +1,845 @@
|
|||||||
|
//::///////////////////////////////////////////////
|
||||||
|
//:: PRC Spellbook Script
|
||||||
|
//:: prc_nui_sb_inc
|
||||||
|
//:://////////////////////////////////////////////
|
||||||
|
/*
|
||||||
|
This is the script that handles some backend work for the PRC Spellbook
|
||||||
|
NUI View
|
||||||
|
*/
|
||||||
|
//:://////////////////////////////////////////////
|
||||||
|
//:: Created By: Rakiov
|
||||||
|
//:: Created On: 24.05.2005
|
||||||
|
//:://////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "prc_nui_com_inc"
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetSpellListForCircle
|
||||||
|
// Gets the spell list for a specified class at the specified circle.
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// oPlayer:object the player
|
||||||
|
// nClass:int the ClassID
|
||||||
|
// circle:int the circle we want to grab for
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// json:Array<int> a list of all the spellIDs of the given circle
|
||||||
|
//
|
||||||
|
json GetSpellListForCircle(object oPlayer, int nClass, int circle);
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetSupportedNUISpellbookClasses
|
||||||
|
// Gets the list of support PRC classes that can use the NUi spellbook that
|
||||||
|
// the player has.
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// oPlayer:object the player this is being determined for
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// json:int list of class ids that have the player has that can use the
|
||||||
|
// NUI spellbook.
|
||||||
|
//
|
||||||
|
json GetSupportedNUISpellbookClasses(object oPlayer);
|
||||||
|
|
||||||
|
//
|
||||||
|
// IsSpellKnown
|
||||||
|
// Returns whether the player with the given class, spell file, and spellbook id
|
||||||
|
// knows the spell or not
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// oPlayer;Object the player
|
||||||
|
// nClass:int the class ID
|
||||||
|
// spellId:int the spell ID to check
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// int:Boolean TRUE if spell is known, FALSE otherwise
|
||||||
|
//
|
||||||
|
int IsSpellKnown(object oPlayer, int nClass, int spellId);
|
||||||
|
|
||||||
|
//
|
||||||
|
// IsClassAllowedToUseNUISpellbook
|
||||||
|
// Takes a player and a classId and determines if thee class is allowed to
|
||||||
|
// be using the NUI spellbook.
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// oPlayer:Object the player
|
||||||
|
// nClass:int the ClassID
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// int:Boolean TRUE if allowed to use the spellbook, FALSE otherwise
|
||||||
|
//
|
||||||
|
int IsClassAllowedToUseNUISpellbook(object oPlayer, int nClass);
|
||||||
|
|
||||||
|
//
|
||||||
|
// CanClassUseMetamagicFeats
|
||||||
|
// Given a class id determines if it is allowed to use the Metamagic feats
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// nClass:int the ClassID
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// int:Boolean TRUE if allowed to use the set of feats, FALSE otherwise
|
||||||
|
//
|
||||||
|
int CanClassUseMetamagicFeats(int nClass);
|
||||||
|
|
||||||
|
//
|
||||||
|
// CanClassUseSuddenMetamagicFeats
|
||||||
|
// Given a class id determines if it is allowed to use the Sudden Metamagic feats
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// nClass:int the ClassID
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// int:Boolean TRUE if allowed to use the set of feats, FALSE otherwise
|
||||||
|
//
|
||||||
|
int CanClassUseSuddenMetamagicFeats(int nClass);
|
||||||
|
|
||||||
|
//
|
||||||
|
// CanClassUseMetaPsionicFeats
|
||||||
|
// Given a class id determines if it is allowed to use the MetaPsionic feats
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// nClass:int the ClassID
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// int:Boolean TRUE if allowed to use the set of feats, FALSE otherwise
|
||||||
|
//
|
||||||
|
int CanClassUseMetaPsionicFeats(int nClass);
|
||||||
|
|
||||||
|
//
|
||||||
|
// CanClassUseMetaMysteryFeats
|
||||||
|
// Given a class id determines if it is allowed to use the MetaMystery feats
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// nClass:int the ClassID
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// int:Boolean TRUE if allowed to use the set of feats, FALSE otherwise
|
||||||
|
//
|
||||||
|
int CanClassUseMetaMysteryFeats(int nClass);
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetMetaMagicFeatList
|
||||||
|
// Gets the list of MetaMagic featIDs
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// json:Array<int> the list of FeatIDs associated with the meta feats
|
||||||
|
//
|
||||||
|
json GetMetaMagicFeatList();
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetSuddenMetaMagicFeatList
|
||||||
|
// Gets the list of Sudden MetaMagic featIDs
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// json:Array<int> the list of FeatIDs associated with the meta feats
|
||||||
|
//
|
||||||
|
json GetSuddenMetaMagicFeatList();
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetMetaPsionicFeatList
|
||||||
|
// Gets the list of MetaPsionic featIDs
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// json:Array<int> the list of FeatIDs associated with the meta feats
|
||||||
|
//
|
||||||
|
json GetMetaPsionicFeatList();
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetMetaMagicMysteryList
|
||||||
|
// Gets the list of MetaMystery featIDs
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// json:Array<int> the list of FeatIDs associated with the meta feats
|
||||||
|
//
|
||||||
|
json GetMetaMysteryFeatList();
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetTrueClassIfRHD
|
||||||
|
// Checks to make sure if the provided RHD class and player's race
|
||||||
|
// match up to give them their proper spell caster class (ie Glouras have
|
||||||
|
// bard spells and thus should be treated like a bard class)
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// oPlayer:object the player
|
||||||
|
// nClass:int the ClassID
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// int the true ClassID to use, otherwise nClass
|
||||||
|
//
|
||||||
|
int GetTrueClassIfRHD(object oPlayer, int nClass);
|
||||||
|
|
||||||
|
//
|
||||||
|
// ShouldAddSpell
|
||||||
|
// Given a spellId and a class, determines if the spell should be added to the
|
||||||
|
// spellbook (as some are added in it's own special row or for other reasons)
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// nClass:int the ClassID
|
||||||
|
// spellId:int the SpellID
|
||||||
|
// oPlayer:object the player
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// int:Boolean TRUE if the spell should be added, FALSE otherwise
|
||||||
|
//
|
||||||
|
int ShouldAddSpell(int nClass, int spellId, object oPlayer=OBJECT_SELF);
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetToBStanceSpellList
|
||||||
|
// Gets the ToB Stance Spell List for the given class
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// nClass:int ClassID
|
||||||
|
// oPlayer:object the player
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// json:Array<Int> the list of stances' SpellIDs
|
||||||
|
//
|
||||||
|
json GetToBStanceSpellList(int nClass, object oPlayer=OBJECT_SELF);
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetInvokerShapeSpellList
|
||||||
|
// Gets the Invoker Shapes Spell List for the given class
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// nClass:int ClassID
|
||||||
|
// oPlayer:object the player
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// json:Array<Int> the list of shapes' SpellIDs
|
||||||
|
//
|
||||||
|
json GetInvokerShapeSpellList(int nClass, object oPlayer=OBJECT_SELF);
|
||||||
|
|
||||||
|
//
|
||||||
|
// GetInvokerEssenceSpellList
|
||||||
|
// Gets the Invoker Essences Spell List for the given class
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// nClass:int ClassID
|
||||||
|
// oPlayer:object the player
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// json:Array<Int> the list of essences' SpellIDs
|
||||||
|
//
|
||||||
|
json GetInvokerEssenceSpellList(int nClass, object oPlayer=OBJECT_SELF);
|
||||||
|
|
||||||
|
//
|
||||||
|
// JsonArrayContainsInt
|
||||||
|
// A helper function that takes a json array list and sees if the int item is within i
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// list:json:Array<Int> the list of ints
|
||||||
|
// item:int the item we are looking for
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// int:Boolean TRUE if item is found, FALSE otherwise
|
||||||
|
//
|
||||||
|
int JsonArrayContainsInt(json list, int item);
|
||||||
|
|
||||||
|
//
|
||||||
|
// IsSpellbookNUIOpen
|
||||||
|
// Checks to see if the Spellbook NUI is open on a given player.
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// oPC:object the player
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// int:Boolean TRUE if window is open, FALSE otherwise
|
||||||
|
//
|
||||||
|
int IsSpellbookNUIOpen(object oPC);
|
||||||
|
|
||||||
|
json GetSpellListForCircle(object oPlayer, int nClass, int circle)
|
||||||
|
{
|
||||||
|
json retValue = JsonArray();
|
||||||
|
string sFile = GetClassSpellbookFile(nClass);
|
||||||
|
int totalSpells;
|
||||||
|
json binderDictKeys;
|
||||||
|
//Special case for Binder since they don't have their own spellbook 2da
|
||||||
|
if (nClass == CLASS_TYPE_BINDER)
|
||||||
|
{
|
||||||
|
json binderDict = GetBinderSpellToFeatDictionary(oPlayer);
|
||||||
|
|
||||||
|
// we loop through the list of SpellIDs
|
||||||
|
binderDictKeys = JsonObjectKeys(binderDict);
|
||||||
|
totalSpells = JsonGetLength(binderDictKeys);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
totalSpells = Get2DARowCount(sFile);
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < totalSpells; i++)
|
||||||
|
{
|
||||||
|
int currentSpell;
|
||||||
|
if (nClass == CLASS_TYPE_BINDER)
|
||||||
|
currentSpell = StringToInt(JsonGetString(JsonArrayGet(binderDictKeys, i)));
|
||||||
|
else
|
||||||
|
currentSpell = StringToInt(Get2DACache(sFile, "SpellID", i));
|
||||||
|
|
||||||
|
if (ShouldAddSpell(nClass, currentSpell, oPlayer))
|
||||||
|
{
|
||||||
|
string sSpellLevel = Get2DACache("spells", "Innate", currentSpell);
|
||||||
|
int iSpellLevel = StringToInt(sSpellLevel);
|
||||||
|
|
||||||
|
if (nClass == CLASS_TYPE_BINDER && IsSpellKnown(oPlayer, nClass, currentSpell))
|
||||||
|
{
|
||||||
|
retValue = JsonArrayInsert(retValue, JsonInt(currentSpell));
|
||||||
|
}
|
||||||
|
else if ((iSpellLevel == circle && IntToString(iSpellLevel) == sSpellLevel))
|
||||||
|
{
|
||||||
|
// We add the spell if it is known and is not a radial master spell (since those don't work)
|
||||||
|
if (IsSpellKnown(oPlayer, nClass, currentSpell))
|
||||||
|
retValue = JsonArrayInsert(retValue, JsonInt(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return retValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ShouldAddSpell(int nClass, int spellId, object oPlayer=OBJECT_SELF)
|
||||||
|
{
|
||||||
|
int isRadialMasterSpell = StringToInt(Get2DACache("spells", "SubRadSpell1", spellId));
|
||||||
|
// We don't add radial master spells
|
||||||
|
if (isRadialMasterSpell)
|
||||||
|
return FALSE;
|
||||||
|
// we don't add essences and shapes
|
||||||
|
if (nClass == CLASS_TYPE_WARLOCK
|
||||||
|
|| nClass == CLASS_TYPE_DRAGONFIRE_ADEPT
|
||||||
|
|| nClass == CLASS_TYPE_DRAGON_SHAMAN)
|
||||||
|
{
|
||||||
|
json ignoreList = GetInvokerShapeSpellList(nClass, oPlayer);
|
||||||
|
if (JsonArrayContainsInt(ignoreList, spellId))
|
||||||
|
return FALSE;
|
||||||
|
ignoreList = GetInvokerEssenceSpellList(nClass, oPlayer);
|
||||||
|
if (JsonArrayContainsInt(ignoreList, spellId))
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
// we don't add stances
|
||||||
|
if (nClass == CLASS_TYPE_WARBLADE
|
||||||
|
|| nClass == CLASS_TYPE_SWORDSAGE
|
||||||
|
|| nClass == CLASS_TYPE_CRUSADER)
|
||||||
|
{
|
||||||
|
json ignoreList = GetToBStanceSpellList(nClass, oPlayer);
|
||||||
|
if (JsonArrayContainsInt(ignoreList, spellId))
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
json GetSupportedNUISpellbookClasses(object oPlayer)
|
||||||
|
{
|
||||||
|
json retValue = JsonArray();
|
||||||
|
int i = 1;
|
||||||
|
while(i >= 1)
|
||||||
|
{
|
||||||
|
int classId = GetClassByPosition(i, oPlayer);
|
||||||
|
if (classId != CLASS_TYPE_INVALID)
|
||||||
|
{
|
||||||
|
if (IsClassAllowedToUseNUISpellbook(oPlayer, classId))
|
||||||
|
{
|
||||||
|
classId = GetTrueClassIfRHD(oPlayer, classId);
|
||||||
|
retValue = JsonArrayInsert(retValue, JsonInt(classId));
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
i = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return retValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
int IsSpellKnown(object oPlayer, int nClass, int spellId)
|
||||||
|
{
|
||||||
|
// special case for Binders since they don't have a spell book 2da.
|
||||||
|
if (nClass == CLASS_TYPE_BINDER)
|
||||||
|
{
|
||||||
|
json binderDict = GetBinderSpellToFeatDictionary(oPlayer);
|
||||||
|
int featID = JsonGetInt(JsonObjectGet(binderDict, IntToString(spellId)));
|
||||||
|
return GetHasFeat(featID, oPlayer);
|
||||||
|
}
|
||||||
|
|
||||||
|
int currentSpell = spellId;
|
||||||
|
int masterSpell = StringToInt(Get2DACache("spells", "Master", currentSpell));
|
||||||
|
if (masterSpell) // If this is not 0 then this is a radial spell, check the radial master
|
||||||
|
currentSpell = masterSpell;
|
||||||
|
|
||||||
|
string sFeatID = Get2DACache("spells", "FeatID", currentSpell);
|
||||||
|
int iFeatID = StringToInt(sFeatID);
|
||||||
|
|
||||||
|
if (IntToString(iFeatID) == sFeatID)
|
||||||
|
return GetHasFeat(iFeatID, oPlayer);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int IsClassAllowedToUseNUISpellbook(object oPlayer, int nClass)
|
||||||
|
{
|
||||||
|
// This controls who can use the Spellbook NUI, if for some reason you don't
|
||||||
|
// want a class to be allowed to use this you can comment out their line here
|
||||||
|
|
||||||
|
// Bard and Sorc are allowed if they took a PRC that makes them use the spellbook
|
||||||
|
if ((nClass == CLASS_TYPE_BARD || nClass == CLASS_TYPE_SORCERER)
|
||||||
|
&& GetPrCAdjustedClassLevel(nClass, oPlayer) > GetLevelByClass(nClass, oPlayer))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
// Arcane Spont
|
||||||
|
if (nClass == CLASS_TYPE_BEGUILER
|
||||||
|
|| nClass == CLASS_TYPE_CELEBRANT_SHARESS
|
||||||
|
|| nClass == CLASS_TYPE_DREAD_NECROMANCER
|
||||||
|
|| nClass == CLASS_TYPE_DUSKBLADE
|
||||||
|
|| nClass == CLASS_TYPE_HARPER
|
||||||
|
|| nClass == CLASS_TYPE_HEXBLADE
|
||||||
|
|| nClass == CLASS_TYPE_KNIGHT_WEAVE
|
||||||
|
|| nClass == CLASS_TYPE_SHADOWLORD
|
||||||
|
|| nClass == CLASS_TYPE_SUBLIME_CHORD
|
||||||
|
|| nClass == CLASS_TYPE_SUEL_ARCHANAMACH
|
||||||
|
|| nClass == CLASS_TYPE_WARMAGE)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
// Psionics
|
||||||
|
if (nClass == CLASS_TYPE_FIST_OF_ZUOKEN
|
||||||
|
|| nClass == CLASS_TYPE_PSION
|
||||||
|
|| nClass == CLASS_TYPE_PSYWAR
|
||||||
|
|| nClass == CLASS_TYPE_WILDER
|
||||||
|
|| nClass == CLASS_TYPE_PSYCHIC_ROGUE
|
||||||
|
|| nClass == CLASS_TYPE_WARMIND)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
// Invokers
|
||||||
|
if (nClass == CLASS_TYPE_WARLOCK
|
||||||
|
|| nClass == CLASS_TYPE_DRAGON_SHAMAN
|
||||||
|
|| nClass == CLASS_TYPE_DRAGONFIRE_ADEPT)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
// Divine Spont
|
||||||
|
if (nClass == CLASS_TYPE_ARCHIVIST //while technically prepared, they use the spont system of casting
|
||||||
|
|| nClass == CLASS_TYPE_FAVOURED_SOUL
|
||||||
|
|| nClass == CLASS_TYPE_JUSTICEWW)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
// ToB Classes
|
||||||
|
if (nClass == CLASS_TYPE_WARBLADE
|
||||||
|
|| nClass == CLASS_TYPE_SWORDSAGE
|
||||||
|
|| nClass == CLASS_TYPE_CRUSADER)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
// Mystery Classes
|
||||||
|
if (nClass == CLASS_TYPE_SHADOWCASTER
|
||||||
|
|| nClass == CLASS_TYPE_SHADOWSMITH)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
// Truenamers
|
||||||
|
if (nClass == CLASS_TYPE_TRUENAMER)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
// RHD Casters
|
||||||
|
if ((nClass == CLASS_TYPE_SHAPECHANGER
|
||||||
|
&& GetRacialType(oPlayer) == RACIAL_TYPE_ARANEA
|
||||||
|
&& !GetLevelByClass(CLASS_TYPE_SORCERER))
|
||||||
|
|| (nClass == CLASS_TYPE_OUTSIDER
|
||||||
|
&& GetRacialType(oPlayer) == RACIAL_TYPE_RAKSHASA
|
||||||
|
&& !GetLevelByClass(CLASS_TYPE_SORCERER))
|
||||||
|
|| (nClass == CLASS_TYPE_ABERRATION
|
||||||
|
&& GetRacialType(oPlayer) == RACIAL_TYPE_DRIDER
|
||||||
|
&& !GetLevelByClass(CLASS_TYPE_SORCERER))
|
||||||
|
|| (nClass == CLASS_TYPE_MONSTROUS
|
||||||
|
&& GetRacialType(oPlayer) == RACIAL_TYPE_ARKAMOI
|
||||||
|
&& !GetLevelByClass(CLASS_TYPE_SORCERER))
|
||||||
|
|| (nClass == CLASS_TYPE_MONSTROUS
|
||||||
|
&& GetRacialType(oPlayer) == RACIAL_TYPE_HOBGOBLIN_WARSOUL
|
||||||
|
&& !GetLevelByClass(CLASS_TYPE_SORCERER))
|
||||||
|
|| (nClass == CLASS_TYPE_MONSTROUS
|
||||||
|
&& GetRacialType(oPlayer) == RACIAL_TYPE_REDSPAWN_ARCANISS
|
||||||
|
&& !GetLevelByClass(CLASS_TYPE_SORCERER))
|
||||||
|
|| (nClass == CLASS_TYPE_MONSTROUS
|
||||||
|
&& GetRacialType(oPlayer) == RACIAL_TYPE_MARRUTACT
|
||||||
|
&& !GetLevelByClass(CLASS_TYPE_SORCERER))
|
||||||
|
|| (nClass == CLASS_TYPE_FEY
|
||||||
|
&& GetRacialType(oPlayer) == RACIAL_TYPE_GLOURA
|
||||||
|
&& !GetLevelByClass(CLASS_TYPE_BARD)))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
// Binders
|
||||||
|
if (nClass == CLASS_TYPE_BINDER)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetTrueClassIfRHD(object oPlayer, int nClass)
|
||||||
|
{
|
||||||
|
if (nClass == CLASS_TYPE_SHAPECHANGER
|
||||||
|
&& GetRacialType(oPlayer) == RACIAL_TYPE_ARANEA)
|
||||||
|
return CLASS_TYPE_SORCERER;
|
||||||
|
if (nClass == CLASS_TYPE_OUTSIDER
|
||||||
|
&& GetRacialType(oPlayer) == RACIAL_TYPE_RAKSHASA)
|
||||||
|
return CLASS_TYPE_SORCERER;
|
||||||
|
if (nClass == CLASS_TYPE_ABERRATION
|
||||||
|
&& GetRacialType(oPlayer) == RACIAL_TYPE_DRIDER)
|
||||||
|
return CLASS_TYPE_SORCERER;
|
||||||
|
if (nClass == CLASS_TYPE_MONSTROUS
|
||||||
|
&& GetRacialType(oPlayer) == RACIAL_TYPE_ARKAMOI)
|
||||||
|
return CLASS_TYPE_SORCERER;
|
||||||
|
if (nClass == CLASS_TYPE_MONSTROUS
|
||||||
|
&& GetRacialType(oPlayer) == RACIAL_TYPE_HOBGOBLIN_WARSOUL)
|
||||||
|
return CLASS_TYPE_SORCERER;
|
||||||
|
if (nClass == CLASS_TYPE_MONSTROUS
|
||||||
|
&& GetRacialType(oPlayer) == RACIAL_TYPE_REDSPAWN_ARCANISS)
|
||||||
|
return CLASS_TYPE_SORCERER;
|
||||||
|
if (nClass == CLASS_TYPE_MONSTROUS
|
||||||
|
&& GetRacialType(oPlayer) == RACIAL_TYPE_MARRUTACT)
|
||||||
|
return CLASS_TYPE_SORCERER;
|
||||||
|
if (nClass == CLASS_TYPE_FEY
|
||||||
|
&& GetRacialType(oPlayer) == RACIAL_TYPE_GLOURA)
|
||||||
|
return CLASS_TYPE_BARD;
|
||||||
|
|
||||||
|
return nClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CanClassUseMetamagicFeats(int nClass)
|
||||||
|
{
|
||||||
|
// I don't want to spend the time looping through each class's
|
||||||
|
// feat 2da so this is the list of all classes that are allowed to use the
|
||||||
|
// Spellbook NUI and can use Metamagic
|
||||||
|
return (nClass == CLASS_TYPE_BARD
|
||||||
|
|| nClass == CLASS_TYPE_SORCERER
|
||||||
|
|| nClass == CLASS_TYPE_BEGUILER
|
||||||
|
|| nClass == CLASS_TYPE_DREAD_NECROMANCER
|
||||||
|
|| nClass == CLASS_TYPE_DUSKBLADE
|
||||||
|
|| nClass == CLASS_TYPE_HEXBLADE
|
||||||
|
|| nClass == CLASS_TYPE_JUSTICEWW
|
||||||
|
|| nClass == CLASS_TYPE_SUBLIME_CHORD
|
||||||
|
|| nClass == CLASS_TYPE_SUEL_ARCHANAMACH
|
||||||
|
|| nClass == CLASS_TYPE_FAVOURED_SOUL
|
||||||
|
|| nClass == CLASS_TYPE_WARMAGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
int CanClassUseSuddenMetamagicFeats(int nClass)
|
||||||
|
{
|
||||||
|
// I don't want to spend the time looping through each class's
|
||||||
|
// feat 2da so this is the list of all classes that are allowed to use the
|
||||||
|
// Spellbook NUI and can use Sudden Metamagic
|
||||||
|
return (nClass == CLASS_TYPE_SHADOWLORD
|
||||||
|
|| nClass == CLASS_TYPE_ARCHIVIST
|
||||||
|
|| nClass == CLASS_TYPE_BARD
|
||||||
|
|| nClass == CLASS_TYPE_BEGUILER
|
||||||
|
|| nClass == CLASS_TYPE_DREAD_NECROMANCER
|
||||||
|
|| nClass == CLASS_TYPE_DUSKBLADE
|
||||||
|
|| nClass == CLASS_TYPE_FAVOURED_SOUL
|
||||||
|
|| nClass == CLASS_TYPE_HEXBLADE
|
||||||
|
|| nClass == CLASS_TYPE_JUSTICEWW
|
||||||
|
|| nClass == CLASS_TYPE_KNIGHT_WEAVE
|
||||||
|
|| nClass == CLASS_TYPE_SUBLIME_CHORD
|
||||||
|
|| nClass == CLASS_TYPE_SORCERER
|
||||||
|
|| nClass == CLASS_TYPE_SUEL_ARCHANAMACH
|
||||||
|
|| nClass == CLASS_TYPE_WARMAGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
int CanClassUseMetaPsionicFeats(int nClass)
|
||||||
|
{
|
||||||
|
// I don't want to spend the time looping through each class's
|
||||||
|
// feat 2da so this is the list of all classes that are allowed to use the
|
||||||
|
// Spellbook NUI and can use Metapsionics
|
||||||
|
return (nClass == CLASS_TYPE_FIST_OF_ZUOKEN
|
||||||
|
|| nClass == CLASS_TYPE_PSION
|
||||||
|
|| nClass == CLASS_TYPE_PSYCHIC_ROGUE
|
||||||
|
|| nClass == CLASS_TYPE_PSYWAR
|
||||||
|
|| nClass == CLASS_TYPE_WARMIND
|
||||||
|
|| nClass == CLASS_TYPE_WILDER);
|
||||||
|
}
|
||||||
|
|
||||||
|
int CanClassUseMetaMysteryFeats(int nClass)
|
||||||
|
{
|
||||||
|
// I don't want to spend the time looping through each class's
|
||||||
|
// feat 2da so this is the list of all classes that are allowed to use the
|
||||||
|
// Spellbook NUI and can use Metamysteries
|
||||||
|
return (nClass == CLASS_TYPE_SHADOWCASTER
|
||||||
|
|| nClass == CLASS_TYPE_SHADOWSMITH);
|
||||||
|
}
|
||||||
|
|
||||||
|
json GetMetaMagicFeatList()
|
||||||
|
{
|
||||||
|
json metaFeats = JsonArray();
|
||||||
|
int spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_EXTEND_SPELL_ABILITY));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_EMPOWER_SPELL_ABILITY));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_MAXIMIZE_SPELL_ABILITY));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_QUICKEN_SPELL_ABILITY));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_STILL_SPELL_ABILITY));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_SILENT_SPELL_ABILITY));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
|
||||||
|
return metaFeats;
|
||||||
|
}
|
||||||
|
|
||||||
|
json GetSuddenMetaMagicFeatList()
|
||||||
|
{
|
||||||
|
json metaFeats = JsonArray();
|
||||||
|
int spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_SUDDEN_EXTEND));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_SUDDEN_EMPOWER));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_SUDDEN_MAXIMIZE));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_SUDDEN_WIDEN));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
|
||||||
|
return metaFeats;
|
||||||
|
}
|
||||||
|
|
||||||
|
json GetMetaPsionicFeatList()
|
||||||
|
{
|
||||||
|
json metaFeats = JsonArray();
|
||||||
|
int spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_EXTEND_POWER));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_EMPOWER_POWER));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_MAXIMIZE_POWER));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_QUICKEN_POWER));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_WIDEN_POWER));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_CHAIN_POWER));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_TWIN_POWER));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_SPLIT_PSIONIC_RAY));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
|
||||||
|
return metaFeats;
|
||||||
|
}
|
||||||
|
|
||||||
|
json GetMetaMysteryFeatList()
|
||||||
|
{
|
||||||
|
json metaFeats = JsonArray();
|
||||||
|
int spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_EXTEND_MYSTERY));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_EMPOWER_MYSTERY));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_MAXIMIZE_MYSTERY));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_QUICKEN_MYSTERY));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_STILL_MYSTERY));
|
||||||
|
metaFeats = JsonArrayInsert(metaFeats, JsonInt(spellId));
|
||||||
|
|
||||||
|
return metaFeats;
|
||||||
|
}
|
||||||
|
|
||||||
|
json GetToBStanceSpellList(int nClass, object oPlayer=OBJECT_SELF)
|
||||||
|
{
|
||||||
|
// caching
|
||||||
|
json stanceSpells = GetLocalJson(oPlayer, NUI_SPELLBOOK_CLASS_STANCES_CACHE_BASE_VAR + IntToString(nClass));
|
||||||
|
if (stanceSpells == JsonNull())
|
||||||
|
stanceSpells = JsonArray();
|
||||||
|
else
|
||||||
|
return stanceSpells;
|
||||||
|
|
||||||
|
string sFile = GetClassSpellbookFile(nClass);
|
||||||
|
int totalRows = Get2DARowCount(sFile);
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < totalRows; i++)
|
||||||
|
{
|
||||||
|
int Type = StringToInt(Get2DACache(sFile, "Type", i));
|
||||||
|
if (Type == 1)
|
||||||
|
{
|
||||||
|
int spellId = StringToInt(Get2DACache(sFile, "SpellID", i));
|
||||||
|
stanceSpells = JsonArrayInsert(stanceSpells, JsonInt(spellId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SetLocalJson(oPlayer, NUI_SPELLBOOK_CLASS_STANCES_CACHE_BASE_VAR + IntToString(nClass), stanceSpells);
|
||||||
|
return stanceSpells;
|
||||||
|
}
|
||||||
|
|
||||||
|
json GetInvokerShapeSpellList(int nClass, object oPlayer=OBJECT_SELF)
|
||||||
|
{
|
||||||
|
// caching
|
||||||
|
json shapeSpells = GetLocalJson(oPlayer, NUI_SPELLBOOK_CLASS_SHAPES_CACHE_BASE_VAR + IntToString(nClass));
|
||||||
|
if (shapeSpells == JsonNull())
|
||||||
|
shapeSpells = JsonArray();
|
||||||
|
else
|
||||||
|
return shapeSpells;
|
||||||
|
|
||||||
|
string sFile = GetClassSpellbookFile(nClass);
|
||||||
|
int totalRows = Get2DARowCount(sFile);
|
||||||
|
|
||||||
|
if (nClass == CLASS_TYPE_WARLOCK)
|
||||||
|
{
|
||||||
|
// Add the ELdritch Blast shapes
|
||||||
|
// TODO: Replace these magic SpellID ints with consts
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(INVOKE_ELDRITCH_BLAST));
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(18216)); // Eldritch Chain
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(18245)); // Eldritch Cone
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(18261)); // Eldritch Doom
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(18172)); // Glaive
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(18246)); // Eldritch Line
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(18173)); // Eldritch Spear
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nClass == CLASS_TYPE_DRAGON_SHAMAN)
|
||||||
|
{
|
||||||
|
// Add the Dragon Shaman Auras
|
||||||
|
int spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_ENERGY));
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_ENERGYSHLD));
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_INSIGHT));
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_MAGICPOWER));
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_POWER));
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_PRESENCE));
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_RESISTANCE));
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_RESOLVE));
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_SENSES));
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_STAMINA));
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_SWIFTNESS));
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_TOUGHNESS));
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_DRAGONSHAMAN_AURA_VIGOR));
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(spellId));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nClass == CLASS_TYPE_DRAGONFIRE_ADEPT)
|
||||||
|
{
|
||||||
|
// Add Dragon Adept Breaths
|
||||||
|
// TODO: Replace these magic SpellID ints with consts
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2102)); // Fire Cone
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2103)); // Fire Line
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2104)); // Frost Cone
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2105)); // Electric Line
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2106)); // Sickness Cone
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2108)); // Acid Cone
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2109)); // Acid Line
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2111)); // Slow Cone
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2112)); // Weakening Cone
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2115)); // Sleep Cone
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2116)); // Thunder Cone
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2117)); // Bahamut Line
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2118)); // Force Line
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2119)); // Paralyzation Line
|
||||||
|
shapeSpells = JsonArrayInsert(shapeSpells, JsonInt(2120)); // Tiamat Breath
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SetLocalJson(oPlayer, NUI_SPELLBOOK_CLASS_SHAPES_CACHE_BASE_VAR + IntToString(nClass), shapeSpells);
|
||||||
|
return shapeSpells;
|
||||||
|
}
|
||||||
|
|
||||||
|
json GetInvokerEssenceSpellList(int nClass, object oPlayer=OBJECT_SELF)
|
||||||
|
{
|
||||||
|
//caching
|
||||||
|
json essenceSpells = GetLocalJson(oPlayer, NUI_SPELLBOOK_CLASS_ESSENCE_CACHE_BASE_VAR + IntToString(nClass));
|
||||||
|
if (essenceSpells == JsonNull())
|
||||||
|
essenceSpells = JsonArray();
|
||||||
|
else
|
||||||
|
return essenceSpells;
|
||||||
|
|
||||||
|
if (nClass == CLASS_TYPE_WARLOCK)
|
||||||
|
{
|
||||||
|
// Add Eldritch Essences
|
||||||
|
// TODO: Replace these magic SpellID ints with consts
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18177)); // Hideous Blow
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18189)); // Baneful Abberation
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18190)); // Baneful Beast
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18191)); // Baneful Construct
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18192)); // Baneful Dragon
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18193)); // Baneful Dwarf
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18194)); // Baneful Elemental
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18195)); // Baneful Elf
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18196)); // baneful Fey
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18197)); // Baneful Giant
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18198)); // Baneful Goblinoid
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18199)); // Baneful Gnome
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18200)); // Baneful Halfling
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18201)); // Baneful Human
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18202)); // Baneful Monsterous
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18203)); // Baneful Orc
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18204)); // Baneful Outsider
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18205)); // Baneful Plant
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18206)); // Baneful Reptilian
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18207)); // Baneful Shapechanger
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18208)); // Baneful Undead
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18209)); // Baneful Vermin
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18210)); // Beshadowed Blast
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18240)); // Bewitching Blast
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18257)); // Binding Blast
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18211)); // Brimstone Blast
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18175)); // Frightful Blast
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18176)); // Hammer Blast
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18183)); // Sickening Blast
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(INVOKE_HEALING_BLAST));
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(INVOKE_HELLFIRE_BLAST));
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(INVOKE_HELLFIRE_BLOW));
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(INVOKE_HELLFIRE_CHAIN));
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(INVOKE_HELLFIRE_CONE));
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(INVOKE_HELLFIRE_DOOM));
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(INVOKE_HELLFIRE_GLAIVE));
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(INVOKE_HELLFIRE_LINE));
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(INVOKE_HELLFIRE_SPEAR));
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18220)); // Hellrime Blast
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18177)); // Hideous Blow
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18249)); // Hindering Blast
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18251)); // Noxious Blast
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18253)); // Penetrating Blast
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18267)); // Utterdark Blast
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(18255)); // Vitriolic Blast
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nClass == CLASS_TYPE_DRAGONFIRE_ADEPT)
|
||||||
|
{
|
||||||
|
// Add the Dragonfire Adept Shapes
|
||||||
|
int spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_SHAPED_ADEPTBREATH));
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_CLOUD_ADEPTBREATH));
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(spellId));
|
||||||
|
spellId = StringToInt(Get2DACache("feat", "SPELLID", FEAT_ENDURE_ADEPTBREATH));
|
||||||
|
essenceSpells = JsonArrayInsert(essenceSpells, JsonInt(spellId));
|
||||||
|
}
|
||||||
|
|
||||||
|
SetLocalJson(oPlayer, NUI_SPELLBOOK_CLASS_ESSENCE_CACHE_BASE_VAR + IntToString(nClass), essenceSpells);
|
||||||
|
return essenceSpells;
|
||||||
|
}
|
||||||
|
|
||||||
|
int JsonArrayContainsInt(json list, int item)
|
||||||
|
{
|
||||||
|
int totalCount = JsonGetLength(list);
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < totalCount; i++)
|
||||||
|
{
|
||||||
|
if (JsonGetInt(JsonArrayGet(list, i)) == item)
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int IsSpellbookNUIOpen(object oPC)
|
||||||
|
{
|
||||||
|
int nPreviousToken = NuiFindWindow(oPC, PRC_SPELLBOOK_NUI_WINDOW_ID);
|
||||||
|
if (nPreviousToken != 0)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
104
src/include/prc_nui_sbd_inc.nss
Normal file
104
src/include/prc_nui_sbd_inc.nss
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
//::///////////////////////////////////////////////
|
||||||
|
//:: PRC Spellbook Description NUI
|
||||||
|
//:: prc_nui_sbd_inc
|
||||||
|
//:://////////////////////////////////////////////
|
||||||
|
/*
|
||||||
|
This is the view for the Spell Description NUI
|
||||||
|
*/
|
||||||
|
//:://////////////////////////////////////////////
|
||||||
|
//:: Created By: Rakiov
|
||||||
|
//:: Created On: 29.05.2005
|
||||||
|
//:://////////////////////////////////////////////
|
||||||
|
#include "nw_inc_nui"
|
||||||
|
#include "prc_nui_consts"
|
||||||
|
#include "inc_2dacache"
|
||||||
|
|
||||||
|
//
|
||||||
|
// CreateSpellDescriptionNUI
|
||||||
|
// Creates a Spell Description NUI mimicing the description GUI of NWN
|
||||||
|
//
|
||||||
|
// Arguments:
|
||||||
|
// oPlayer:Object the player object
|
||||||
|
// featID:int the FeatID
|
||||||
|
// spellId:int the SpellID
|
||||||
|
// realSpellId:int the RealSpellID
|
||||||
|
//
|
||||||
|
void CreateSpellDescriptionNUI(object oPlayer, int featID, int spellId=0, int realSpellId=0);
|
||||||
|
|
||||||
|
void CreateSpellDescriptionNUI(object oPlayer, int featID, int spellId=0, int realSpellId=0)
|
||||||
|
{
|
||||||
|
// look for existing window and destroy
|
||||||
|
int nPreviousToken = NuiFindWindow(oPlayer, NUI_SPELL_DESCRIPTION_WINDOW_ID);
|
||||||
|
if(nPreviousToken != 0)
|
||||||
|
{
|
||||||
|
NuiDestroy(oPlayer, nPreviousToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* int nPreviousToken = NuiFindWindow(OBJECT_SELF, NUI_SPELL_DESCRIPTION_WINDOW_ID);
|
||||||
|
if(nPreviousToken != 0)
|
||||||
|
{
|
||||||
|
NuiDestroy(OBJECT_SELF, nPreviousToken);
|
||||||
|
} */
|
||||||
|
|
||||||
|
// in order of accuracy for names it goes RealSpellID > SpellID > FeatID
|
||||||
|
string spellName;
|
||||||
|
if (realSpellId)
|
||||||
|
spellName = GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", realSpellId)));
|
||||||
|
else if (spellId)
|
||||||
|
spellName = GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", spellId)));
|
||||||
|
else
|
||||||
|
spellName = GetStringByStrRef(StringToInt(Get2DACache("feat", "FEAT", featID)));
|
||||||
|
// Descriptions and Icons are accuratly stored on the feat
|
||||||
|
string spellDesc = GetStringByStrRef(StringToInt(Get2DACache("feat", "DESCRIPTION", featID)));
|
||||||
|
string spellIcon = Get2DACache("feat", "ICON", featID);
|
||||||
|
|
||||||
|
json jRoot = JsonArray();
|
||||||
|
json jGroup = JsonArray();
|
||||||
|
|
||||||
|
json jRow = JsonArray();
|
||||||
|
|
||||||
|
json jImage = NuiImage(JsonString(spellIcon), JsonInt(NUI_ASPECT_EXACT), JsonInt(NUI_HALIGN_LEFT), JsonInt(NUI_VALIGN_TOP));
|
||||||
|
jImage = NuiWidth(jImage, 32.0f);
|
||||||
|
jRow = JsonArrayInsert(jRow, jImage);
|
||||||
|
jRow = NuiCol(jRow);
|
||||||
|
jGroup = JsonArrayInsert(jGroup, jRow);
|
||||||
|
|
||||||
|
jRow = JsonArray();
|
||||||
|
json jText = NuiText(JsonString(spellDesc), FALSE, NUI_SCROLLBARS_AUTO);
|
||||||
|
jRow = JsonArrayInsert(jRow, jText);
|
||||||
|
jRow = NuiCol(jRow);
|
||||||
|
jGroup = JsonArrayInsert(jGroup, jRow);
|
||||||
|
|
||||||
|
jGroup = NuiRow(jGroup);
|
||||||
|
jGroup = NuiGroup(jGroup, TRUE, NUI_SCROLLBARS_NONE);
|
||||||
|
jRoot = JsonArrayInsert(jRoot, jGroup);
|
||||||
|
|
||||||
|
jRow = JsonArray();
|
||||||
|
jRow = JsonArrayInsert(jRow, NuiSpacer());
|
||||||
|
json jButton = NuiId(NuiButton(JsonString("OK")), NUI_SPELL_DESCRIPTION_OK_BUTTON);
|
||||||
|
jButton = NuiWidth(jButton, 175.0f);
|
||||||
|
jButton = NuiHeight(jButton, 48.0f);
|
||||||
|
jRow = JsonArrayInsert(jRow, jButton);
|
||||||
|
jRow = NuiRow(jRow);
|
||||||
|
|
||||||
|
jRoot = JsonArrayInsert(jRoot, jRow);
|
||||||
|
jRoot = NuiCol(jRoot);
|
||||||
|
|
||||||
|
|
||||||
|
// This is the main window with jRoot as the main pane. It includes titles and parameters (more on those later)
|
||||||
|
json nui = NuiWindow(jRoot, JsonString(spellName), NuiBind("geometry"), NuiBind("resizable"), JsonBool(FALSE), NuiBind("closable"), NuiBind("transparent"), NuiBind("border"));
|
||||||
|
|
||||||
|
// finally create it and it'll return us a non-zero token.
|
||||||
|
int nToken = NuiCreate(oPlayer, nui, NUI_SPELL_DESCRIPTION_WINDOW_ID);
|
||||||
|
|
||||||
|
// get the geometry of the window in case we opened this before and have a
|
||||||
|
// preference for location
|
||||||
|
json geometry = NuiRect(893.0f,346.0f, 426.0f, 446.0f);
|
||||||
|
|
||||||
|
// Set the binds to their default values
|
||||||
|
NuiSetBind(oPlayer, nToken, "geometry", geometry);
|
||||||
|
NuiSetBind(oPlayer, nToken, "resizable", JsonBool(FALSE));
|
||||||
|
NuiSetBind(oPlayer, nToken, "closable", JsonBool(FALSE));
|
||||||
|
NuiSetBind(oPlayer, nToken, "transparent", JsonBool(FALSE));
|
||||||
|
NuiSetBind(oPlayer, nToken, "border", JsonBool(TRUE));
|
||||||
|
}
|
||||||
@@ -180,6 +180,24 @@ void RunImpactScript(object oPC, int nSpellID, int nEventType)
|
|||||||
DeleteLocalInt(oPC, PRC_SPELLID_OVERRIDE);
|
DeleteLocalInt(oPC, PRC_SPELLID_OVERRIDE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Returns true if the spell is one of the repair spells
|
||||||
|
int IsRepair(int nSpellID)
|
||||||
|
{
|
||||||
|
return ((nSpellID >= SPELL_REPAIR_MINOR_DAMAGE) && (nSpellID <= SPELL_REPAIR_CRITICAL_DAMAGE));
|
||||||
|
}
|
||||||
|
|
||||||
|
//Returns true if the spell is one of the mass repair spells
|
||||||
|
int IsMassRepair(int nSpellID)
|
||||||
|
{
|
||||||
|
return ((nSpellID >= SPELL_MASS_REPAIR_LIGHT_DAMAGE) && (nSpellID <= SPELL_MASS_REPAIR_CRITICAL_DAMAGE));
|
||||||
|
}
|
||||||
|
|
||||||
|
//Returns true if the spell is one of the mass inflict damage spells
|
||||||
|
int IsMassInflictDamage(int nSpellID)
|
||||||
|
{
|
||||||
|
return ((nSpellID >= SPELL_MASS_INFLICT_LIGHT_DAMAGE) && (nSpellID <= SPELL_MASS_INFLICT_CRITICAL_DAMAGE));
|
||||||
|
}
|
||||||
|
|
||||||
//Returns true if the spell is one of the cure spells
|
//Returns true if the spell is one of the cure spells
|
||||||
int IsCure(int nSpellID)
|
int IsCure(int nSpellID)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,6 +13,9 @@ const int SPELL_BLACKLIGHT = 2091;
|
|||||||
const int SPELL_BARD_SONG = 411;
|
const int SPELL_BARD_SONG = 411;
|
||||||
const int SPELL_BARD_CURSE_SONG = 644;
|
const int SPELL_BARD_CURSE_SONG = 644;
|
||||||
|
|
||||||
|
//:: Monk
|
||||||
|
const int SPELL_MONK_ABUNDANT_STEP = 17986;
|
||||||
|
|
||||||
//:: Epic Level Handbook
|
//:: Epic Level Handbook
|
||||||
const int SPELL_EPIC_SWARM_OF_ARROWS = 17996;
|
const int SPELL_EPIC_SWARM_OF_ARROWS = 17996;
|
||||||
|
|
||||||
@@ -22,6 +25,9 @@ const int SPELL_BCM_RENDING_CLAWS = 17997;
|
|||||||
//:: Complete Warrior
|
//:: Complete Warrior
|
||||||
const int SPELL_RANGED_DISARM = 3493;
|
const int SPELL_RANGED_DISARM = 3493;
|
||||||
|
|
||||||
|
//:: Tome of Battle
|
||||||
|
const int SPELL_TOB_SNAP_KICK = 3794;
|
||||||
|
|
||||||
//marshal
|
//marshal
|
||||||
const int SPELL_MINAUR_DEMFORT = 3500;
|
const int SPELL_MINAUR_DEMFORT = 3500;
|
||||||
const int SPELL_MINAUR_FORCEWILL = 3501;
|
const int SPELL_MINAUR_FORCEWILL = 3501;
|
||||||
@@ -1289,14 +1295,104 @@ const int SPELL_SUMMON_CREATURE_IX_WATER = 3200;
|
|||||||
//:: Player's Handbook Spells
|
//:: Player's Handbook Spells
|
||||||
const int SPELL_SPIRITUAL_WEAPON = 17249;
|
const int SPELL_SPIRITUAL_WEAPON = 17249;
|
||||||
|
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_1 = 17000;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_1_DIREBADGER = 17001;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_1_DIRERAT = 17002;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_1_DOG = 17003;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_1_HAWK = 17004;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_1_TINY_VIPER = 17005;
|
||||||
|
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_2 = 17010;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_2_DIREBOAR = 17011;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_2_COOSHEE = 17012;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_2_WOLF = 17013;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_2_SMALL_VIPER = 17014;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_2_BLACKBEAR = 17015;
|
||||||
|
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_3 = 17020;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_3_BROWNBEAR = 17021;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_3_DIREWOLK = 17022;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_3_LARGE_VIPER = 17023;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_3_LEOPARD = 17024;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_3_SATYR = 17025;
|
||||||
|
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_4 = 17030;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_4_LION = 17031;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_4_POLAR_BEAR = 17032;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_4_DIRE_SPIDER = 17033;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_4_HUGE_VIPER = 17034;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_4_WEREBOAR = 17035;
|
||||||
|
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_5 = 17040;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_5_MED_AIR = 17041;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_5_MED_EARTH = 17042;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_5_MED_FIRE = 17043;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_5_MED_WATER = 17044;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_5_DIRE_BEAR = 17045;
|
||||||
|
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_6 = 17050;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_6_LG_AIR = 17051;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_6_LG_EARTH = 17052;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_6_LG_FIRE = 17053;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_6_LG_WATER = 17054;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_6_DIRETIGER = 17055;
|
||||||
|
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_7 = 17060;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_7_BULETTE = 17061;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_7_INVSTALKER = 17062;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_7_PIXIE = 17063;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_7_GORGON = 17064;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_7_MANTICORE = 17065;
|
||||||
|
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_8 = 17070;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_8_GR_AIR = 17071;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_8_GR_EARTH = 17072;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_8_GR_FIRE = 17073;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_8_GR_WATER = 17074;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_8_NYMPH = 17075;
|
||||||
|
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_9 = 17080;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_9_ELD_AIR = 17081;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_9_ELD_EARTH = 17082;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_9_ELD_FIRE = 17083;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_9_ELD_WATER = 17084;
|
||||||
|
const int SPELL_SUMMON_NATURES_ALLY_9_ARANEA = 17085;
|
||||||
|
|
||||||
//:: Player's Handbook II Spells
|
//:: Player's Handbook II Spells
|
||||||
const int SPELL_CHASING_PERFECTION = 2479;
|
const int SPELL_CHASING_PERFECTION = 2479;
|
||||||
|
|
||||||
//:: Spell Compendium Spells
|
//:: Spell Compendium Spells
|
||||||
const int SPELL_SPIRIT_WORM = 17248;
|
|
||||||
const int SPELL_FORCE_MISSILES = 2480;
|
const int SPELL_FORCE_MISSILES = 2480;
|
||||||
|
const int SPELL_REPAIR_MINOR_DAMAGE = 17094;
|
||||||
|
const int SPELL_REPAIR_LIGHT_DAMAGE = 17095;
|
||||||
|
const int SPELL_REPAIR_MODERATE_DAMAGE = 17096;
|
||||||
|
const int SPELL_REPAIR_SERIOUS_DAMAGE = 17097;
|
||||||
|
const int SPELL_REPAIR_CRITICAL_DAMAGE = 17098;
|
||||||
|
const int SPELL_INFLICT_LIGHT_DAMAGE = 17100;
|
||||||
|
const int SPELL_INFLICT_MODERATE_DAMAGE = 17101;
|
||||||
|
const int SPELL_INFLICT_SERIOUS_DAMAGE = 17102;
|
||||||
|
const int SPELL_INFLICT_CRITICAL_DAMAGE = 17103;
|
||||||
|
const int SPELL_SPIRIT_WORM = 17248;
|
||||||
|
|
||||||
|
//:: Races of Eberron
|
||||||
|
const int SPELL_MASS_REPAIR_LIGHT_DAMAGE = 17105;
|
||||||
|
const int SPELL_MASS_REPAIR_MODERATE_DAMAGE = 17106;
|
||||||
|
const int SPELL_MASS_REPAIR_SERIOUS_DAMAGE = 17107;
|
||||||
|
const int SPELL_MASS_REPAIR_CRITICAL_DAMAGE = 17108;
|
||||||
|
const int SPELL_MASS_INFLICT_LIGHT_DAMAGE = 17110;
|
||||||
|
const int SPELL_MASS_INFLICT_MODERATE_DAMAGE = 17111;
|
||||||
|
const int SPELL_MASS_INFLICT_SERIOUS_DAMAGE = 17112;
|
||||||
|
const int SPELL_MASS_INFLICT_CRITICAL_DAMAGE = 17113;
|
||||||
|
|
||||||
//:: Masters of the Wild Spells
|
//:: Masters of the Wild Spells
|
||||||
|
const int SPELL_FORESTFOLD = 17090;
|
||||||
|
const int SPELL_CREEPING_COLD = 17091;
|
||||||
|
const int SPELL_GREATER_CREEPING_COLD = 17092;
|
||||||
|
const int SPELL_CONTROL_PLANTS = 17237;
|
||||||
|
const int SPELL_ADRENALINE_SURGE = 17238;
|
||||||
|
const int SPELL_INVULNERABILITY_TO_ELEMENTS = 17239;
|
||||||
|
const int SPELL_REGEN_RING = 17241;
|
||||||
|
const int SPELL_REGEN_CIRCLE = 17242;
|
||||||
const int SPELL_REGEN_LIGHT_WOUNDS = 17243;
|
const int SPELL_REGEN_LIGHT_WOUNDS = 17243;
|
||||||
const int SPELL_REGEN_MODERATE_WOUNDS = 17244;
|
const int SPELL_REGEN_MODERATE_WOUNDS = 17244;
|
||||||
const int SPELL_REGEN_SERIOUS_WOUNDS = 17245;
|
const int SPELL_REGEN_SERIOUS_WOUNDS = 17245;
|
||||||
@@ -1304,6 +1400,24 @@ const int SPELL_REGEN_CRITICAL_WOUNDS = 17246;
|
|||||||
const int SPELL_SPEED_WIND = 17247;
|
const int SPELL_SPEED_WIND = 17247;
|
||||||
const int SPELL_TORTISE_SHELL = 17250;
|
const int SPELL_TORTISE_SHELL = 17250;
|
||||||
|
|
||||||
|
//:: Book of Exalted Deeds Spells
|
||||||
|
const int SPELL_LEONALS_ROAR = 17240;
|
||||||
|
|
||||||
|
//:: Master of the Wild Feats
|
||||||
|
const int SPELL_VL_WILD_SHAPE_TREANT = 17989;
|
||||||
|
const int SPELL_VL_ANIMATE_TREE = 17990;
|
||||||
|
const int SPELL_PLANT_DEFIANCE = 17991;
|
||||||
|
const int SPELL_PLANT_CONTROL = 17992;
|
||||||
|
|
||||||
|
//:: Book of Exalted Deeds Feats
|
||||||
|
const int SPELL_FOT_LEONALS_ROAR = 17993;
|
||||||
|
const int SPELL_FOT_LIONS_SWIFTNESS = 17994;
|
||||||
|
const int SPELL_FAVORED_OF_THE_COMPANIONS = 17995;
|
||||||
|
|
||||||
|
//:: Magic Item Compendium
|
||||||
|
const int SPELL_AROMA_OF_CURDLED_DEATH = 17987;
|
||||||
|
const int SPELL_ELIXIR_OF_THE_BEETLE = 17987;
|
||||||
|
|
||||||
//x
|
//x
|
||||||
const int SPELL_TENSERS_FLOATING_DISK = 3849;
|
const int SPELL_TENSERS_FLOATING_DISK = 3849;
|
||||||
const int SPELL_WOLFSKIN = 3850;
|
const int SPELL_WOLFSKIN = 3850;
|
||||||
|
|||||||
@@ -299,6 +299,7 @@ int SpellfireDrainItem(object oPC, object oItem, int bCharged = TRUE, int bSingl
|
|||||||
{
|
{
|
||||||
|
|
||||||
if((nBase == BASE_ITEM_POTIONS) ||
|
if((nBase == BASE_ITEM_POTIONS) ||
|
||||||
|
(nBase == BASE_ITEM_INFUSED_HERB) ||
|
||||||
(nBase == BASE_ITEM_SCROLL) ||
|
(nBase == BASE_ITEM_SCROLL) ||
|
||||||
(nBase == BASE_ITEM_SPELLSCROLL) ||
|
(nBase == BASE_ITEM_SPELLSCROLL) ||
|
||||||
(nBase == BASE_ITEM_BLANK_POTION) ||
|
(nBase == BASE_ITEM_BLANK_POTION) ||
|
||||||
@@ -382,6 +383,7 @@ void SpellfireDrain(object oPC, object oTarget, int bCharged = TRUE, int bExempt
|
|||||||
if(GetPRCSwitch(PRC_SPELLFIRE_DISALLOW_DRAIN_SCROLL_POTION) &&
|
if(GetPRCSwitch(PRC_SPELLFIRE_DISALLOW_DRAIN_SCROLL_POTION) &&
|
||||||
((nBase == BASE_ITEM_POTIONS) ||
|
((nBase == BASE_ITEM_POTIONS) ||
|
||||||
(nBase == BASE_ITEM_SCROLL) ||
|
(nBase == BASE_ITEM_SCROLL) ||
|
||||||
|
(nBase == BASE_ITEM_INFUSED_HERB) ||
|
||||||
(nBase == BASE_ITEM_BLANK_POTION) ||
|
(nBase == BASE_ITEM_BLANK_POTION) ||
|
||||||
(nBase == BASE_ITEM_BLANK_SCROLL)
|
(nBase == BASE_ITEM_BLANK_SCROLL)
|
||||||
)
|
)
|
||||||
@@ -485,7 +487,8 @@ void SpellfireChargeItem(object oPC, object oItem)
|
|||||||
AddSpellfireLevels(oPC, nNewCharges - 50);
|
AddSpellfireLevels(oPC, nNewCharges - 50);
|
||||||
nNewCharges = 50;
|
nNewCharges = 50;
|
||||||
}
|
}
|
||||||
SetItemCharges(oItem, nCharges + nExpend);
|
//SetItemCharges(oItem, nCharges + nExpend);
|
||||||
|
SetItemCharges(oItem, nNewCharges);
|
||||||
//Assuming 50 is the maximum
|
//Assuming 50 is the maximum
|
||||||
//refunding excess charges
|
//refunding excess charges
|
||||||
}
|
}
|
||||||
@@ -525,3 +528,4 @@ void SpellfireCrown(object oPC)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//:: void main() {}
|
||||||
74
src/include/prc_string_inc.nss
Normal file
74
src/include/prc_string_inc.nss
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
//::///////////////////////////////////////////////
|
||||||
|
//:: String Util
|
||||||
|
//:: prc_string_inc
|
||||||
|
//:://////////////////////////////////////////////
|
||||||
|
/*
|
||||||
|
A util class for providing useful string functions.
|
||||||
|
*/
|
||||||
|
//:://////////////////////////////////////////////
|
||||||
|
//:: Created By: Rakiov
|
||||||
|
//:: Created On: 22.05.2005
|
||||||
|
//:://////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "inc_utility"
|
||||||
|
|
||||||
|
//
|
||||||
|
// StringSplit
|
||||||
|
// Takes a string and splits it by " " into a json list of strings
|
||||||
|
// i.e. "this is a test" returns
|
||||||
|
// {
|
||||||
|
// "this",
|
||||||
|
// "is",
|
||||||
|
// "a",
|
||||||
|
// "test"
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// string input the string input
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// json the json list of words
|
||||||
|
//
|
||||||
|
json StringSplit(string input);
|
||||||
|
|
||||||
|
json StringSplit(string input)
|
||||||
|
{
|
||||||
|
json retValue = JsonArray();
|
||||||
|
|
||||||
|
string subString = "";
|
||||||
|
//trim any whitespace characters first
|
||||||
|
string currString = PRCTrimString(input);
|
||||||
|
|
||||||
|
// loop until we process the whole string
|
||||||
|
while(currString != "")
|
||||||
|
{
|
||||||
|
string currChar = GetStringLeft(currString, 1);
|
||||||
|
if (currChar != "" && currChar != " ")
|
||||||
|
{
|
||||||
|
// if the current character isn't nothing or whitespace, then add it
|
||||||
|
// to the current sub string.
|
||||||
|
subString += currChar;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// otherwise if the substring is not empty, then add it to the list
|
||||||
|
// of words to return
|
||||||
|
if(subString != "")
|
||||||
|
{
|
||||||
|
retValue = JsonArrayInsert(retValue, JsonString(subString));
|
||||||
|
subString = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// pop and move to next character
|
||||||
|
currString = GetStringRight(currString, GetStringLength(currString)-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// if there is any sub string left at the end of the loop, add it to the list
|
||||||
|
if(subString != "")
|
||||||
|
{
|
||||||
|
retValue = JsonArrayInsert(retValue, JsonString(subString));
|
||||||
|
}
|
||||||
|
|
||||||
|
return retValue;
|
||||||
|
}
|
||||||
@@ -18,6 +18,7 @@ const int TEMPLATE_CURST = 26;
|
|||||||
const int TEMPLATE_GRAVETOUCHED_GHOUL = 29;
|
const int TEMPLATE_GRAVETOUCHED_GHOUL = 29;
|
||||||
const int TEMPLATE_CRYPTSPAWN = 30;
|
const int TEMPLATE_CRYPTSPAWN = 30;
|
||||||
const int TEMPLATE_ARCHLICH = 99;
|
const int TEMPLATE_ARCHLICH = 99;
|
||||||
|
const int TEMPLATE_BAELNORN = 100;
|
||||||
const int TEMPLATE_LICH = 101;
|
const int TEMPLATE_LICH = 101;
|
||||||
const int TEMPLATE_DEMILICH = 102;
|
const int TEMPLATE_DEMILICH = 102;
|
||||||
const int TEMPLATE_NECROPOLITAN = 105;
|
const int TEMPLATE_NECROPOLITAN = 105;
|
||||||
|
|||||||
@@ -47,12 +47,10 @@ int GetWeaponFocusFeatItemProperty(int nFeatNumber)
|
|||||||
if(nItemProperty != -1) return nItemProperty;
|
if(nItemProperty != -1) return nItemProperty;
|
||||||
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_TRIDENT, IP_CONST_FEAT_WEAPON_FOCUS_TRIDENT);
|
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_TRIDENT, IP_CONST_FEAT_WEAPON_FOCUS_TRIDENT);
|
||||||
if(nItemProperty != -1) return nItemProperty;
|
if(nItemProperty != -1) return nItemProperty;
|
||||||
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_LIGHT_LANCE, IP_CONST_FEAT_WEAPON_FOCUS_GOAD);
|
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_EAGLE_CLAW, IP_CONST_FEAT_WEAPON_FOCUS_GOAD);
|
||||||
if(nItemProperty != -1) return nItemProperty;
|
if(nItemProperty != -1) return nItemProperty;
|
||||||
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_LIGHTBLADE, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_LIGHTBLADE);
|
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_LIGHTBLADE, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_LIGHTBLADE);
|
||||||
if(nItemProperty != -1) return nItemProperty;
|
if(nItemProperty != -1) return nItemProperty;
|
||||||
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_EAGLE_CLAW, IP_CONST_FEAT_WEAPON_FOCUS_EAGLE_CLAW);
|
|
||||||
if(nItemProperty != -1) return nItemProperty;
|
|
||||||
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_THINBLADE, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_THINBLADE);
|
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_THINBLADE, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_THINBLADE);
|
||||||
if(nItemProperty != -1) return nItemProperty;
|
if(nItemProperty != -1) return nItemProperty;
|
||||||
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_COURTBLADE, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_COURTBLADE);
|
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_COURTBLADE, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_COURTBLADE);
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
//:: Created On: 2003-05-09
|
//:: Created On: 2003-05-09
|
||||||
//:: Last Updated On: 2003-10-14
|
//:: Last Updated On: 2003-10-14
|
||||||
//:://////////////////////////////////////////////
|
//:://////////////////////////////////////////////
|
||||||
|
#include "prc_x2_itemprop"
|
||||||
|
|
||||||
struct craft_struct
|
struct craft_struct
|
||||||
{
|
{
|
||||||
@@ -44,14 +44,14 @@ const string X2_CI_CRAFTSKILL_CONV ="x2_p_craftskills";
|
|||||||
/* moved to be code switches
|
/* moved to be code switches
|
||||||
|
|
||||||
const int X2_CI_BREWPOTION_MAXLEVEL = 3; // Max Level for potions
|
const int X2_CI_BREWPOTION_MAXLEVEL = 3; // Max Level for potions
|
||||||
const int X2_CI_BREWPOTION_COSTMODIFIER = 50; // gp Brew Potion XPCost Modifier
|
const int PRC_X2_BREWPOTION_COSTMODIFIER = 50; // gp Brew Potion XPCost Modifier
|
||||||
|
|
||||||
// Scribe Scroll related constants
|
// Scribe Scroll related constants
|
||||||
const int X2_CI_SCRIBESCROLL_COSTMODIFIER = 25; // Scribescroll Cost Modifier
|
const int PRC_X2_SCRIBESCROLL_COSTMODIFIER = 25; // Scribescroll Cost Modifier
|
||||||
|
|
||||||
// Craft Wand related constants
|
// Craft Wand related constants
|
||||||
const int X2_CI_CRAFTWAND_MAXLEVEL = 4;
|
const int PRC_X2_CRAFTWAND_MAXLEVEL = 4;
|
||||||
const int X2_CI_CRAFTWAND_COSTMODIFIER = 750;
|
const int PRC_X2_CRAFTWAND_COSTMODIFIER = 750;
|
||||||
*/
|
*/
|
||||||
const int X2_CI_BREWPOTION_FEAT_ID = 944; // Brew Potion feat simulation
|
const int X2_CI_BREWPOTION_FEAT_ID = 944; // Brew Potion feat simulation
|
||||||
const int X2_CI_SCRIBESCROLL_FEAT_ID = 945;
|
const int X2_CI_SCRIBESCROLL_FEAT_ID = 945;
|
||||||
@@ -60,6 +60,9 @@ const int X2_CI_CRAFTROD_FEAT_ID = 2927;
|
|||||||
const int X2_CI_CRAFTROD_EPIC_FEAT_ID = 3490;
|
const int X2_CI_CRAFTROD_EPIC_FEAT_ID = 3490;
|
||||||
const int X2_CI_CRAFTSTAFF_FEAT_ID = 2928;
|
const int X2_CI_CRAFTSTAFF_FEAT_ID = 2928;
|
||||||
const int X2_CI_CRAFTSTAFF_EPIC_FEAT_ID = 3491;
|
const int X2_CI_CRAFTSTAFF_EPIC_FEAT_ID = 3491;
|
||||||
|
const int X2_CI_CREATEINFUSION_FEAT_ID = 25960;
|
||||||
|
const int X2_CI_CRAFTSCEPTER_FEAT_ID = 25962;
|
||||||
|
|
||||||
const string X2_CI_BREWPOTION_NEWITEM_RESREF = "x2_it_pcpotion"; // ResRef for new potion item
|
const string X2_CI_BREWPOTION_NEWITEM_RESREF = "x2_it_pcpotion"; // ResRef for new potion item
|
||||||
const string X2_CI_SCRIBESCROLL_NEWITEM_RESREF = "x2_it_pcscroll"; // ResRef for new scroll item
|
const string X2_CI_SCRIBESCROLL_NEWITEM_RESREF = "x2_it_pcscroll"; // ResRef for new scroll item
|
||||||
const string X2_CI_CRAFTWAND_NEWITEM_RESREF = "x2_it_pcwand";
|
const string X2_CI_CRAFTWAND_NEWITEM_RESREF = "x2_it_pcwand";
|
||||||
@@ -185,6 +188,17 @@ int CheckAlternativeCrafting(object oPC, int nSpell, struct craft_cost_struct co
|
|||||||
// Returns the maximum of caster level used and other effective levels from emulating spells
|
// Returns the maximum of caster level used and other effective levels from emulating spells
|
||||||
int GetAlternativeCasterLevel(object oPC, int nLevel);
|
int GetAlternativeCasterLevel(object oPC, int nLevel);
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Create and Return an herbal infusion with an item property
|
||||||
|
// matching nSpellID.
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
object CICreateInfusion(object oCreator, int nSpellID);
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Returns TRUE if the player successfully performed Create Infusion
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
int CICraftCheckCreateInfusion(object oSpellTarget, object oCaster, int nID = 0);
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Include section */
|
/* Include section */
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
@@ -194,6 +208,7 @@ int GetAlternativeCasterLevel(object oPC, int nLevel);
|
|||||||
#include "prc_inc_newip"
|
#include "prc_inc_newip"
|
||||||
#include "prc_inc_spells"
|
#include "prc_inc_spells"
|
||||||
#include "prc_add_spell_dc"
|
#include "prc_add_spell_dc"
|
||||||
|
#include "inc_infusion"
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Function definitions */
|
/* Function definitions */
|
||||||
@@ -261,7 +276,9 @@ int CIGetIsCraftFeatBaseItem(object oItem)
|
|||||||
nBt == BASE_ITEM_BLANK_SCROLL ||
|
nBt == BASE_ITEM_BLANK_SCROLL ||
|
||||||
nBt == BASE_ITEM_BLANK_WAND ||
|
nBt == BASE_ITEM_BLANK_WAND ||
|
||||||
nBt == BASE_ITEM_CRAFTED_ROD ||
|
nBt == BASE_ITEM_CRAFTED_ROD ||
|
||||||
nBt == BASE_ITEM_CRAFTED_STAFF)
|
nBt == BASE_ITEM_CRAFTED_STAFF ||
|
||||||
|
nBt == BASE_ITEM_CRAFTED_SCEPTER ||
|
||||||
|
nBt == BASE_ITEM_MUNDANE_HERB)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
else
|
else
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -287,7 +304,7 @@ object CICraftBrewPotion(object oCreator, int nSpellID )
|
|||||||
return OBJECT_INVALID;
|
return OBJECT_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* //just a tad retarded, don't you think? other crafting feats are not similarly restricted
|
/* //just a tad silly, don't you think? other crafting feats are not similarly restricted
|
||||||
//Uses per day
|
//Uses per day
|
||||||
int nUsesAllowed;
|
int nUsesAllowed;
|
||||||
|
|
||||||
@@ -453,11 +470,159 @@ object CICraftCraftWand(object oCreator, int nSpellID )
|
|||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Georg, 2003-06-12
|
// Georg, 2003-06-12
|
||||||
// Create and Return a magic wand with an item property
|
// Create and Return a magic scroll with an item property
|
||||||
// matching nSpellID. Charges are set to d20 + casterlevel
|
// matching nSpellID.
|
||||||
// capped at 50 max
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
object CICraftScribeScroll(object oCreator, int nSpellID)
|
object CICraftScribeScroll(object oCreator, int nSpellID)
|
||||||
|
{
|
||||||
|
if (DEBUG) DoDebug("CICraftScribeScroll: Enter (nSpellID=" + IntToString(nSpellID) + ")");
|
||||||
|
|
||||||
|
// Keep original and compute one-step master (if subradial)
|
||||||
|
int nSpellOriginal = nSpellID;
|
||||||
|
int nSpellMaster = nSpellOriginal;
|
||||||
|
if (GetIsSubradialSpell(nSpellOriginal))
|
||||||
|
{
|
||||||
|
nSpellMaster = GetMasterSpellFromSubradial(nSpellOriginal);
|
||||||
|
if (DEBUG) DoDebug("CICraftScribeScroll: subradial detected original=" + IntToString(nSpellOriginal) + " master=" + IntToString(nSpellMaster));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prefer iprp mapping for the original, fallback to master
|
||||||
|
int nPropID = IPGetIPConstCastSpellFromSpellID(nSpellOriginal);
|
||||||
|
int nSpellUsedForIP = nSpellOriginal;
|
||||||
|
if (nPropID < 0)
|
||||||
|
{
|
||||||
|
if (DEBUG) DoDebug("CICraftScribeScroll: no iprp for original " + IntToString(nSpellOriginal) + ", trying master " + IntToString(nSpellMaster));
|
||||||
|
nPropID = IPGetIPConstCastSpellFromSpellID(nSpellMaster);
|
||||||
|
nSpellUsedForIP = nSpellMaster;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If neither original nor master has an iprp row, we can still try templates,
|
||||||
|
// but most templates expect a matching iprp. Bail out now if nothing found.
|
||||||
|
if (nPropID < 0)
|
||||||
|
{
|
||||||
|
if (DEBUG) DoDebug("CICraftScribeScroll: no iprp_spells entry for original/master -> aborting");
|
||||||
|
FloatingTextStringOnCreature("This spell cannot be scribed (no item property mapping).", oCreator, FALSE);
|
||||||
|
return OBJECT_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DEBUG) DoDebug("CICraftScribeScroll: using spell " + IntToString(nSpellUsedForIP) + " (iprp row " + IntToString(nPropID) + ") for item property");
|
||||||
|
|
||||||
|
// Material component check (based on resolved iprp row)
|
||||||
|
string sMat = GetMaterialComponentTag(nPropID);
|
||||||
|
if (sMat != "")
|
||||||
|
{
|
||||||
|
object oMat = GetItemPossessedBy(oCreator, sMat);
|
||||||
|
if (oMat == OBJECT_INVALID)
|
||||||
|
{
|
||||||
|
FloatingTextStrRefOnCreature(83374, oCreator); // Missing material component
|
||||||
|
return OBJECT_INVALID;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DestroyObject(oMat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resolve class and scroll template
|
||||||
|
int nClass = PRCGetLastSpellCastClass();
|
||||||
|
string sClass = "";
|
||||||
|
switch (nClass)
|
||||||
|
{
|
||||||
|
case CLASS_TYPE_WIZARD:
|
||||||
|
case CLASS_TYPE_SORCERER: sClass = "Wiz_Sorc"; break;
|
||||||
|
case CLASS_TYPE_CLERIC:
|
||||||
|
case CLASS_TYPE_OCULAR:
|
||||||
|
case CLASS_TYPE_UR_PRIEST: sClass = "Cleric"; break;
|
||||||
|
case CLASS_TYPE_PALADIN: sClass = "Paladin"; break;
|
||||||
|
case CLASS_TYPE_DRUID:
|
||||||
|
case CLASS_TYPE_BLIGHTER: sClass = "Druid"; break;
|
||||||
|
case CLASS_TYPE_RANGER: sClass = "Ranger"; break;
|
||||||
|
case CLASS_TYPE_BARD: sClass = "Bard"; break;
|
||||||
|
case CLASS_TYPE_ASSASSIN: sClass = "Assassin"; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
object oTarget = OBJECT_INVALID;
|
||||||
|
string sResRef = "";
|
||||||
|
|
||||||
|
// Try to find a class-specific scroll template.
|
||||||
|
if (sClass != "")
|
||||||
|
{
|
||||||
|
// Try original first (so if you made a subradial-specific template it will be used)
|
||||||
|
sResRef = Get2DACache(X2_CI_2DA_SCROLLS, sClass, nSpellOriginal);
|
||||||
|
if (sResRef == "")
|
||||||
|
{
|
||||||
|
// fallback to the spell that matched an iprp row (master or original)
|
||||||
|
sResRef = Get2DACache(X2_CI_2DA_SCROLLS, sClass, nSpellUsedForIP);
|
||||||
|
}
|
||||||
|
if (sResRef != "")
|
||||||
|
{
|
||||||
|
oTarget = CreateItemOnObject(sResRef, oCreator);
|
||||||
|
if (DEBUG) DoDebug("CICraftScribeScroll: created template " + sResRef + " for class " + sClass);
|
||||||
|
// Ensure template uses the correct cast-spell property: replace the template's cast-spell IP with ours
|
||||||
|
if (oTarget != OBJECT_INVALID)
|
||||||
|
{
|
||||||
|
itemproperty ipIter = GetFirstItemProperty(oTarget);
|
||||||
|
while (GetIsItemPropertyValid(ipIter))
|
||||||
|
{
|
||||||
|
if (GetItemPropertyType(ipIter) == ITEM_PROPERTY_CAST_SPELL)
|
||||||
|
{
|
||||||
|
RemoveItemProperty(oTarget, ipIter);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ipIter = GetNextItemProperty(oTarget);
|
||||||
|
}
|
||||||
|
itemproperty ipSpell = ItemPropertyCastSpell(nPropID, IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE);
|
||||||
|
AddItemProperty(DURATION_TYPE_PERMANENT, ipSpell, oTarget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If no template or sClass was empty, create generic scroll and add itemprop.
|
||||||
|
if (oTarget == OBJECT_INVALID)
|
||||||
|
{
|
||||||
|
sResRef = "craft_scroll";
|
||||||
|
oTarget = CreateItemOnObject(sResRef, oCreator);
|
||||||
|
if (oTarget == OBJECT_INVALID)
|
||||||
|
{
|
||||||
|
WriteTimestampedLogEntry("CICraftScribeScroll: failed to create craft_scroll template.");
|
||||||
|
return OBJECT_INVALID;
|
||||||
|
}
|
||||||
|
// Remove existing default IP and add correct one
|
||||||
|
itemproperty ipFirst = GetFirstItemProperty(oTarget);
|
||||||
|
if (GetIsItemPropertyValid(ipFirst))
|
||||||
|
RemoveItemProperty(oTarget, ipFirst);
|
||||||
|
|
||||||
|
itemproperty ipSpell = ItemPropertyCastSpell(nPropID, IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE);
|
||||||
|
AddItemProperty(DURATION_TYPE_PERMANENT, ipSpell, oTarget);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add PRC metadata (use the same spell that matched the iprp row so metadata and IP line up)
|
||||||
|
if (GetPRCSwitch(PRC_SCRIBE_SCROLL_CASTER_LEVEL))
|
||||||
|
{
|
||||||
|
int nCasterLevel = GetAlternativeCasterLevel(oCreator, PRCGetCasterLevel(oCreator));
|
||||||
|
itemproperty ipLevel = ItemPropertyCastSpellCasterLevel(nSpellUsedForIP, nCasterLevel);
|
||||||
|
AddItemProperty(DURATION_TYPE_PERMANENT, ipLevel, oTarget);
|
||||||
|
|
||||||
|
itemproperty ipMeta = ItemPropertyCastSpellMetamagic(nSpellUsedForIP, PRCGetMetaMagicFeat());
|
||||||
|
AddItemProperty(DURATION_TYPE_PERMANENT, ipMeta, oTarget);
|
||||||
|
|
||||||
|
int nDC = PRCGetSpellSaveDC(nSpellUsedForIP, GetSpellSchool(nSpellUsedForIP), OBJECT_SELF);
|
||||||
|
itemproperty ipDC = ItemPropertyCastSpellDC(nSpellUsedForIP, nDC);
|
||||||
|
AddItemProperty(DURATION_TYPE_PERMANENT, ipDC, oTarget);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (oTarget == OBJECT_INVALID)
|
||||||
|
{
|
||||||
|
WriteTimestampedLogEntry("prc_x2_craft::CICraftScribeScroll failed - Resref: " + sResRef + " Class: " + sClass + "(" + IntToString(nClass) + ") " + " SpellID " + IntToString(nSpellID));
|
||||||
|
return OBJECT_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DEBUG) DoDebug("CICraftScribeScroll: Success - created scroll " + sResRef + " for spell " + IntToString(nSpellUsedForIP));
|
||||||
|
return oTarget;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* object CICraftScribeScroll(object oCreator, int nSpellID)
|
||||||
{
|
{
|
||||||
int nPropID = IPGetIPConstCastSpellFromSpellID(nSpellID);
|
int nPropID = IPGetIPConstCastSpellFromSpellID(nSpellID);
|
||||||
object oTarget;
|
object oTarget;
|
||||||
@@ -491,6 +656,7 @@ object CICraftScribeScroll(object oCreator, int nSpellID)
|
|||||||
break;
|
break;
|
||||||
case CLASS_TYPE_CLERIC:
|
case CLASS_TYPE_CLERIC:
|
||||||
case CLASS_TYPE_UR_PRIEST:
|
case CLASS_TYPE_UR_PRIEST:
|
||||||
|
case CLASS_TYPE_OCULAR:
|
||||||
sClass = "Cleric";
|
sClass = "Cleric";
|
||||||
break;
|
break;
|
||||||
case CLASS_TYPE_PALADIN:
|
case CLASS_TYPE_PALADIN:
|
||||||
@@ -506,6 +672,9 @@ object CICraftScribeScroll(object oCreator, int nSpellID)
|
|||||||
case CLASS_TYPE_BARD:
|
case CLASS_TYPE_BARD:
|
||||||
sClass = "Bard";
|
sClass = "Bard";
|
||||||
break;
|
break;
|
||||||
|
case CLASS_TYPE_ASSASSIN:
|
||||||
|
sClass = "Assassin";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
string sResRef;
|
string sResRef;
|
||||||
if (sClass != "")
|
if (sClass != "")
|
||||||
@@ -542,6 +711,7 @@ object CICraftScribeScroll(object oCreator, int nSpellID)
|
|||||||
}
|
}
|
||||||
return oTarget;
|
return oTarget;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Returns TRUE if the player used the last spell to brew a potion
|
// Returns TRUE if the player used the last spell to brew a potion
|
||||||
@@ -593,7 +763,7 @@ These dont work as IPs since they are hardcoded */
|
|||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
// check if spell is below maxlevel for brew potions
|
// check if spell is below maxlevel for brew potions
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
int nPotionMaxLevel = GetPRCSwitch(X2_CI_BREWPOTION_MAXLEVEL);
|
int nPotionMaxLevel = GetPRCSwitch(PRC_X2_BREWPOTION_MAXLEVEL);
|
||||||
if(nPotionMaxLevel == 0)
|
if(nPotionMaxLevel == 0)
|
||||||
nPotionMaxLevel = 3;
|
nPotionMaxLevel = 3;
|
||||||
|
|
||||||
@@ -624,7 +794,7 @@ These dont work as IPs since they are hardcoded */
|
|||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
// XP/GP Cost Calculation
|
// XP/GP Cost Calculation
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
int nCostModifier = GetPRCSwitch(X2_CI_BREWPOTION_COSTMODIFIER);
|
int nCostModifier = GetPRCSwitch(PRC_X2_BREWPOTION_COSTMODIFIER);
|
||||||
if(nCostModifier == 0)
|
if(nCostModifier == 0)
|
||||||
nCostModifier = 50;
|
nCostModifier = 50;
|
||||||
int nCost = CIGetCraftGPCost(nLevel, nCostModifier, PRC_BREW_POTION_CASTER_LEVEL);
|
int nCost = CIGetCraftGPCost(nLevel, nCostModifier, PRC_BREW_POTION_CASTER_LEVEL);
|
||||||
@@ -698,7 +868,6 @@ These dont work as IPs since they are hardcoded */
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Returns TRUE if the player used the last spell to create a scroll
|
// Returns TRUE if the player used the last spell to create a scroll
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
@@ -728,7 +897,7 @@ int CICraftCheckScribeScroll(object oSpellTarget, object oCaster, int nID = 0)
|
|||||||
// XP/GP Cost Calculation
|
// XP/GP Cost Calculation
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
int nLevel = CIGetSpellInnateLevel(nID,TRUE);
|
int nLevel = CIGetSpellInnateLevel(nID,TRUE);
|
||||||
int nCostModifier = GetPRCSwitch(X2_CI_SCRIBESCROLL_COSTMODIFIER);
|
int nCostModifier = GetPRCSwitch(PRC_X2_SCRIBESCROLL_COSTMODIFIER);
|
||||||
if(nCostModifier == 0)
|
if(nCostModifier == 0)
|
||||||
nCostModifier = 25;
|
nCostModifier = 25;
|
||||||
int nCost = CIGetCraftGPCost(nLevel, nCostModifier, PRC_SCRIBE_SCROLL_CASTER_LEVEL);
|
int nCost = CIGetCraftGPCost(nLevel, nCostModifier, PRC_SCRIBE_SCROLL_CASTER_LEVEL);
|
||||||
@@ -884,7 +1053,7 @@ These dont work as IPs since they are hardcoded */
|
|||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
// check if spell is below maxlevel for craft want
|
// check if spell is below maxlevel for craft want
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
int nMaxLevel = GetPRCSwitch(X2_CI_CRAFTWAND_MAXLEVEL);
|
int nMaxLevel = GetPRCSwitch(PRC_X2_CRAFTWAND_MAXLEVEL);
|
||||||
if(nMaxLevel == 0)
|
if(nMaxLevel == 0)
|
||||||
nMaxLevel = 4;
|
nMaxLevel = 4;
|
||||||
if (nLevel > nMaxLevel)
|
if (nLevel > nMaxLevel)
|
||||||
@@ -896,7 +1065,7 @@ These dont work as IPs since they are hardcoded */
|
|||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
// XP/GP Cost Calculation
|
// XP/GP Cost Calculation
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
int nCostMod = GetPRCSwitch(X2_CI_CRAFTWAND_COSTMODIFIER);
|
int nCostMod = GetPRCSwitch(PRC_X2_CRAFTWAND_COSTMODIFIER);
|
||||||
if(nCostMod == 0)
|
if(nCostMod == 0)
|
||||||
nCostMod = 750;
|
nCostMod = 750;
|
||||||
int nCost = CIGetCraftGPCost(nLevel, nCostMod, PRC_CRAFT_WAND_CASTER_LEVEL);
|
int nCost = CIGetCraftGPCost(nLevel, nCostMod, PRC_CRAFT_WAND_CASTER_LEVEL);
|
||||||
@@ -966,6 +1135,169 @@ These dont work as IPs since they are hardcoded */
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Returns TRUE if the player used the last spell to craft a scepter
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
int CICraftCheckCraftScepter(object oSpellTarget, object oCaster, int nSpellID = 0)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(nSpellID == 0) nSpellID = PRCGetSpellId();
|
||||||
|
int nCasterLevel = GetAlternativeCasterLevel(oCaster, PRCGetCasterLevel(oCaster));
|
||||||
|
int bSuccess = TRUE;
|
||||||
|
int nCount = 0;
|
||||||
|
itemproperty ip = GetFirstItemProperty(oSpellTarget);
|
||||||
|
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||||
|
|
||||||
|
while(GetIsItemPropertyValid(ip))
|
||||||
|
{
|
||||||
|
if(GetItemPropertyType(ip) == ITEM_PROPERTY_CAST_SPELL)
|
||||||
|
nCount++;
|
||||||
|
ip = GetNextItemProperty(oSpellTarget);
|
||||||
|
}
|
||||||
|
if(nCount >= 2) //:: Scepters are limited to two spells
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("* Failure - Too many castspell itemproperties *", oCaster);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
if(!GetHasFeat(X2_CI_CRAFTSCEPTER_FEAT_ID, oCaster))
|
||||||
|
{
|
||||||
|
FloatingTextStrRefOnCreature(40487, oCaster); // Item Creation Failed - Don't know how to create that type of item
|
||||||
|
return TRUE; // tried item creation but do not know how to do it
|
||||||
|
}
|
||||||
|
if(CIGetIsSpellRestrictedFromCraftFeat(nSpellID, X2_CI_CRAFTSCEPTER_FEAT_ID))
|
||||||
|
{
|
||||||
|
FloatingTextStrRefOnCreature(16829169, oCaster); // can not be used with this feat
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the base spell level (circle) before metamagic adjustments
|
||||||
|
int nBaseLevel = CIGetSpellInnateLevel(nSpellID, TRUE);
|
||||||
|
|
||||||
|
// Check if spell circle is 7th level or lower
|
||||||
|
if (nBaseLevel > 7)
|
||||||
|
{
|
||||||
|
//FloatingTextStrRefOnCreature(83623, oCaster); // Spell level too high
|
||||||
|
FloatingTextStringOnCreature("* Failure - scepters can not hold spells higher than level 7", oCaster);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int nLevel = nBaseLevel;
|
||||||
|
|
||||||
|
if(GetPRCSwitch(PRC_CRAFT_SCEPTER_CASTER_LEVEL))
|
||||||
|
{
|
||||||
|
switch(nMetaMagic)
|
||||||
|
{
|
||||||
|
case METAMAGIC_EMPOWER:
|
||||||
|
nLevel += 2;
|
||||||
|
break;
|
||||||
|
case METAMAGIC_EXTEND:
|
||||||
|
nLevel += 1;
|
||||||
|
break;
|
||||||
|
case METAMAGIC_MAXIMIZE:
|
||||||
|
nLevel += 3;
|
||||||
|
break;
|
||||||
|
/* case METAMAGIC_QUICKEN:
|
||||||
|
nLevel += 1;
|
||||||
|
break;
|
||||||
|
case METAMAGIC_SILENT:
|
||||||
|
nLevel += 5;
|
||||||
|
break;
|
||||||
|
case METAMAGIC_STILL:
|
||||||
|
nLevel += 6;
|
||||||
|
break;
|
||||||
|
These dont work as IPs since they are hardcoded */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int nCostMod = GetPRCSwitch(PRC_X2_CRAFTSCEPTER_COSTMODIFIER);
|
||||||
|
if(!nCostMod) nCostMod = 750;
|
||||||
|
int nLvlRow = IPGetIPConstCastSpellFromSpellID(nSpellID);
|
||||||
|
int nCLevel = StringToInt(Get2DACache("iprp_spells","CasterLvl",nLvlRow));
|
||||||
|
int nCost = CIGetCraftGPCost(nLevel, nCostMod, PRC_CRAFT_SCEPTER_CASTER_LEVEL);
|
||||||
|
|
||||||
|
//discount for second spell
|
||||||
|
if(nCount+1 == 2)
|
||||||
|
nCost = (nCost/2);
|
||||||
|
|
||||||
|
//takes epic xp costs into account
|
||||||
|
struct craft_cost_struct costs = GetModifiedCostsFromBase(nCost, oCaster, FEAT_CRAFT_SCEPTER, (nMetaMagic > 0));
|
||||||
|
|
||||||
|
if(costs.nGoldCost < 1) costs.nXPCost = 1;
|
||||||
|
if(costs.nXPCost < 1) costs.nXPCost = 1;
|
||||||
|
//if(GetGold(oCaster) < nGoldCost) // enough gold?
|
||||||
|
if (!GetHasGPToSpend(oCaster, costs.nGoldCost))
|
||||||
|
{
|
||||||
|
FloatingTextStrRefOnCreature(3786, oCaster); // Item Creation Failed - not enough gold!
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
int nHD = GetHitDice(oCaster);
|
||||||
|
int nMinXPForLevel = (nHD * (nHD - 1)) * 500;
|
||||||
|
int nNewXP = GetXP(oCaster) - costs.nXPCost;
|
||||||
|
//if (nMinXPForLevel > nNewXP || nNewXP == 0 )
|
||||||
|
if (!GetHasXPToSpend(oCaster, costs.nXPCost))
|
||||||
|
{
|
||||||
|
FloatingTextStrRefOnCreature(3785, oCaster); // Item Creation Failed - Not enough XP
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
//check spell emulation
|
||||||
|
if(!CheckAlternativeCrafting(oCaster, nSpellID, costs))
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("*Crafting failed!*", oCaster, FALSE);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
int nPropID = IPGetIPConstCastSpellFromSpellID(nSpellID);
|
||||||
|
if (nPropID == 0 && nSpellID != 0)
|
||||||
|
{
|
||||||
|
FloatingTextStrRefOnCreature(84544,oCaster);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
if (nPropID != -1)
|
||||||
|
{
|
||||||
|
AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyCastSpell(nPropID,IP_CONST_CASTSPELL_NUMUSES_1_CHARGE_PER_USE),oSpellTarget);
|
||||||
|
|
||||||
|
if(GetPRCSwitch(PRC_CRAFT_SCEPTER_CASTER_LEVEL))
|
||||||
|
{
|
||||||
|
AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyCastSpellCasterLevel(nSpellID, nCasterLevel),oSpellTarget);
|
||||||
|
AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyCastSpellMetamagic(nSpellID, PRCGetMetaMagicFeat()),oSpellTarget);
|
||||||
|
AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyCastSpellDC(nSpellID, PRCGetSaveDC(PRCGetSpellTargetObject(), OBJECT_SELF)),oSpellTarget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
bSuccess = FALSE;
|
||||||
|
|
||||||
|
if(bSuccess)
|
||||||
|
{
|
||||||
|
//TakeGoldFromCreature(nGoldCost, oCaster, TRUE);
|
||||||
|
//SetXP(oCaster, nNewXP);
|
||||||
|
SpendXP(oCaster, costs.nXPCost);
|
||||||
|
SpendGP(oCaster, costs.nGoldCost);
|
||||||
|
//DestroyObject (oSpellTarget);
|
||||||
|
FloatingTextStrRefOnCreature(8502, oCaster); // Item Creation successful
|
||||||
|
|
||||||
|
//advance time here
|
||||||
|
if(!costs.nTimeCost) costs.nTimeCost = 1;
|
||||||
|
AdvanceTimeForPlayer(oCaster, RoundsToSeconds(costs.nTimeCost));
|
||||||
|
string sName;
|
||||||
|
sName = GetName(oCaster)+"'s Magic Scepter";
|
||||||
|
SetItemCharges(oSpellTarget, 50);
|
||||||
|
//sName = Get2DACache("spells", "Name", nID);
|
||||||
|
//sName = "Wand of "+GetStringByStrRef(StringToInt(sName));
|
||||||
|
SetName(oSpellTarget, sName);
|
||||||
|
SetItemCursedFlag(oSpellTarget, FALSE);
|
||||||
|
SetDroppableFlag(oSpellTarget, TRUE);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FloatingTextStrRefOnCreature(76417, oCaster); // Item Creation Failed
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Returns TRUE if the player used the last spell to craft a staff
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
int CICraftCheckCraftStaff(object oSpellTarget, object oCaster, int nSpellID = 0)
|
int CICraftCheckCraftStaff(object oSpellTarget, object oCaster, int nSpellID = 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -1027,7 +1359,7 @@ int CICraftCheckCraftStaff(object oSpellTarget, object oCaster, int nSpellID = 0
|
|||||||
These dont work as IPs since they are hardcoded */
|
These dont work as IPs since they are hardcoded */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int nCostMod = GetPRCSwitch(X2_CI_CRAFTSTAFF_COSTMODIFIER);
|
int nCostMod = GetPRCSwitch(PRC_X2_CRAFTSTAFF_COSTMODIFIER);
|
||||||
if(!nCostMod) nCostMod = 750;
|
if(!nCostMod) nCostMod = 750;
|
||||||
int nLvlRow = IPGetIPConstCastSpellFromSpellID(nSpellID);
|
int nLvlRow = IPGetIPConstCastSpellFromSpellID(nSpellID);
|
||||||
int nCLevel = StringToInt(Get2DACache("iprp_spells","CasterLvl",nLvlRow));
|
int nCLevel = StringToInt(Get2DACache("iprp_spells","CasterLvl",nLvlRow));
|
||||||
@@ -1114,6 +1446,9 @@ These dont work as IPs since they are hardcoded */
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Returns TRUE if the player used the last spell to craft a rod
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
int CICraftCheckCraftRod(object oSpellTarget, object oCaster, int nSpellID = 0)
|
int CICraftCheckCraftRod(object oSpellTarget, object oCaster, int nSpellID = 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -1175,7 +1510,7 @@ int CICraftCheckCraftRod(object oSpellTarget, object oCaster, int nSpellID = 0)
|
|||||||
These dont work as IPs since they are hardcoded */
|
These dont work as IPs since they are hardcoded */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int nCostMod = GetPRCSwitch(X2_CI_CRAFTROD_COSTMODIFIER);
|
int nCostMod = GetPRCSwitch(PRC_X2_CRAFTROD_COSTMODIFIER);
|
||||||
if(!nCostMod) nCostMod = 750;
|
if(!nCostMod) nCostMod = 750;
|
||||||
int nLvlRow = IPGetIPConstCastSpellFromSpellID(nSpellID);
|
int nLvlRow = IPGetIPConstCastSpellFromSpellID(nSpellID);
|
||||||
int nCLevel = StringToInt(Get2DACache("iprp_spells","CasterLvl",nLvlRow));
|
int nCLevel = StringToInt(Get2DACache("iprp_spells","CasterLvl",nLvlRow));
|
||||||
@@ -1260,6 +1595,7 @@ These dont work as IPs since they are hardcoded */
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int InscribeRune(object oTarget = OBJECT_INVALID, object oCaster = OBJECT_INVALID, int nSpell = 0)
|
int InscribeRune(object oTarget = OBJECT_INVALID, object oCaster = OBJECT_INVALID, int nSpell = 0)
|
||||||
{
|
{
|
||||||
if(!GetIsObjectValid(oCaster)) oCaster = OBJECT_SELF;
|
if(!GetIsObjectValid(oCaster)) oCaster = OBJECT_SELF;
|
||||||
@@ -1310,6 +1646,11 @@ int InscribeRune(object oTarget = OBJECT_INVALID, object oCaster = OBJECT_INVALI
|
|||||||
|
|
||||||
if(!GetIsObjectValid(oTarget)) oTarget = PRCGetSpellTargetObject();
|
if(!GetIsObjectValid(oTarget)) oTarget = PRCGetSpellTargetObject();
|
||||||
int nCaster = GetAlternativeCasterLevel(oCaster, PRCGetCasterLevel(oCaster));
|
int nCaster = GetAlternativeCasterLevel(oCaster, PRCGetCasterLevel(oCaster));
|
||||||
|
|
||||||
|
//:: Check for Inscribe Epic Runes and cap CL at 20 if it doesn't exist.
|
||||||
|
int bEpicRunes = GetHasFeat(EPIC_FEAT_INSCRIBE_EPIC_RUNES, oCaster);
|
||||||
|
if (!bEpicRunes) { if(nCaster > 20) nCaster = 20; }
|
||||||
|
|
||||||
int nDC = PRCGetSaveDC(oTarget, oCaster);
|
int nDC = PRCGetSaveDC(oTarget, oCaster);
|
||||||
if(!nSpell) nSpell = PRCGetSpellId();
|
if(!nSpell) nSpell = PRCGetSpellId();
|
||||||
int nSpellLevel = 0;
|
int nSpellLevel = 0;
|
||||||
@@ -1332,6 +1673,7 @@ int InscribeRune(object oTarget = OBJECT_INVALID, object oCaster = OBJECT_INVALI
|
|||||||
// Minimum level.
|
// Minimum level.
|
||||||
if (nSpellLevel == 0) nSpellLevel = 1;
|
if (nSpellLevel == 0) nSpellLevel = 1;
|
||||||
|
|
||||||
|
|
||||||
// This will be modified with Runecaster code later.
|
// This will be modified with Runecaster code later.
|
||||||
int nCharges = 1;
|
int nCharges = 1;
|
||||||
if (GetLocalInt(oCaster, "RuneCharges")) nCharges = nCount;
|
if (GetLocalInt(oCaster, "RuneCharges")) nCharges = nCount;
|
||||||
@@ -1442,7 +1784,12 @@ int InscribeRune(object oTarget = OBJECT_INVALID, object oCaster = OBJECT_INVALI
|
|||||||
if(GetHasSpellEffect(SPELL_RUNE_CHANT))
|
if(GetHasSpellEffect(SPELL_RUNE_CHANT))
|
||||||
nRuneChant = 0;
|
nRuneChant = 0;
|
||||||
|
|
||||||
itemproperty ipLevel = ItemPropertyCastSpellCasterLevel(nSpell, PRCGetCasterLevel());
|
//:: Check for Inscribe Epic Runes and cap CL at 20 if it doesn't exist.
|
||||||
|
nCaster = PRCGetCasterLevel();
|
||||||
|
|
||||||
|
if (!bEpicRunes) { if(nCaster > 20) nCaster = 20; }
|
||||||
|
|
||||||
|
itemproperty ipLevel = ItemPropertyCastSpellCasterLevel(nSpell, nCaster);
|
||||||
AddItemProperty(DURATION_TYPE_PERMANENT,ipLevel,oRune);
|
AddItemProperty(DURATION_TYPE_PERMANENT,ipLevel,oRune);
|
||||||
itemproperty ipMeta = ItemPropertyCastSpellMetamagic(nSpell, PRCGetMetaMagicFeat());
|
itemproperty ipMeta = ItemPropertyCastSpellMetamagic(nSpell, PRCGetMetaMagicFeat());
|
||||||
AddItemProperty(DURATION_TYPE_PERMANENT,ipMeta,oRune);
|
AddItemProperty(DURATION_TYPE_PERMANENT,ipMeta,oRune);
|
||||||
@@ -1544,18 +1891,28 @@ int AttuneGem(object oTarget = OBJECT_INVALID, object oCaster = OBJECT_INVALID,
|
|||||||
// No point scribing Gems from items, and its not allowed.
|
// No point scribing Gems from items, and its not allowed.
|
||||||
if (oItem != OBJECT_INVALID)
|
if (oItem != OBJECT_INVALID)
|
||||||
{
|
{
|
||||||
FloatingTextStringOnCreature("You cannot scribe a Gem from an item.", oCaster, FALSE);
|
FloatingTextStringOnCreature("You cannot attune a Gem from an item.", oCaster, FALSE);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
// oTarget here should be the gem. If it's not, fail.
|
// oTarget here should be the gem. If it's not, fail.
|
||||||
if(!GetIsObjectValid(oTarget)) oTarget = PRCGetSpellTargetObject();
|
if(!GetIsObjectValid(oTarget)) oTarget = PRCGetSpellTargetObject();
|
||||||
// Only accepts bioware gems
|
// Only accepts bioware gems & Craftable Natural Resources gems, but not gem dust.
|
||||||
if (GetStringLeft(GetResRef(oTarget), 5) == "it_gem")
|
int bIsBioGem = (GetStringLeft(GetResRef(oTarget), 5) == "it_gem");
|
||||||
|
int bIsCNRGem = (GetStringLeft(GetResRef(oTarget), 6) == "cnrgem");
|
||||||
|
int bIsDust = (GetStringLeft(GetResRef(oTarget), 10) == "cnrgemdust");
|
||||||
|
|
||||||
|
if (!(bIsBioGem || bIsCNRGem) || bIsDust)
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("Spell target is not a valid gem.", oCaster, FALSE);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if ((GetStringLeft(GetResRef(oTarget), 5) == "it_gem") || (GetStringLeft(GetResRef(oTarget), 6) == "cnrgem") && (GetStringLeft(GetResRef(oTarget), 10) != "cnrgemdust"))
|
||||||
{
|
{
|
||||||
FloatingTextStringOnCreature("Spell target is not a valid gem.", oCaster, FALSE);
|
FloatingTextStringOnCreature("Spell target is not a valid gem.", oCaster, FALSE);
|
||||||
// And out we go
|
// And out we go
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
} */
|
||||||
|
|
||||||
int nCaster = GetAlternativeCasterLevel(oCaster, PRCGetCasterLevel(oCaster));
|
int nCaster = GetAlternativeCasterLevel(oCaster, PRCGetCasterLevel(oCaster));
|
||||||
int nDC = PRCGetSaveDC(oTarget, oCaster);
|
int nDC = PRCGetSaveDC(oTarget, oCaster);
|
||||||
@@ -1952,6 +2309,19 @@ int CIGetSpellWasUsedForItemCreation(object oSpellTarget)
|
|||||||
nRet = CICraftCheckCraftStaff(oSpellTarget,oCaster);
|
nRet = CICraftCheckCraftStaff(oSpellTarget,oCaster);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case BASE_ITEM_CRAFTED_SCEPTER :
|
||||||
|
// -------------------------------------------------
|
||||||
|
// Craft Scepter
|
||||||
|
// -------------------------------------------------
|
||||||
|
nRet = CICraftCheckCraftScepter(oSpellTarget,oCaster);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BASE_ITEM_MUNDANE_HERB :
|
||||||
|
// -------------------------------------------------
|
||||||
|
// Create Infusion
|
||||||
|
// -------------------------------------------------
|
||||||
|
nRet = CICraftCheckCreateInfusion(oSpellTarget,oCaster);
|
||||||
|
break;
|
||||||
// you could add more crafting basetypes here....
|
// you could add more crafting basetypes here....
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2740,6 +3110,16 @@ int GetMagicalArtisanFeat(int nCraftingFeat)
|
|||||||
nReturn = FEAT_MAGICAL_ARTISAN_CRAFT_SKULL_TALISMAN;
|
nReturn = FEAT_MAGICAL_ARTISAN_CRAFT_SKULL_TALISMAN;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case FEAT_CREATE_INFUSION:
|
||||||
|
{
|
||||||
|
nReturn = FEAT_MAGICAL_ARTISAN_CREATE_INFUSION;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case FEAT_CRAFT_SCEPTER:
|
||||||
|
{
|
||||||
|
nReturn = FEAT_MAGICAL_ARTISAN_CRAFT_SCEPTER;
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
if(DEBUG) DoDebug("GetMagicalArtisanFeat: invalid crafting feat");
|
if(DEBUG) DoDebug("GetMagicalArtisanFeat: invalid crafting feat");
|
||||||
@@ -2941,6 +3321,306 @@ int GetAlternativeCasterLevel(object oPC, int nLevel)
|
|||||||
return nLevel;
|
return nLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Returns TRUE if the player successfully performed Create Infusion
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
int CICraftCheckCreateInfusion(object oSpellTarget, object oCaster, int nID = 0)
|
||||||
|
{
|
||||||
|
if (nID == 0) nID = PRCGetSpellId();
|
||||||
|
|
||||||
|
int bIsSubradial = GetIsSubradialSpell(nID);
|
||||||
|
|
||||||
|
if(bIsSubradial)
|
||||||
|
{
|
||||||
|
nID = GetMasterSpellFromSubradial(nID);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// Check if the caster has the Create Infusion feat
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
if (!GetHasFeat(FEAT_CREATE_INFUSION, oCaster))
|
||||||
|
{
|
||||||
|
FloatingTextStrRefOnCreature(40487, oCaster); // Missing feat
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// Divine spellcasters only
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
int nClass = PRCGetLastSpellCastClass();
|
||||||
|
if (!GetIsDivineClass(nClass))
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("Only divine casters can create infusions.", oCaster, FALSE);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// Check if spell is restricted for Create Infusion
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
if (CIGetIsSpellRestrictedFromCraftFeat(nID, X2_CI_CREATEINFUSION_FEAT_ID))
|
||||||
|
{
|
||||||
|
FloatingTextStrRefOnCreature(83451, oCaster); // Spell not allowed
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// Optional PnP Herb check
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
int bPnPHerbs = GetPRCSwitch(PRC_CREATE_INFUSION_OPTIONAL_HERBS);
|
||||||
|
if(bPnPHerbs)
|
||||||
|
{
|
||||||
|
int nSpellschool = GetSpellSchool(nID);
|
||||||
|
int nHerbSchool = GetHerbsSpellSchool(oSpellTarget);
|
||||||
|
|
||||||
|
int nSpellLevel = PRCGetSpellLevelForClass(nID, nClass);
|
||||||
|
int nHerbLevel = GetHerbsInfusionSpellLevel(oSpellTarget);
|
||||||
|
|
||||||
|
if(nSpellschool != nHerbSchool)
|
||||||
|
{
|
||||||
|
// Herb is for wrong spellschool
|
||||||
|
FloatingTextStringOnCreature("This herb isn't appropriate for this spell school", oCaster);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(nSpellLevel > nHerbLevel)
|
||||||
|
{
|
||||||
|
// Herb spell circle level too low
|
||||||
|
FloatingTextStringOnCreature("This herb isn't appropriate for this spell level", oCaster);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// XP/GP Cost Calculation
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
int nLevel = CIGetSpellInnateLevel(nID, TRUE);
|
||||||
|
int nCostModifier = GetPRCSwitch(PRC_X2_CREATEINFUSION_COSTMODIFIER);
|
||||||
|
if (nCostModifier == 0)
|
||||||
|
nCostModifier = 25;
|
||||||
|
|
||||||
|
int nCost = CIGetCraftGPCost(nLevel, nCostModifier, PRC_CREATE_INFUSION_CASTER_LEVEL);
|
||||||
|
struct craft_cost_struct costs = GetModifiedCostsFromBase(nCost, oCaster, FEAT_CREATE_INFUSION, FALSE);
|
||||||
|
|
||||||
|
// Adjust level for metamagic
|
||||||
|
if (GetPRCSwitch(PRC_CREATE_INFUSION_CASTER_LEVEL))
|
||||||
|
{
|
||||||
|
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||||
|
switch(nMetaMagic)
|
||||||
|
{
|
||||||
|
case METAMAGIC_EMPOWER: nLevel += 2; break;
|
||||||
|
case METAMAGIC_EXTEND: nLevel += 1; break;
|
||||||
|
case METAMAGIC_MAXIMIZE: nLevel += 3; break;
|
||||||
|
// Unsupported metamagic IPs not added
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// Check Gold
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
if (!GetHasGPToSpend(oCaster, costs.nGoldCost))
|
||||||
|
{
|
||||||
|
FloatingTextStrRefOnCreature(3786, oCaster); // Not enough gold
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// Check XP
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
if (!GetHasXPToSpend(oCaster, costs.nXPCost))
|
||||||
|
{
|
||||||
|
FloatingTextStrRefOnCreature(3785, oCaster); // Not enough XP
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// Check alternative spell emulation requirements
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
if (!CheckAlternativeCrafting(oCaster, nID, costs))
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("*Crafting failed!*", oCaster, FALSE);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// Create the infused herb item
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
object oInfusion = CICreateInfusion(oCaster, nID);
|
||||||
|
|
||||||
|
if (GetIsObjectValid(oInfusion))
|
||||||
|
{
|
||||||
|
// Get the spell's display name from spells.2da via TLK
|
||||||
|
int nNameStrRef = StringToInt(Get2DAString("spells", "Name", nID));
|
||||||
|
string sSpellName = GetStringByStrRef(nNameStrRef);
|
||||||
|
|
||||||
|
// Rename the item
|
||||||
|
string sNewName = "Infusion of " + sSpellName;
|
||||||
|
SetName(oInfusion, sNewName);
|
||||||
|
|
||||||
|
// Post-creation actions
|
||||||
|
SetIdentified(oInfusion, TRUE);
|
||||||
|
ActionPlayAnimation(ANIMATION_FIREFORGET_READ, 1.0);
|
||||||
|
SpendXP(oCaster, costs.nXPCost);
|
||||||
|
SpendGP(oCaster, costs.nGoldCost);
|
||||||
|
DestroyObject(oSpellTarget);
|
||||||
|
FloatingTextStrRefOnCreature(8502, oCaster); // Item creation successful
|
||||||
|
|
||||||
|
if (!costs.nTimeCost) costs.nTimeCost = 1;
|
||||||
|
AdvanceTimeForPlayer(oCaster, RoundsToSeconds(costs.nTimeCost));
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("Infusion creation failed", oCaster); // Item creation failed
|
||||||
|
FloatingTextStrRefOnCreature(76417, oCaster); // Item creation failed
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* // -------------------------------------------------------------------------
|
||||||
|
// Create the infused herb item
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
object oInfusion = CICreateInfusion(oCaster, nID);
|
||||||
|
|
||||||
|
if (GetIsObjectValid(oInfusion))
|
||||||
|
{
|
||||||
|
SetIdentified(oInfusion, TRUE);
|
||||||
|
ActionPlayAnimation(ANIMATION_FIREFORGET_READ, 1.0);
|
||||||
|
SpendXP(oCaster, costs.nXPCost);
|
||||||
|
SpendGP(oCaster, costs.nGoldCost);
|
||||||
|
DestroyObject(oSpellTarget);
|
||||||
|
FloatingTextStrRefOnCreature(8502, oCaster); // Item creation successful
|
||||||
|
|
||||||
|
if (!costs.nTimeCost) costs.nTimeCost = 1;
|
||||||
|
AdvanceTimeForPlayer(oCaster, RoundsToSeconds(costs.nTimeCost));
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("Infusion creation failed", oCaster); // Item creation failed
|
||||||
|
FloatingTextStrRefOnCreature(76417, oCaster); // Item creation failed
|
||||||
|
return TRUE;
|
||||||
|
} */
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Create and return an herbal infusion with an item property matching nSpellID
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
object CICreateInfusion(object oCreator, int nSpellID)
|
||||||
|
{
|
||||||
|
if (DEBUG) DoDebug("prc_x2_craft >> CICreateInfusion: Entering function");
|
||||||
|
|
||||||
|
// Keep the original spell id the engine gave us (may be a subradial)
|
||||||
|
int nSpellOriginal = nSpellID;
|
||||||
|
if (DEBUG) DoDebug("prc_x2_craft >> CICreateInfusion: nSpellOriginal is "+IntToString(nSpellOriginal)+".");
|
||||||
|
|
||||||
|
// Compute the master if this is a subradial. Keep original intact.
|
||||||
|
int nSpellMaster = nSpellOriginal;
|
||||||
|
if (GetIsSubradialSpell(nSpellOriginal))
|
||||||
|
{
|
||||||
|
nSpellMaster = GetMasterSpellFromSubradial(nSpellOriginal);
|
||||||
|
if (DEBUG) DoDebug("CICreateInfusion: detected subradial " + IntToString(nSpellOriginal) + " master -> " + IntToString(nSpellMaster));
|
||||||
|
}
|
||||||
|
if (DEBUG) DoDebug("prc_x2_craft >> CICreateInfusion: nSpellMaster is "+IntToString(nSpellMaster)+".");
|
||||||
|
|
||||||
|
// Try to find an iprp_spells row for the original subradial first (preferred).
|
||||||
|
int nPropID = IPGetIPConstCastSpellFromSpellID(nSpellOriginal);
|
||||||
|
int nSpellUsedForIP = nSpellOriginal;
|
||||||
|
|
||||||
|
// If not found for original, fall back to the master/base spell.
|
||||||
|
if (nPropID < 0)
|
||||||
|
{
|
||||||
|
if (DEBUG) DoDebug("CICreateInfusion: no iprp row for original " + IntToString(nSpellOriginal) + ", trying master " + IntToString(nSpellMaster));
|
||||||
|
nPropID = IPGetIPConstCastSpellFromSpellID(nSpellMaster);
|
||||||
|
nSpellUsedForIP = nSpellMaster;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If still invalid, bail out with a helpful message
|
||||||
|
if (nPropID < 0)
|
||||||
|
{
|
||||||
|
if (DEBUG) DoDebug("CICreateInfusion: No iprp_spells entry for either original " + IntToString(nSpellOriginal) + " or master " + IntToString(nSpellMaster));
|
||||||
|
FloatingTextStringOnCreature("This spell cannot be infused (no item property mapping).", oCreator, FALSE);
|
||||||
|
return OBJECT_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DEBUG) DoDebug("CICreateInfusion: using spell " + IntToString(nSpellUsedForIP) + " (iprp row " + IntToString(nPropID) + ") for item property");
|
||||||
|
|
||||||
|
// Optional: check for material component (use the resolved iprp row)
|
||||||
|
string sMat = GetMaterialComponentTag(nPropID);
|
||||||
|
if (sMat != "")
|
||||||
|
{
|
||||||
|
object oMat = GetItemPossessedBy(oCreator, sMat);
|
||||||
|
if (oMat == OBJECT_INVALID)
|
||||||
|
{
|
||||||
|
FloatingTextStrRefOnCreature(83374, oCreator); // Missing material component
|
||||||
|
return OBJECT_INVALID;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DestroyObject(oMat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only allow divine spellcasters
|
||||||
|
int nClass = PRCGetLastSpellCastClass();
|
||||||
|
if (!GetIsDivineClass(nClass))
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("Only divine casters can use Create Infusion.", oCreator, FALSE);
|
||||||
|
return OBJECT_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create base infusion item (herb)
|
||||||
|
string sResRef = "prc_infusion_000";
|
||||||
|
object oTarget = CreateItemOnObject(sResRef, oCreator);
|
||||||
|
if (oTarget == OBJECT_INVALID)
|
||||||
|
{
|
||||||
|
WriteTimestampedLogEntry("Create Infusion failed: couldn't create item with resref " + sResRef);
|
||||||
|
return OBJECT_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Confirm that the item is a herb
|
||||||
|
int nBaseItem = GetBaseItemType(oTarget);
|
||||||
|
if (nBaseItem != BASE_ITEM_INFUSED_HERB)
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("Only herbs may be infused.", oCreator, FALSE);
|
||||||
|
DestroyObject(oTarget);
|
||||||
|
return OBJECT_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove all non-material item properties from the herb
|
||||||
|
itemproperty ipRemove = GetFirstItemProperty(oTarget);
|
||||||
|
while (GetIsItemPropertyValid(ipRemove))
|
||||||
|
{
|
||||||
|
itemproperty ipNext = GetNextItemProperty(oTarget);
|
||||||
|
if (GetItemPropertyType(ipRemove) != ITEM_PROPERTY_MATERIAL)
|
||||||
|
RemoveItemProperty(oTarget, ipRemove);
|
||||||
|
ipRemove = ipNext;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the cast-spell itemproperty using the iprp row we resolved
|
||||||
|
itemproperty ipSpell = ItemPropertyCastSpell(nPropID, IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE);
|
||||||
|
AddItemProperty(DURATION_TYPE_PERMANENT, ipSpell, oTarget);
|
||||||
|
|
||||||
|
// Optional PRC casting metadata: use the SAME spell id that matched the iprp row
|
||||||
|
// so caster level/DC/meta line up with the actual cast property on the item.
|
||||||
|
if (GetPRCSwitch(PRC_CREATE_INFUSION_CASTER_LEVEL))
|
||||||
|
{
|
||||||
|
int nCasterLevel = GetAlternativeCasterLevel(oCreator, PRCGetCasterLevel(oCreator));
|
||||||
|
// nSpellUsedForIP is either original (if that had an iprp row) or the master (fallback)
|
||||||
|
itemproperty ipLevel = ItemPropertyCastSpellCasterLevel(nSpellUsedForIP, nCasterLevel);
|
||||||
|
AddItemProperty(DURATION_TYPE_PERMANENT, ipLevel, oTarget);
|
||||||
|
|
||||||
|
itemproperty ipMeta = ItemPropertyCastSpellMetamagic(nSpellUsedForIP, PRCGetMetaMagicFeat());
|
||||||
|
AddItemProperty(DURATION_TYPE_PERMANENT, ipMeta, oTarget);
|
||||||
|
|
||||||
|
int nDC = PRCGetSpellSaveDC(nSpellUsedForIP, GetSpellSchool(nSpellUsedForIP), OBJECT_SELF);
|
||||||
|
itemproperty ipDC = ItemPropertyCastSpellDC(nSpellUsedForIP, nDC);
|
||||||
|
AddItemProperty(DURATION_TYPE_PERMANENT, ipDC, oTarget);
|
||||||
|
}
|
||||||
|
|
||||||
|
return oTarget;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Test main
|
// Test main
|
||||||
//void main(){}
|
// void main(){}
|
||||||
|
|||||||
@@ -20,9 +20,6 @@
|
|||||||
//:: Last Update: 2003-10-07
|
//:: Last Update: 2003-10-07
|
||||||
//:://////////////////////////////////////////////
|
//:://////////////////////////////////////////////
|
||||||
|
|
||||||
//:: Test void
|
|
||||||
//:: void main (){}
|
|
||||||
|
|
||||||
//Changed by primogenitor to include CEP itemtypes
|
//Changed by primogenitor to include CEP itemtypes
|
||||||
|
|
||||||
// * The tag of the ip work container, a placeable which has to be set into each
|
// * The tag of the ip work container, a placeable which has to be set into each
|
||||||
@@ -697,6 +694,7 @@ if(nItem == BASE_ITEM_BASTARDSWORD
|
|||||||
|| nItem == BASE_ITEM_SICKLE
|
|| nItem == BASE_ITEM_SICKLE
|
||||||
|| nItem == BASE_ITEM_TWOBLADEDSWORD
|
|| nItem == BASE_ITEM_TWOBLADEDSWORD
|
||||||
|| nItem == BASE_ITEM_CLUB
|
|| nItem == BASE_ITEM_CLUB
|
||||||
|
|| nItem == BASE_ITEM_CRAFTED_SCEPTER
|
||||||
|| nItem == BASE_ITEM_DAGGER
|
|| nItem == BASE_ITEM_DAGGER
|
||||||
|| nItem == BASE_ITEM_DIREMACE
|
|| nItem == BASE_ITEM_DIREMACE
|
||||||
|| nItem == BASE_ITEM_HEAVYFLAIL
|
|| nItem == BASE_ITEM_HEAVYFLAIL
|
||||||
@@ -729,6 +727,7 @@ if(nItem == BASE_ITEM_BASTARDSWORD
|
|||||||
|| nItem == BASE_ITEM_ELVEN_THINBLADE
|
|| nItem == BASE_ITEM_ELVEN_THINBLADE
|
||||||
|| nItem == BASE_ITEM_ELVEN_COURTBLADE
|
|| nItem == BASE_ITEM_ELVEN_COURTBLADE
|
||||||
|| nItem == BASE_ITEM_CRAFTED_STAFF
|
|| nItem == BASE_ITEM_CRAFTED_STAFF
|
||||||
|
|| nItem == BASE_ITEM_CRAFTED_SCEPTER
|
||||||
|| nItem == 300 //CEP Trident
|
|| nItem == 300 //CEP Trident
|
||||||
|| nItem == 303 //CEP Sai
|
|| nItem == 303 //CEP Sai
|
||||||
|| nItem == 304 //CEP nunchaku
|
|| nItem == 304 //CEP nunchaku
|
||||||
@@ -768,7 +767,6 @@ int IPGetIsBludgeoningWeapon(object oItem)
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// Return the IP_CONST_CASTSPELL_* ID matching to the SPELL_* constant given
|
// Return the IP_CONST_CASTSPELL_* ID matching to the SPELL_* constant given
|
||||||
// in nSPELL_ID.
|
// in nSPELL_ID.
|
||||||
// This uses Get2DAstring, so it is slow. Avoid using in loops!
|
|
||||||
// returns -1 if there is no matching property for a spell
|
// returns -1 if there is no matching property for a spell
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
int IPGetIPConstCastSpellFromSpellID(int nSpellID)
|
int IPGetIPConstCastSpellFromSpellID(int nSpellID)
|
||||||
@@ -1616,14 +1614,124 @@ int IPGetDamageBonusConstantFromNumber(int nNumber)
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
void IPWildShapeCopyItemProperties(object oOld, object oNew, int bWeapon = FALSE)
|
void IPWildShapeCopyItemProperties(object oOld, object oNew, int bWeapon = FALSE)
|
||||||
{
|
{
|
||||||
if (GetIsObjectValid(oOld) && GetIsObjectValid(oNew))
|
// Invalid source/target
|
||||||
|
if (!GetIsObjectValid(oOld) || !GetIsObjectValid(oNew))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Determine possessor
|
||||||
|
object oPC = GetItemPossessor(oOld);
|
||||||
|
if (!GetIsObjectValid(oPC))
|
||||||
|
oPC = GetItemPossessor(oNew);
|
||||||
|
|
||||||
|
if (!GetIsObjectValid(oPC))
|
||||||
{
|
{
|
||||||
|
if (DEBUG) DoDebug("IPWS: Unable to determine item possessor");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine glove state once
|
||||||
|
int bMonkGloves = GetLocalInt(oPC, "WEARING_MONK_GLOVES");
|
||||||
|
|
||||||
|
// Weapon ranged mismatch = do nothing (intent is no partial copy)
|
||||||
|
if (bWeapon && GetWeaponRanged(oOld) != GetWeaponRanged(oNew))
|
||||||
|
{
|
||||||
|
if (DEBUG) DoDebug("IPWS: Weapon ranged mismatch <20> skipping all IP copy");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Begin property copy
|
||||||
|
itemproperty ip = GetFirstItemProperty(oOld);
|
||||||
|
while (GetIsItemPropertyValid(ip))
|
||||||
|
{
|
||||||
|
int nType = GetItemPropertyType(ip);
|
||||||
|
|
||||||
|
// If copying from gloves and monk gloves are active
|
||||||
|
if (bMonkGloves
|
||||||
|
&& (nType == ITEM_PROPERTY_DAMAGE_BONUS
|
||||||
|
|| nType == ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP
|
||||||
|
|| nType == ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP))
|
||||||
|
{
|
||||||
|
// Always apply glove damage IPs
|
||||||
|
AddItemProperty(DURATION_TYPE_PERMANENT, ip, oNew);
|
||||||
|
ip = GetNextItemProperty(oOld);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Normal weapon pass
|
||||||
|
if (bWeapon)
|
||||||
|
{
|
||||||
|
// If monk gloves active ? skip ALL weapon damage IPs
|
||||||
|
if (bMonkGloves
|
||||||
|
&& (nType == ITEM_PROPERTY_DAMAGE_BONUS
|
||||||
|
|| nType == ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP
|
||||||
|
|| nType == ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP))
|
||||||
|
{
|
||||||
|
ip = GetNextItemProperty(oOld);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
AddItemProperty(DURATION_TYPE_PERMANENT, ip, oNew);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AddItemProperty(DURATION_TYPE_PERMANENT, ip, oNew);
|
||||||
|
}
|
||||||
|
|
||||||
|
ip = GetNextItemProperty(oOld);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* // ----------------------------------------------------------------------------
|
||||||
|
// GZ, Sept. 30 2003
|
||||||
|
// Special Version of Copy Item Properties for use with greater wild shape
|
||||||
|
// oOld - Item equipped before polymorphing (source for item props)
|
||||||
|
// oNew - Item equipped after polymorphing (target for item props)
|
||||||
|
// bWeapon - Must be set TRUE when oOld is a weapon.
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
void IPWildShapeCopyItemProperties(object oOld, object oNew, int bWeapon = FALSE)
|
||||||
|
{
|
||||||
|
if (!GetIsObjectValid(oOld) || !GetIsObjectValid(oNew))
|
||||||
|
return;
|
||||||
|
|
||||||
|
object oPC = GetItemPossessor(oOld);
|
||||||
|
if (!GetIsObjectValid(oPC))
|
||||||
|
{
|
||||||
|
oPC = GetItemPossessor(oNew);
|
||||||
|
}
|
||||||
|
if (!GetIsObjectValid(oPC))
|
||||||
|
{
|
||||||
|
if (DEBUG) DoDebug("IPWS: Unable to determine item possessor");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int bMonkGloves = GetLocalInt(oPC, "WEARING_MONK_GLOVES");
|
||||||
|
|
||||||
itemproperty ip = GetFirstItemProperty(oOld);
|
itemproperty ip = GetFirstItemProperty(oOld);
|
||||||
while (GetIsItemPropertyValid(ip))
|
while (GetIsItemPropertyValid(ip))
|
||||||
{
|
{
|
||||||
if (bWeapon)
|
if (bWeapon)
|
||||||
{
|
{
|
||||||
if (GetWeaponRanged(oOld) == GetWeaponRanged(oNew) )
|
// Gloves override weapon damage <20> skip weapon damage properties
|
||||||
|
if (bMonkGloves)
|
||||||
|
{
|
||||||
|
int nType = GetItemPropertyType(ip);
|
||||||
|
|
||||||
|
// skip damage props
|
||||||
|
if (nType == ITEM_PROPERTY_DAMAGE_BONUS
|
||||||
|
|| nType == ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP
|
||||||
|
|| nType == ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP)
|
||||||
|
{
|
||||||
|
if (DEBUG) DoDebug("IPWS: SKIPPED weapon damage IP");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (DEBUG) DoDebug("IPWS: Applied non-damage weapon IP");
|
||||||
|
AddItemProperty(DURATION_TYPE_PERMANENT, ip, oNew);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (GetWeaponRanged(oOld) == GetWeaponRanged(oNew) )
|
||||||
{
|
{
|
||||||
AddItemProperty(DURATION_TYPE_PERMANENT,ip,oNew);
|
AddItemProperty(DURATION_TYPE_PERMANENT,ip,oNew);
|
||||||
}
|
}
|
||||||
@@ -1632,11 +1740,10 @@ void IPWildShapeCopyItemProperties(object oOld, object oNew, int bWeapon = FALSE
|
|||||||
{
|
{
|
||||||
AddItemProperty(DURATION_TYPE_PERMANENT,ip,oNew);
|
AddItemProperty(DURATION_TYPE_PERMANENT,ip,oNew);
|
||||||
}
|
}
|
||||||
ip = GetNextItemProperty(oOld);
|
|
||||||
|
|
||||||
|
ip = GetNextItemProperty(oOld);
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// Returns the current enhancement bonus of a weapon (+1 to +20), 0 if there is
|
// Returns the current enhancement bonus of a weapon (+1 to +20), 0 if there is
|
||||||
@@ -1883,7 +1990,7 @@ int IPDamageConstant(int nDamBon)
|
|||||||
case 49: nIPBonus = IP_CONST_DAMAGEBONUS_49; break;
|
case 49: nIPBonus = IP_CONST_DAMAGEBONUS_49; break;
|
||||||
case 50: nIPBonus = IP_CONST_DAMAGEBONUS_50; break;
|
case 50: nIPBonus = IP_CONST_DAMAGEBONUS_50; break;
|
||||||
}
|
}
|
||||||
if (nDamBon > 20) nIPBonus = IP_CONST_DAMAGEBONUS_50;
|
if (nDamBon > 50) nIPBonus = IP_CONST_DAMAGEBONUS_50;
|
||||||
|
|
||||||
return nIPBonus;
|
return nIPBonus;
|
||||||
}
|
}
|
||||||
@@ -2020,3 +2127,5 @@ int IPOnHitSaveDC(int nSaveDC)
|
|||||||
|
|
||||||
return nIPBonus;
|
return nIPBonus;
|
||||||
} */
|
} */
|
||||||
|
|
||||||
|
//:: void main(){}
|
||||||
@@ -73,6 +73,7 @@ void SetMasteryOfElements();
|
|||||||
|
|
||||||
//#include "lookup_2da_spell"
|
//#include "lookup_2da_spell"
|
||||||
#include "prcsp_reputation"
|
#include "prcsp_reputation"
|
||||||
|
#include "prc_inc_core"
|
||||||
//#include "prc_inc_spells"
|
//#include "prc_inc_spells"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
#include "prc_ipfeat_const"
|
#include "prc_ipfeat_const"
|
||||||
#include "prc_feat_const"
|
#include "prc_feat_const"
|
||||||
#include "inc_vfx_const"
|
#include "inc_vfx_const"
|
||||||
|
#include "prc_inc_nwscript"
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ const int POWER_LIST_WARMIND = CLASS_TYPE_WARMIND;
|
|||||||
/* Function prototypes */
|
/* Function prototypes */
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
|
int IsHiddenTalent(object oPC = OBJECT_SELF);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attempts to use psionic focus. If the creature was focused, it
|
* Attempts to use psionic focus. If the creature was focused, it
|
||||||
* loses the focus. If it has Epic Psionic Focus feats, it will
|
* loses the focus. If it has Epic Psionic Focus feats, it will
|
||||||
@@ -520,9 +522,9 @@ void GainPsionicFocus(object oGainee = OBJECT_SELF)
|
|||||||
{
|
{
|
||||||
int nPsySneak = 1;
|
int nPsySneak = 1;
|
||||||
if(GetHasFeat(FEAT_PSY_SNEAK_ATTACK_2d6, oGainee))
|
if(GetHasFeat(FEAT_PSY_SNEAK_ATTACK_2d6, oGainee))
|
||||||
nPsySneak += 2;
|
nPsySneak += 1;
|
||||||
if(GetHasFeat(FEAT_PSY_SNEAK_ATTACK_3d6, oGainee))
|
if(GetHasFeat(FEAT_PSY_SNEAK_ATTACK_3d6, oGainee))
|
||||||
nPsySneak += 3;
|
nPsySneak += 1;
|
||||||
|
|
||||||
SetLocalInt(oGainee, "PsyRogueSneak",nPsySneak);
|
SetLocalInt(oGainee, "PsyRogueSneak",nPsySneak);
|
||||||
DelayCommand(0.1, ExecuteScript("prc_sneak_att", oGainee));
|
DelayCommand(0.1, ExecuteScript("prc_sneak_att", oGainee));
|
||||||
@@ -786,69 +788,12 @@ int GetIsPsionicCharacter(object oCreature)
|
|||||||
GetHasFeat(FEAT_KALASHTAR_PP, oCreature) ||
|
GetHasFeat(FEAT_KALASHTAR_PP, oCreature) ||
|
||||||
GetHasFeat(FEAT_NATPSIONIC_1, oCreature) ||
|
GetHasFeat(FEAT_NATPSIONIC_1, oCreature) ||
|
||||||
GetHasFeat(FEAT_NATPSIONIC_2, oCreature) ||
|
GetHasFeat(FEAT_NATPSIONIC_2, oCreature) ||
|
||||||
GetHasFeat(FEAT_NATPSIONIC_3, oCreature)
|
GetHasFeat(FEAT_NATPSIONIC_3, oCreature) ||
|
||||||
|
IsHiddenTalent(oCreature)
|
||||||
// Racial psionicity signifying feats go here
|
// Racial psionicity signifying feats go here
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
int IsHiddenTalent(object oPC = OBJECT_SELF)
|
|
||||||
{
|
|
||||||
if (GetHasFeat(FEAT_HIDDEN_TALENT_BIOFEEDBACK, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_BITE_WOLF, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_BOLT, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_BURST, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_CALLTOMIND, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_CALL_WEAPONRY, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_CHAMELEON, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_CLAWS_BEAST, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_COMPRESSION, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_CONCEALTHOUGHT, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_CREATESOUND, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_CRYSTALSHARD, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_DAZE, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_DECELERATION, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_DEFPRECOG, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_DEMORALIZE, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_DISABLE, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_DISTRACT, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_ELFSIGHT, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_EMPATHY, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_EMPTYMIND, oPC) ||
|
|
||||||
//GetHasFeat(FEAT_HIDDEN_TALENT_ENERGYRAY, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_ENTANGLE, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_EXPANSION, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_FARHAND, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_FORCESCREEN, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_GREASE, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_HAMMER, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_INERTIALARMOUR, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_MATTERAGITATION, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_MINDTHRUST, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_MYLIGHT, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_OFFPRECOG, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_OFFPRESC, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_PREVENOM, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_PREVENOM_WEAPON, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_SKATE, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_STOMP, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_SYNESTHETE, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_TELEMPATHICPRO, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_THICKSKIN, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_VIGOR, oPC) ||
|
|
||||||
GetHasFeat(FEAT_HIDDEN_TALENT_GRIP_IRON, oPC))
|
|
||||||
{
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void LocalCleanExtraFists(object oCreature)
|
void LocalCleanExtraFists(object oCreature)
|
||||||
{
|
{
|
||||||
int iIsCWeap, iIsEquip;
|
int iIsCWeap, iIsEquip;
|
||||||
@@ -985,6 +930,48 @@ int PracticedManifesting(object oManifester, int iManifestingClass, int iManifes
|
|||||||
|
|
||||||
int GetManifesterLevel(object oManifester, int nSpecificClass = CLASS_TYPE_INVALID, int nMaxPowerLevel = FALSE)
|
int GetManifesterLevel(object oManifester, int nSpecificClass = CLASS_TYPE_INVALID, int nMaxPowerLevel = FALSE)
|
||||||
{
|
{
|
||||||
|
// Handle POWER_LIST_MISC (Hidden Talent) powers
|
||||||
|
// Check if this is a power list call
|
||||||
|
int nPowerType = GetLocalInt(oManifester, "PRC_UsePowerList");
|
||||||
|
|
||||||
|
if(nSpecificClass == CLASS_TYPE_INVALID && nPowerType == POWER_LIST_MISC)
|
||||||
|
{
|
||||||
|
if(DEBUG) DoDebug("psi_inc_core >> GetManifesterLevel: CLASS_TYPE_INVALID + POWER_LIST_MISC found!");
|
||||||
|
// Check if character has psionic class levels
|
||||||
|
int nPsionLevel = GetLevelByClass(CLASS_TYPE_PSION, oManifester);
|
||||||
|
int nPsywarLevel = GetLevelByClass(CLASS_TYPE_PSYWAR, oManifester);
|
||||||
|
int nWilderLevel = GetLevelByClass(CLASS_TYPE_WILDER, oManifester);
|
||||||
|
int nWarmindLevel = GetLevelByClass(CLASS_TYPE_WARMIND, oManifester);
|
||||||
|
int nFistOfZuokenLevel = GetLevelByClass(CLASS_TYPE_FIST_OF_ZUOKEN, oManifester);
|
||||||
|
int nPsychicRogueLevel = GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oManifester);
|
||||||
|
|
||||||
|
// If no psionic levels, use Charisma-based calculation (treat as 1st level)
|
||||||
|
if(nPsionLevel + nPsywarLevel + nWilderLevel + nWarmindLevel +
|
||||||
|
nFistOfZuokenLevel + nPsychicRogueLevel == 0)
|
||||||
|
{
|
||||||
|
// Hidden Talent: considered 1st-level manifester, but must have CHA 11+
|
||||||
|
if(DEBUG) DoDebug("psi_inc_core >> GetManifesterLevel: Hidden Talent found!");
|
||||||
|
if(GetAbilityScore(oManifester, ABILITY_CHARISMA) >= 11)
|
||||||
|
return 1;
|
||||||
|
else
|
||||||
|
return 0; // Cannot manifest without CHA 11+
|
||||||
|
}
|
||||||
|
|
||||||
|
if(DEBUG) DoDebug("psi_inc_core >> GetManifesterLevel: nSpecificClass=" + IntToString(nSpecificClass) +
|
||||||
|
", nPowerType=" + IntToString(nPowerType));
|
||||||
|
|
||||||
|
// Has psionic levels - return highest manifester level
|
||||||
|
int nHighest = 0;
|
||||||
|
if(nPsionLevel > 0) nHighest = GetManifesterLevel(oManifester, CLASS_TYPE_PSION);
|
||||||
|
if(nPsywarLevel > 0) nHighest = PRCMax(nHighest, GetManifesterLevel(oManifester, CLASS_TYPE_PSYWAR));
|
||||||
|
if(nWilderLevel > 0) nHighest = PRCMax(nHighest, GetManifesterLevel(oManifester, CLASS_TYPE_WILDER));
|
||||||
|
if(nWarmindLevel > 0) nHighest = PRCMax(nHighest, GetManifesterLevel(oManifester, CLASS_TYPE_WARMIND));
|
||||||
|
if(nFistOfZuokenLevel > 0) nHighest = PRCMax(nHighest, GetManifesterLevel(oManifester, CLASS_TYPE_FIST_OF_ZUOKEN));
|
||||||
|
if(nPsychicRogueLevel > 0) nHighest = PRCMax(nHighest, GetManifesterLevel(oManifester, CLASS_TYPE_PSYCHIC_ROGUE));
|
||||||
|
|
||||||
|
return nHighest;
|
||||||
|
}
|
||||||
|
|
||||||
int nLevel;
|
int nLevel;
|
||||||
int nAdjust = GetLocalInt(oManifester, PRC_CASTERLEVEL_ADJUSTMENT);
|
int nAdjust = GetLocalInt(oManifester, PRC_CASTERLEVEL_ADJUSTMENT);
|
||||||
nAdjust -= GetLocalInt(oManifester, "WoLManifPenalty");
|
nAdjust -= GetLocalInt(oManifester, "WoLManifPenalty");
|
||||||
@@ -1055,11 +1042,21 @@ int GetManifesterLevel(object oManifester, int nSpecificClass = CLASS_TYPE_INVAL
|
|||||||
//Gets the manifesting class
|
//Gets the manifesting class
|
||||||
int nManifestingClass = GetManifestingClass(oManifester);
|
int nManifestingClass = GetManifestingClass(oManifester);
|
||||||
if(DEBUG) DoDebug("Manifesting Class #2: " + IntToString(nManifestingClass), oManifester);
|
if(DEBUG) DoDebug("Manifesting Class #2: " + IntToString(nManifestingClass), oManifester);
|
||||||
|
|
||||||
nLevel = GetLevelByClass(nManifestingClass, oManifester);
|
nLevel = GetLevelByClass(nManifestingClass, oManifester);
|
||||||
// Add levels from +ML PrCs only for the first manifesting class
|
// Add levels from +ML PrCs only for the first manifesting class
|
||||||
nLevel += GetPsionicPRCLevels(oManifester, nManifestingClass);
|
nLevel += GetPsionicPRCLevels(oManifester, nManifestingClass);
|
||||||
//nLevel += nManifestingClass == GetPrimaryPsionicClass(oManifester) ? GetPsionicPRCLevels(oManifester) : 0;
|
|
||||||
|
|
||||||
|
// CHECK: If this is Hidden Talent and character has no levels, set to 1
|
||||||
|
if(nLevel == 0 && GetLocalInt(oManifester, "PRC_UsePowerList") == TRUE &&
|
||||||
|
GetLocalInt(oManifester, "PRC_PowerListType") == POWER_LIST_MISC)
|
||||||
|
{
|
||||||
|
if(GetAbilityScore(oManifester, ABILITY_CHARISMA) >= 11)
|
||||||
|
{
|
||||||
|
if(DEBUG) DoDebug("GetManifesterLevel: Hidden Talent with no psionic levels, returning 1");
|
||||||
|
nLevel = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
// Psionic vestiges are tucked in here to override things.
|
// Psionic vestiges are tucked in here to override things.
|
||||||
// This assumes that there will never be a psion with this spell effect manifesting things
|
// This assumes that there will never be a psion with this spell effect manifesting things
|
||||||
if (nManifestingClass == CLASS_TYPE_PSION && GetHasSpellEffect(VESTIGE_ARETE, oManifester) && !nMaxPowerLevel)
|
if (nManifestingClass == CLASS_TYPE_PSION && GetHasSpellEffect(VESTIGE_ARETE, oManifester) && !nMaxPowerLevel)
|
||||||
@@ -1087,6 +1084,36 @@ int GetManifesterLevel(object oManifester, int nSpecificClass = CLASS_TYPE_INVAL
|
|||||||
|
|
||||||
// If you have a primary psionic class and no manifester level yet, get levels based on that
|
// If you have a primary psionic class and no manifester level yet, get levels based on that
|
||||||
if (GetPrimaryPsionicClass(oManifester) && nLevel == 0)
|
if (GetPrimaryPsionicClass(oManifester) && nLevel == 0)
|
||||||
|
{
|
||||||
|
int nClass = GetPrimaryPsionicClass(oManifester);
|
||||||
|
nLevel = GetLevelByClass(nClass, oManifester);
|
||||||
|
nLevel += GetPsionicPRCLevels(oManifester, nClass);
|
||||||
|
nLevel += PracticedManifesting(oManifester, nClass, nLevel);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If everything else fails, check for Hidden Talent before returning 0
|
||||||
|
if(nLevel == 0)
|
||||||
|
{
|
||||||
|
// Check if this is a Hidden Talent power
|
||||||
|
if(GetLocalInt(oManifester, "PRC_UsePowerList") == POWER_LIST_MISC)
|
||||||
|
{
|
||||||
|
// Hidden Talent: manifester level is 1 if they have CHA 11+
|
||||||
|
if(GetAbilityScore(oManifester, ABILITY_CHARISMA) >= 11)
|
||||||
|
{
|
||||||
|
if(DEBUG) DoDebug("GetManifesterLevel: Hidden Talent character, returning level 1");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(DEBUG) DoDebug("Failed to get manifester level for creature " + DebugObject2Str(oManifester) + ", using first class slot");
|
||||||
|
//else WriteTimestampedLogEntry("Failed to get manifester level for creature " + DebugObject2Str(oManifester) + ", using first class slot");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* // If you have a primary psionic class and no manifester level yet, get levels based on that
|
||||||
|
if (GetPrimaryPsionicClass(oManifester) && nLevel == 0)
|
||||||
{
|
{
|
||||||
int nClass = GetPrimaryPsionicClass(oManifester);
|
int nClass = GetPrimaryPsionicClass(oManifester);
|
||||||
nLevel = GetLevelByClass(nClass, oManifester);
|
nLevel = GetLevelByClass(nClass, oManifester);
|
||||||
@@ -1102,7 +1129,7 @@ int GetManifesterLevel(object oManifester, int nSpecificClass = CLASS_TYPE_INVAL
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// The bonuses inside only apply to normal manifestation
|
// The bonuses inside only apply to normal manifestation
|
||||||
if(!GetLocalInt(oManifester, PRC_IS_PSILIKE))
|
if(!GetLocalInt(oManifester, PRC_IS_PSILIKE))
|
||||||
@@ -1666,3 +1693,224 @@ int GetMaxPowerLevel(object oManifester)
|
|||||||
if (DEBUG) DoDebug("GetMaxPowerLevel is "+IntToString(nMax));
|
if (DEBUG) DoDebug("GetMaxPowerLevel is "+IntToString(nMax));
|
||||||
return nMax;
|
return nMax;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////
|
||||||
|
/* START HIDDEN TALENT */
|
||||||
|
//////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
int IsHiddenTalent(object oPC = OBJECT_SELF)
|
||||||
|
{
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_BIOFEEDBACK, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_BITE_WOLF, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_BOLT, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_BURST, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_CALLTOMIND, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_CALL_WEAPONRY, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_CHAMELEON, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_CLAWS_BEAST, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_COMPRESSION, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_CONCEALTHOUGHT, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_CREATESOUND, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_CRYSTALSHARD, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_DAZE, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_DECELERATION, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_DEFPRECOG, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_DEMORALIZE, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_DISABLE, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_DISTRACT, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_ELFSIGHT, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_EMPATHY, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_EMPTYMIND, oPC) ||
|
||||||
|
//GetHasFeat(FEAT_HIDDEN_TALENT_ENERGYRAY, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_ENTANGLE, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_EXPANSION, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_FARHAND, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_FORCESCREEN, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_GREASE, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_HAMMER, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_INERTIALARMOUR, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_MATTERAGITATION, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_MINDTHRUST, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_MYLIGHT, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_OFFPRECOG, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_OFFPRESC, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_PREVENOM, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_PREVENOM_WEAPON, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_SKATE, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_STOMP, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_SYNESTHETE, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_TELEMPATHICPRO, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_THICKSKIN, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_VIGOR, oPC) ||
|
||||||
|
GetHasFeat(FEAT_HIDDEN_TALENT_GRIP_IRON, oPC))
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetHiddenTalentPowerFromFeat(int nFeatID)
|
||||||
|
{
|
||||||
|
// Map Hidden Talent feats to their corresponding power IDs
|
||||||
|
// Using the same mappings as GetIsHiddenTalentPower()
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_BIOFEEDBACK) return POWER_BIOFEEDBACK;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_BITE_WOLF) return POWER_BITE_WOLF;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_BOLT) return POWER_BOLT;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_BURST) return POWER_BURST;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_CALLTOMIND) return POWER_CALLTOMIND;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_CALL_WEAPONRY) return POWER_CALL_WEAPONRY;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_CHAMELEON) return POWER_CHAMELEON;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_CLAWS_BEAST) return POWER_CLAWS_BEAST;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_COMPRESSION) return POWER_COMPRESSION;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_CONCEALTHOUGHT) return POWER_CONCEALTHOUGHT;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_CREATESOUND) return POWER_CREATESOUND;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_CRYSTALSHARD) return POWER_CRYSTALSHARD;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_DAZE) return POWER_DAZE;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_DECELERATION) return POWER_DECELERATION;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_DEFPRECOG) return POWER_DEFPRECOG;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_DEMORALIZE) return POWER_DEMORALIZE;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_DISABLE) return POWER_DISABLE;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH)return POWER_DISSIPATINGTOUCH;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_DISTRACT) return POWER_DISTRACT;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_ELFSIGHT) return POWER_ELFSIGHT;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_EMPATHY) return POWER_EMPATHY;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_EMPTYMIND) return POWER_EMPTYMIND;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_ENTANGLE) return POWER_ENTANGLE;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_EXPANSION) return POWER_EXPANSION;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_FARHAND) return POWER_FARHAND;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_FORCESCREEN) return POWER_FORCESCREEN;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_GREASE) return POWER_GREASE;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_HAMMER) return POWER_HAMMER;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_INERTIALARMOUR) return POWER_INERTIALARMOUR;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_MATTERAGITATION) return POWER_MATTERAGITATION;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW) return POWER_METAPHYSICAL_CLAW;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON) return POWER_METAPHYSICAL_WEAPON;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_MINDTHRUST) return POWER_MINDTHRUST;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_MYLIGHT) return POWER_MYLIGHT;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_OFFPRECOG) return POWER_OFFPRECOG;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_OFFPRESC) return POWER_OFFPRESC;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_PREVENOM) return POWER_PREVENOM;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_PREVENOM_WEAPON) return POWER_PREVENOM_WEAPON;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_SKATE) return POWER_SKATE;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_STOMP) return POWER_STOMP;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_SYNESTHETE) return POWER_SYNESTHETE;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_TELEMPATHICPRO) return POWER_TELEMPATHICPRO;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_THICKSKIN) return POWER_THICKSKIN;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_VIGOR) return POWER_VIGOR;
|
||||||
|
if(nFeatID == FEAT_HIDDEN_TALENT_GRIP_IRON) return POWER_GRIP_IRON;
|
||||||
|
|
||||||
|
return -1; // Not found
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetHiddenTalentCount(object oPC = OBJECT_SELF)
|
||||||
|
{
|
||||||
|
int nCount = 0;
|
||||||
|
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_BIOFEEDBACK, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_BITE_WOLF, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_BOLT, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_BURST, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_CALLTOMIND, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_CALL_WEAPONRY, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_CHAMELEON, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_CLAWS_BEAST, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_COMPRESSION, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_CONCEALTHOUGHT, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_CREATESOUND, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_CRYSTALSHARD, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_DAZE, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_DECELERATION, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_DEFPRECOG, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_DEMORALIZE, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_DISABLE, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_DISTRACT, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_ELFSIGHT, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_EMPATHY, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_EMPTYMIND, oPC)) nCount++;
|
||||||
|
//if (GetHasFeat(FEAT_HIDDEN_TALENT_ENERGYRAY, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_ENTANGLE, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_EXPANSION, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_FARHAND, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_FORCESCREEN, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_GREASE, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_HAMMER, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_INERTIALARMOUR, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_MATTERAGITATION, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON, oPC))nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_MINDTHRUST, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_MYLIGHT, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_OFFPRECOG, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_OFFPRESC, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_PREVENOM, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_PREVENOM_WEAPON, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_SKATE, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_STOMP, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_SYNESTHETE, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_TELEMPATHICPRO, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_THICKSKIN, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_VIGOR, oPC)) nCount++;
|
||||||
|
if (GetHasFeat(FEAT_HIDDEN_TALENT_GRIP_IRON, oPC)) nCount++;
|
||||||
|
|
||||||
|
return nCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetIsHiddenTalentPower(object oPC, int nPower)
|
||||||
|
{
|
||||||
|
// Check each Hidden Talent feat to see if it grants this power
|
||||||
|
if(nPower == POWER_BIOFEEDBACK && GetHasFeat(FEAT_HIDDEN_TALENT_BIOFEEDBACK, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_BITE_WOLF && GetHasFeat(FEAT_HIDDEN_TALENT_BITE_WOLF, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_BOLT && GetHasFeat(FEAT_HIDDEN_TALENT_BOLT, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_BURST && GetHasFeat(FEAT_HIDDEN_TALENT_BURST, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_CALLTOMIND && GetHasFeat(FEAT_HIDDEN_TALENT_CALLTOMIND, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_CALL_WEAPONRY && GetHasFeat(FEAT_HIDDEN_TALENT_CALL_WEAPONRY, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_CHAMELEON && GetHasFeat(FEAT_HIDDEN_TALENT_CHAMELEON, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_CLAWS_BEAST && GetHasFeat(FEAT_HIDDEN_TALENT_CLAWS_BEAST, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_COMPRESSION && GetHasFeat(FEAT_HIDDEN_TALENT_COMPRESSION, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_CONCEALTHOUGHT && GetHasFeat(FEAT_HIDDEN_TALENT_CONCEALTHOUGHT, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_CREATESOUND && GetHasFeat(FEAT_HIDDEN_TALENT_CREATESOUND, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_CRYSTALSHARD && GetHasFeat(FEAT_HIDDEN_TALENT_CRYSTALSHARD, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_DAZE && GetHasFeat(FEAT_HIDDEN_TALENT_DAZE, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_DECELERATION && GetHasFeat(FEAT_HIDDEN_TALENT_DECELERATION, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_DEFPRECOG && GetHasFeat(FEAT_HIDDEN_TALENT_DEFPRECOG, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_DEMORALIZE && GetHasFeat(FEAT_HIDDEN_TALENT_DEMORALIZE, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_DISABLE && GetHasFeat(FEAT_HIDDEN_TALENT_DISABLE, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_DISSIPATINGTOUCH && GetHasFeat(FEAT_HIDDEN_TALENT_DISSIPATINGTOUCH, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_DISTRACT && GetHasFeat(FEAT_HIDDEN_TALENT_DISTRACT, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_ELFSIGHT && GetHasFeat(FEAT_HIDDEN_TALENT_ELFSIGHT, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_EMPATHY && GetHasFeat(FEAT_HIDDEN_TALENT_EMPATHY, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_EMPTYMIND && GetHasFeat(FEAT_HIDDEN_TALENT_EMPTYMIND, oPC)) return TRUE;
|
||||||
|
//if(nPower == POWER_ENERGYRAY && GetHasFeat(FEAT_HIDDEN_TALENT_ENERGYRAY, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_ENTANGLE && GetHasFeat(FEAT_HIDDEN_TALENT_ENTANGLE, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_EXPANSION && GetHasFeat(FEAT_HIDDEN_TALENT_EXPANSION, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_FARHAND && GetHasFeat(FEAT_HIDDEN_TALENT_FARHAND, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_FORCESCREEN && GetHasFeat(FEAT_HIDDEN_TALENT_FORCESCREEN, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_GREASE && GetHasFeat(FEAT_HIDDEN_TALENT_GREASE, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_HAMMER && GetHasFeat(FEAT_HIDDEN_TALENT_HAMMER, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_INERTIALARMOUR && GetHasFeat(FEAT_HIDDEN_TALENT_INERTIALARMOUR, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_MATTERAGITATION && GetHasFeat(FEAT_HIDDEN_TALENT_MATTERAGITATION, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_METAPHYSICAL_CLAW && GetHasFeat(FEAT_HIDDEN_TALENT_METAPHYSICAL_CLAW, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_METAPHYSICAL_WEAPON && GetHasFeat(FEAT_HIDDEN_TALENT_METAPHYSICAL_WEAPON, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_MINDTHRUST && GetHasFeat(FEAT_HIDDEN_TALENT_MINDTHRUST, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_MYLIGHT && GetHasFeat(FEAT_HIDDEN_TALENT_MYLIGHT, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_OFFPRECOG && GetHasFeat(FEAT_HIDDEN_TALENT_OFFPRECOG, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_OFFPRESC && GetHasFeat(FEAT_HIDDEN_TALENT_OFFPRESC, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_PREVENOM && GetHasFeat(FEAT_HIDDEN_TALENT_PREVENOM, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_PREVENOM_WEAPON && GetHasFeat(FEAT_HIDDEN_TALENT_PREVENOM_WEAPON, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_SKATE && GetHasFeat(FEAT_HIDDEN_TALENT_SKATE, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_STOMP && GetHasFeat(FEAT_HIDDEN_TALENT_STOMP, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_SYNESTHETE && GetHasFeat(FEAT_HIDDEN_TALENT_SYNESTHETE, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_TELEMPATHICPRO && GetHasFeat(FEAT_HIDDEN_TALENT_TELEMPATHICPRO, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_THICKSKIN && GetHasFeat(FEAT_HIDDEN_TALENT_THICKSKIN, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_VIGOR && GetHasFeat(FEAT_HIDDEN_TALENT_VIGOR, oPC)) return TRUE;
|
||||||
|
if(nPower == POWER_GRIP_IRON && GetHasFeat(FEAT_HIDDEN_TALENT_GRIP_IRON, oPC)) return TRUE;
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|||||||
@@ -110,6 +110,7 @@ object GetSplitPsionicRayTarget(struct manifestation manif, object oPrimaryTarge
|
|||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "psi_inc_core"
|
#include "psi_inc_core"
|
||||||
|
#include "psi_inc_psifunc"
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Internal functions */
|
/* Internal functions */
|
||||||
|
|||||||
@@ -572,6 +572,10 @@ int GetMaxPowerCount(object oCreature, int nList)
|
|||||||
|
|
||||||
int GetHasPower(int nPower, object oCreature = OBJECT_SELF)
|
int GetHasPower(int nPower, object oCreature = OBJECT_SELF)
|
||||||
{
|
{
|
||||||
|
// Check MISC list first (for Hidden Talent and similar feats)
|
||||||
|
if(GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_INVALID), oCreature))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
if((GetLevelByClass(CLASS_TYPE_PSION, oCreature)
|
if((GetLevelByClass(CLASS_TYPE_PSION, oCreature)
|
||||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSION), oCreature)
|
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSION), oCreature)
|
||||||
) ||
|
) ||
|
||||||
|
|||||||
@@ -93,9 +93,8 @@ void GainPowerPoints(object oChar, int nGain, int bCanExceedMax = FALSE, int bIn
|
|||||||
* @param bInform If TRUE, runs TellCharacterPowerPointStatus() on oChar
|
* @param bInform If TRUE, runs TellCharacterPowerPointStatus() on oChar
|
||||||
* after making the modification.
|
* after making the modification.
|
||||||
*/
|
*/
|
||||||
/*
|
|
||||||
void GainTemporaryPowerPoints(object oChar, int nGain, float fDuration, int bInform = TRUE);
|
void GainTemporaryPowerPoints(object oChar, int nGain, float fDuration, int bInform = TRUE);
|
||||||
*/
|
|
||||||
/**
|
/**
|
||||||
* Decreases the character's current power point count by up to the given
|
* Decreases the character's current power point count by up to the given
|
||||||
* amount, limited to not going below 0.
|
* amount, limited to not going below 0.
|
||||||
@@ -138,8 +137,12 @@ int _GetFeatBonusPP(object oChar)
|
|||||||
{
|
{
|
||||||
int nBonusPP = 0;
|
int nBonusPP = 0;
|
||||||
|
|
||||||
//:: Wild Talent & Hidden Talents
|
//:: Wild Talent
|
||||||
if(GetHasFeat(FEAT_WILD_TALENT, oChar) || IsHiddenTalent())
|
if(GetHasFeat(FEAT_WILD_TALENT, oChar))
|
||||||
|
nBonusPP += 2;
|
||||||
|
|
||||||
|
//:: Hidden Talent
|
||||||
|
if(GetHasFeat(FEAT_HIDDEN_TALENT, oChar))
|
||||||
nBonusPP += 2;
|
nBonusPP += 2;
|
||||||
|
|
||||||
//:: Psionic Feats
|
//:: Psionic Feats
|
||||||
|
|||||||
@@ -40,7 +40,8 @@ void IdentifyPower(object oManifester, int nPowerId);
|
|||||||
|
|
||||||
// Always access via psi_inc_psifunc.
|
// Always access via psi_inc_psifunc.
|
||||||
|
|
||||||
//#include "psi_inc_core"
|
#include "psi_inc_core"
|
||||||
|
#include "inc_2dacache"
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Internal functions */
|
/* Internal functions */
|
||||||
|
|||||||
@@ -407,6 +407,8 @@ void _CleanManifestationVariables(object oManifester)
|
|||||||
DeleteLocalInt(oManifester, PRC_POWER_LEVEL);
|
DeleteLocalInt(oManifester, PRC_POWER_LEVEL);
|
||||||
DeleteLocalInt(oManifester, PRC_IS_PSILIKE);
|
DeleteLocalInt(oManifester, PRC_IS_PSILIKE);
|
||||||
DeleteLocalInt(oManifester, PRC_AUGMENT_OVERRIDE);
|
DeleteLocalInt(oManifester, PRC_AUGMENT_OVERRIDE);
|
||||||
|
DeleteLocalInt(oManifester, "PRC_UsePowerList");
|
||||||
|
DeleteLocalInt(oManifester, "PRC_PowerListType");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Internal function.
|
/** Internal function.
|
||||||
@@ -692,10 +694,28 @@ void _UsePowerAux(object oManifester, object oMfToken, int nSpellId,
|
|||||||
|
|
||||||
struct manifestation EvaluateManifestation(object oManifester, object oTarget, struct power_augment_profile pap, int nMetaPsiFlags)
|
struct manifestation EvaluateManifestation(object oManifester, object oTarget, struct power_augment_profile pap, int nMetaPsiFlags)
|
||||||
{
|
{
|
||||||
|
//:: Handle Hidden Talent
|
||||||
|
int nSpellID = PRCGetSpellId();
|
||||||
|
int bIsHiddenTalent = GetIsHiddenTalentPower(oManifester, nSpellID);
|
||||||
|
if(bIsHiddenTalent)
|
||||||
|
{
|
||||||
|
SetLocalInt(oManifester, "PRC_UsePowerList", TRUE);
|
||||||
|
SetLocalInt(oManifester, "PRC_PowerListType", POWER_LIST_MISC);
|
||||||
|
}
|
||||||
/* Get some data */
|
/* Get some data */
|
||||||
int bIgnoreConstraints = (DEBUG) ? GetLocalInt(oManifester, PRC_DEBUG_IGNORE_CONSTRAINTS) : FALSE;
|
int bIgnoreConstraints = (DEBUG) ? GetLocalInt(oManifester, PRC_DEBUG_IGNORE_CONSTRAINTS) : FALSE;
|
||||||
|
|
||||||
// Manifester-related stuff
|
// Manifester-related stuff
|
||||||
int nManifesterLevel = GetManifesterLevel(oManifester);
|
//int nManifesterLevel = GetManifesterLevel(oManifester);
|
||||||
|
int nManifesterLevel;
|
||||||
|
if(bIsHiddenTalent)
|
||||||
|
{
|
||||||
|
nManifesterLevel = GetManifesterLevel(oManifester, CLASS_TYPE_INVALID);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nManifesterLevel = GetManifesterLevel(oManifester);
|
||||||
|
}
|
||||||
int nPowerLevel = GetPowerLevel(oManifester);
|
int nPowerLevel = GetPowerLevel(oManifester);
|
||||||
int nClass = GetManifestingClass(oManifester);
|
int nClass = GetManifestingClass(oManifester);
|
||||||
int nWildSurge = GetWildSurge(oManifester);
|
int nWildSurge = GetWildSurge(oManifester);
|
||||||
@@ -714,6 +734,8 @@ struct manifestation EvaluateManifestation(object oManifester, object oTarget, s
|
|||||||
manif.nManifesterLevel = nManifesterLevel;
|
manif.nManifesterLevel = nManifesterLevel;
|
||||||
manif.nSpellID = PRCGetSpellId();
|
manif.nSpellID = PRCGetSpellId();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Run an ability score check to see if the manifester can manifest the power at all
|
// Run an ability score check to see if the manifester can manifest the power at all
|
||||||
if (bIsPsiLike)
|
if (bIsPsiLike)
|
||||||
{
|
{
|
||||||
@@ -767,6 +789,8 @@ struct manifestation EvaluateManifestation(object oManifester, object oTarget, s
|
|||||||
//If the manifester does not have enough points before hostile modifiers, cancel power
|
//If the manifester does not have enough points before hostile modifiers, cancel power
|
||||||
if(manif.nPPCost > nManifesterPP && !bIsPsiLike && !bIgnoreConstraints)
|
if(manif.nPPCost > nManifesterPP && !bIsPsiLike && !bIgnoreConstraints)
|
||||||
{
|
{
|
||||||
|
// DEBUG: show why the cost over cap branch triggered
|
||||||
|
FloatingTextStringOnCreature("DEBUG: manif.nManifesterLevel=" + IntToString(manif.nManifesterLevel) + " manif.nPPCost=" + IntToString(manif.nPPCost) +" PRC_UsePowerList=" + IntToString(GetLocalInt(manif.oManifester, "PRC_UsePowerList")), manif.oManifester, FALSE);
|
||||||
FloatingTextStrRefOnCreature(16826412, oManifester, FALSE); // "You do not have enough Power Points to manifest this power"
|
FloatingTextStrRefOnCreature(16826412, oManifester, FALSE); // "You do not have enough Power Points to manifest this power"
|
||||||
manif.bCanManifest = FALSE;
|
manif.bCanManifest = FALSE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
#include "prc_class_const"
|
#include "prc_class_const"
|
||||||
*/
|
*/
|
||||||
#include "prc_alterations"
|
#include "prc_alterations"
|
||||||
|
#include "prcsp_engine"
|
||||||
|
|
||||||
// Constants that dictate ResistPower results
|
// Constants that dictate ResistPower results
|
||||||
const int POWER_RESIST_FAIL = 1;
|
const int POWER_RESIST_FAIL = 1;
|
||||||
|
|||||||
@@ -75,6 +75,15 @@ int PsiPrePowerCastCode()
|
|||||||
|
|
||||||
int nContinue = !ExecuteScriptAndReturnInt("prespellcode", oManifester);
|
int nContinue = !ExecuteScriptAndReturnInt("prespellcode", oManifester);
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
// Forsakers can't use psionics
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
if (nContinue && GetLevelByClass(CLASS_TYPE_FORSAKER, oManifester))
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("Forsakers cannot manifest psionic powers!", oManifester, FALSE);
|
||||||
|
nContinue = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
// Break any spell require maintaining concentration
|
// Break any spell require maintaining concentration
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
@@ -209,3 +218,4 @@ int PsiPrePowerCastCode()
|
|||||||
return nContinue;
|
return nContinue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//:: void main (){}
|
||||||
@@ -41,6 +41,7 @@ const string _MYSTERY_LIST_MISC_ARRAY = "_MysteriesKnownMiscArray";
|
|||||||
const string _MYSTERY_LIST_LEVEL_ARRAY = "_MysteriesKnownLevelArray_";
|
const string _MYSTERY_LIST_LEVEL_ARRAY = "_MysteriesKnownLevelArray_";
|
||||||
const string _MYSTERY_LIST_GENERAL_ARRAY = "_MysteriesKnownGeneralArray";
|
const string _MYSTERY_LIST_GENERAL_ARRAY = "_MysteriesKnownGeneralArray";
|
||||||
|
|
||||||
|
#include "shd_inc_shdfunc"
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Function prototypes */
|
/* Function prototypes */
|
||||||
@@ -191,7 +192,8 @@ int PathFeatToIPFeat(int nFeat);
|
|||||||
/* Includes */
|
/* Includes */
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "inc_lookups"
|
||||||
|
#include "inc_pers_array"
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Internal functions */
|
/* Internal functions */
|
||||||
@@ -518,7 +520,7 @@ int GetMaxMysteryLevelLearnable(object oShadow, int nClass, int nType)
|
|||||||
if(DEBUG) DoDebug("GetMaxMysteryLevelLearnable nType: " + IntToString(nType));
|
if(DEBUG) DoDebug("GetMaxMysteryLevelLearnable nType: " + IntToString(nType));
|
||||||
|
|
||||||
// Rules Quote:
|
// Rules Quote:
|
||||||
// Within a category<72>Apprentice, Initiate, Master<65>you must have at least two mysteries of any given level
|
// Within a category<72>Apprentice, Initiate, Master<65>you must have at least two mysteries of any given level
|
||||||
// before you can take any mysteries of the next higher level. For instance, you must have two 1st-level
|
// before you can take any mysteries of the next higher level. For instance, you must have two 1st-level
|
||||||
// mysteries before you can take any 2nds, and at least two 2nds before you can take any 3rds.
|
// mysteries before you can take any 2nds, and at least two 2nds before you can take any 3rds.
|
||||||
int nMaxLrn, i, nMystLevel, nCount1, nCount2;
|
int nMaxLrn, i, nMystLevel, nCount1, nCount2;
|
||||||
|
|||||||
@@ -210,6 +210,7 @@ int GetHasNocturnal(object oShadow, int nPath);
|
|||||||
#include "prc_alterations"
|
#include "prc_alterations"
|
||||||
#include "shd_inc_myst"
|
#include "shd_inc_myst"
|
||||||
#include "shd_inc_mystknwn"
|
#include "shd_inc_mystknwn"
|
||||||
|
#include "lookup_2da_spell"
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Internal functions */
|
/* Internal functions */
|
||||||
@@ -236,12 +237,12 @@ int GetShadowcasterLevel(object oShadow = OBJECT_SELF, int nSpecificClass = CLAS
|
|||||||
// For when you want to assign the caster level.
|
// For when you want to assign the caster level.
|
||||||
if(nLevel)
|
if(nLevel)
|
||||||
{
|
{
|
||||||
if(DEBUG) SendMessageToPC(oShadow, "GetShadowcasterLevel(): Forced-level shadowcasting at level " + IntToString(nLevel));
|
if(DEBUG) DoDebug("GetShadowcasterLevel(): Forced-level shadowcasting at level " + IntToString(nLevel));
|
||||||
//DelayCommand(1.0, DeleteLocalInt(oShadow, PRC_CASTERLEVEL_OVERRIDE));
|
//DelayCommand(1.0, DeleteLocalInt(oShadow, PRC_CASTERLEVEL_OVERRIDE));
|
||||||
return nLevel + nAdjust;
|
return nLevel + nAdjust;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DEBUG) FloatingTextStringOnCreature("GetShadowcasterLevel: "+GetName(oShadow)+" is a "+IntToString(nSpecificClass), oShadow);
|
if (DEBUG) DoDebug("GetShadowcasterLevel: "+GetName(oShadow)+" is a "+IntToString(nSpecificClass), oShadow);
|
||||||
// The function user needs to know the character's Shadowcaster level in a specific class
|
// The function user needs to know the character's Shadowcaster level in a specific class
|
||||||
// instead of whatever the character last shadowcast a mystery as
|
// instead of whatever the character last shadowcast a mystery as
|
||||||
if(nSpecificClass != CLASS_TYPE_INVALID)
|
if(nSpecificClass != CLASS_TYPE_INVALID)
|
||||||
@@ -288,7 +289,7 @@ int GetShadowcasterLevel(object oShadow = OBJECT_SELF, int nSpecificClass = CLAS
|
|||||||
nLevel -= 4;
|
nLevel -= 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(DEBUG) FloatingTextStringOnCreature("Shadowcaster Level: " + IntToString(nLevel), oShadow, FALSE);
|
if(DEBUG) DoDebug("Shadowcaster Level: " + IntToString(nLevel));
|
||||||
|
|
||||||
return nLevel + nAdjust;
|
return nLevel + nAdjust;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
#include "prc_inc_spells"
|
#include "prc_inc_spells"
|
||||||
#include "inc_utility"
|
#include "inc_utility"
|
||||||
#include "prc_inc_itmrstr"
|
#include "prc_inc_itmrstr"
|
||||||
|
#include "shd_inc_shdfunc"
|
||||||
|
#include "lookup_2da_spell"
|
||||||
|
|
||||||
// This function holds all functions that are supposed to run before the actual
|
// This function holds all functions that are supposed to run before the actual
|
||||||
// spellscript gets run. If this functions returns FALSE, the spell is aborted
|
// spellscript gets run. If this functions returns FALSE, the spell is aborted
|
||||||
@@ -132,6 +134,15 @@ int ShadPreMystCastCode()
|
|||||||
|
|
||||||
int nContinue = !ExecuteScriptAndReturnInt("prespellcode",oShadow);
|
int nContinue = !ExecuteScriptAndReturnInt("prespellcode",oShadow);
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
// Block forsakers from using shadowcasting
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
if(GetLevelByClass(CLASS_TYPE_FORSAKER, oShadow) > 0)
|
||||||
|
{
|
||||||
|
SendMessageToPC(oShadow, "Forsakers cannot use the power of shadowcasting.");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
// Break any spell require maintaining concentration
|
// Break any spell require maintaining concentration
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
@@ -278,3 +289,5 @@ int ShadPreMystCastCode()
|
|||||||
if(DEBUG) DoDebug("ShadPreMystCastCode nContinue #6: " + IntToString(nContinue));
|
if(DEBUG) DoDebug("ShadPreMystCastCode nContinue #6: " + IntToString(nContinue));
|
||||||
return nContinue;
|
return nContinue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//:: void main (){}
|
||||||
|
|||||||
@@ -1154,6 +1154,7 @@ int GetIsDisciplineWeapon(object oWeapon, int nDiscipline)
|
|||||||
// Invalid is empty handed / Unarmed strike
|
// Invalid is empty handed / Unarmed strike
|
||||||
if(nType == BASE_ITEM_INVALID
|
if(nType == BASE_ITEM_INVALID
|
||||||
|| nType == BASE_ITEM_QUARTERSTAFF
|
|| nType == BASE_ITEM_QUARTERSTAFF
|
||||||
|
|| nType == BASE_ITEM_MAGICSTAFF
|
||||||
|| nType == BASE_ITEM_SHORTSWORD
|
|| nType == BASE_ITEM_SHORTSWORD
|
||||||
|| nType == BASE_ITEM_NUNCHAKU)
|
|| nType == BASE_ITEM_NUNCHAKU)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
#include "prc_inc_spells"
|
#include "prc_inc_spells"
|
||||||
#include "inc_utility"
|
#include "inc_utility"
|
||||||
#include "x2_inc_spellhook"
|
#include "x2_inc_spellhook"
|
||||||
|
#include "tob_inc_tobfunc"
|
||||||
|
|
||||||
// This function holds all functions that are supposed to run before the actual
|
// This function holds all functions that are supposed to run before the actual
|
||||||
// spellscript gets run. If this functions returns FALSE, the spell is aborted
|
// spellscript gets run. If this functions returns FALSE, the spell is aborted
|
||||||
@@ -78,7 +79,14 @@ int PreManeuverCastCode()
|
|||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
if(nContinue)
|
if(nContinue)
|
||||||
nContinue = !GetLocalInt(oInitiator, "CrusaderBreak");
|
nContinue = !GetLocalInt(oInitiator, "CrusaderBreak");
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
// Forsakers can't use supernatural maneuvers
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
if (nContinue && GetIsManeuverSupernatural(nMoveId) && GetLevelByClass(CLASS_TYPE_FORSAKER, oInitiator))
|
||||||
|
{
|
||||||
|
FloatingTextStringOnCreature("Forsakers cannot use supernatural maneuvers!", oInitiator, FALSE);
|
||||||
|
nContinue = FALSE;
|
||||||
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
// Run NullPsionicsField Check
|
// Run NullPsionicsField Check
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -109,11 +109,14 @@ int GetIsSyllable(int nSpellId);
|
|||||||
*/
|
*/
|
||||||
int DoSpellTruenameCheck(object oTrueSpeaker, object oTarget, int nPersonal = FALSE);
|
int DoSpellTruenameCheck(object oTrueSpeaker, object oTarget, int nPersonal = FALSE);
|
||||||
|
|
||||||
|
string GetNormalUtterSpellId(int nSpellId);
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Includes */
|
/* Includes */
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "prc_inc_spells"
|
#include "prc_inc_spells"
|
||||||
|
#include "true_inc_trufunc"
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Internal functions */
|
/* Internal functions */
|
||||||
|
|||||||
@@ -260,6 +260,7 @@ int GetCadenceCount(object oTrueSpeaker);
|
|||||||
#include "prc_alterations"
|
#include "prc_alterations"
|
||||||
#include "true_inc_utter"
|
#include "true_inc_utter"
|
||||||
#include "true_inc_truknwn"
|
#include "true_inc_truknwn"
|
||||||
|
#include "true_inc_truespk"
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Function definitions */
|
/* Function definitions */
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user